You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NGINX Ingress Controller默认后端与Harbor服务路径冲突问题咨询

解决NGINX Ingress Controller中默认后端与Harbor路径冲突的问题

这是个很常见的Ingress路由冲突场景——当默认后端和Harbor的Ingress都抢占根路径/时,NGINX Ingress Controller的路由规则会优先匹配默认后端,导致Harbor无法被正常访问。下面给你几个可行的解决方案,按推荐程度排序:

方案1:使用专属Host域名路由Harbor(最推荐)

这是最干净、最不容易出问题的方式,通过给Harbor分配独立的域名,让Ingress根据host字段区分请求,彻底避开路径冲突。

比如给Harbor配置harbor.yourdomain.com作为专属域名,对应的Ingress配置示例如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: harbor-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    # 根据你的Harbor部署需求添加其他注解,比如认证、超时等
spec:
  ingressClassName: nginx # 替换成你的IngressClass名称
  tls:
  - hosts:
    - harbor.yourdomain.com
    secretName: harbor-tls-secret # 替换成你的Harbor TLS证书Secret
  rules:
  - host: harbor.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: harbor-portal # 替换成你的Harbor Portal服务名称
            port:
              number: 80

配置完成后,访问harbor.yourdomain.com就会直接路由到Harbor,而其他未匹配到该host的请求会继续走默认后端,完美解决冲突。

方案2:给Harbor配置非根路径前缀

如果无法使用独立域名,可以给Harbor的Ingress设置一个非根路径(比如/harbor),并通过NGINX的重写注解将请求转发到Harbor的根路径。

注意:这种方式可能需要调整Harbor内部组件的配置,确保静态资源、API请求都能正确适配前缀路径,否则可能出现页面加载异常的问题。

示例Ingress配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: harbor-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - yourdomain.com
    secretName: your-tls-secret
  rules:
  - host: yourdomain.com
    http:
      paths:
      - path: /harbor/(.*)
        pathType: Prefix
        backend:
          service:
            name: harbor-portal
            port:
              number: 80

配置后,访问yourdomain.com/harbor就会映射到Harbor的根路径。如果Harbor内部组件(比如Registry、Core服务)的路径也需要调整,你需要修改Harbor的配置文件(比如harbor.yml)中的相关路径参数。

方案3:调整或移除默认后端

如果你的集群不需要默认后端来处理404请求,可以直接删除默认后端的Ingress资源,或者修改其路径为非根路径(比如/default),这样根路径的请求就会自动匹配到Harbor的Ingress。

不过要注意:移除默认后端后,所有未匹配到其他Ingress规则的请求会直接返回404,需要根据你的业务需求权衡是否采用这种方式。

额外排查技巧

如果配置后还是有问题,可以查看NGINX Ingress Controller的日志,确认请求的路由情况:

kubectl logs -n <你的Ingress控制器命名空间> <Ingress Pod名称>

日志会显示每个请求匹配的Ingress规则,帮你快速定位问题所在。

内容的提问来源于stack exchange,提问作者Going Bananas

火山引擎 最新活动