AKS部署Nginx Ingress后仅可通过域名访问、静态IP无法访问求助
问题根因
当前Ingress仅配置了platform-dns.eastus.cloudapp.azure.com单域名的匹配规则,Nginx Ingress会根据请求头的Host字段匹配路由规则:
- 直接访问静态IP时,请求Host字段为空,无匹配规则
- 使用自有域名访问时,请求Host字段为你的自有域名,无对应匹配规则
两种场景都会触发 fallback 到默认后端,而你的集群中default-http-backend不存在,所以返回Nginx 404错误。
调整步骤
1. 适配静态IP直接访问
在现有Ingress配置中新增无Host的默认路由规则,所有未匹配到指定域名的请求都会走该规则:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: basic-ingress annotations: cert-manager.io/cluster-issuer: XXXXXXXXXX kubernetes.io/ingress.allow-http: "true" kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: / spec: tls: - hosts: - platform-dns.eastus.cloudapp.azure.com # 后续如果要加自有域名的HTTPS,把域名加在这里 secretName: tls-secret rules: # 原有Azure域名规则保留 - host: platform-dns.eastus.cloudapp.azure.com http: paths: - path: /* pathType: Prefix backend: service: name: smp-frontend port: number: 80 - path: /api/* pathType: Prefix backend: service: name: smp-backend port: number: 8080 # 新增无Host的默认规则,适配IP直接访问 - http: paths: - path: /* pathType: Prefix backend: service: name: smp-frontend port: number: 80 - path: /api/* pathType: Prefix backend: service: name: smp-backend port: number: 8080
2. 适配自有域名访问
完成上述配置的基础上,额外做两个调整:
- 在Ingress的rules中新增对应自有域名的Host规则,路径配置和Azure域名的规则保持一致即可
- 到你的域名解析服务商后台,将自有域名的A记录指向AKS集群绑定的静态公网IP
- 若需要HTTPS访问,将自有域名添加到Ingress TLS配置的hosts列表中,cert-manager会自动为该域名签发有效证书
3. 验证配置生效
修改完配置后执行kubectl apply -f <你的ingress配置文件名>.yaml,等待2分钟左右待Ingress规则同步完成,即可分别测试静态IP、自有域名的访问是否正常。
额外校验项
如果配置后依然无法访问静态IP,执行kubectl get svc -n ingress-nginx,查看Nginx Ingress Controller对应的LoadBalancer服务的EXTERNAL-IP是否和你拿到的静态公网IP一致,若不一致需要更新Ingress Controller的Service配置,在spec中添加loadBalancerIP: <你的静态IP>字段。
内容的提问来源于stack exchange,提问作者Niels Uitterdijk
相关产品推荐
相关产品推荐

