AKS中Nginx Ingress多子域名路由配置实现方案
问题修正方案
你现有配置存在三个核心问题导致路由不生效:
- 所有Ingress规则未绑定域名
host字段,无法区分不同域名的请求 - 同一条HTTP规则下配置了3个完全相同的
/(.*)路径,存在匹配冲突,同时原YAML存在缩进错误,会直接导致资源创建失败 - 无特殊路径重写需求时,多余的正则匹配、路径重写注解可能引发转发异常,可按需移除
调整后的正确Ingress配置
核心逻辑是在spec.rules层级为每个域名单独创建独立的规则块,每个规则块下仅绑定对应域名需要转发的后端服务,从根本上避免路径冲突:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ing annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/proxy-body-size: 70m # 无特殊路径裁剪需求可删除下面两行正则、重写相关注解 # nginx.ingress.kubernetes.io/use-regex: "true" # nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: # 根域名转发到myapp服务 - host: myapp.com http: paths: - path: / pathType: Prefix backend: service: name: myapp port: number: 6666 # Partner1子域名转发到partner1-myapp服务 - host: partner1.myapp.com http: paths: - path: / pathType: Prefix backend: service: name: partner1-myapp port: number: 6669 # Partner2子域名转发到partner2-myapp服务 - host: partner2.myapp.com http: paths: - path: / pathType: Prefix backend: service: name: partner2-myapp port: number: 6672
配置后校验项
- 提前将
myapp.com、partner1.myapp.com、partner2.myapp.com三个域名的DNS A记录,指向AKS集群中Nginx Ingress Controller对应的Load Balancer公网IP,否则外部请求无法路由到集群入口 - 应用新配置前先删除旧的异常Ingress资源,再apply新配置,应用后可执行
kubectl describe ingress my-ing查看规则是否正常加载,无报错事件即为配置生效 - 原
partner2-myappDeployment中containerPort: 6672#行的注释前缺少空格,建议补上为containerPort: 6672 # the application listens to this port,避免潜在的YAML解析问题
内容的提问来源于stack exchange,提问作者Dillon Willis
相关产品推荐
相关产品推荐

