AKS Ingress Controller通过DNS访问返回404错误问题求助
排查Ingress域名访问404问题
从你提供的Ingress配置和kubectl describe ing输出来看,核心问题出在Ingress规则的缩进错误,导致域名office01.xyz.com没有正确绑定到对应的路径规则上。
问题根源分析
先看你原Ingress YAML里的Rules段:
rules: - host: office01.xyz.com - http: paths: - path: /(/|$)(.*) pathType: Prefix backend: service: name: office-webapp port: number: 80 - path: /api/ pathType: Prefix backend: service: name: xyz-office-api port: number: 80
这里的- http:是一个独立的列表项,和- host: office01.xyz.com同级,相当于你定义了两个完全分开的规则:
- 一个只有域名、没有任何路径/后端的空规则
- 一个不指定域名(默认匹配所有
*主机)的路径规则
这就是为什么kubectl describe ing里显示Rules的Host是*,当你用office01.xyz.com访问时,Ingress Controller找不到匹配该域名的有效路径规则,自然返回404。
修正后的Ingress配置
把http:缩进一级,和host:放在同一个列表项里,这样路径规则就会绑定到指定域名上:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: xyz-office-ingress02 annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: / cert-manager.io/cluster-issuer: letsencrypt kubernetes.io/ingress.class: "nginx" spec: tls: - hosts: - office01.xyz.com secretName: tls-office-secret rules: - host: office01.xyz.com http: # 调整缩进,与host同属一个规则项 paths: - path: /(/|$)(.*) pathType: Prefix backend: service: name: office-webapp port: number: 80 - path: /api/ pathType: Prefix backend: service: name: xyz-office-api port: number: 80
后续验证步骤
- 应用修正后的配置:
kubectl apply -f your-ingress-file.yaml - 重新查看Ingress状态,确认Rules里的Host已经变成
office01.xyz.com:kubectl describe ing xyz-office-ingress02 - 验证DNS解析:确保
office01.xyz.com已正确指向Ingress的外部IP,可以用nslookup office01.xyz.com或dig office01.xyz.com测试。 - 检查Ingress Controller日志,确认请求是否被正确路由:
kubectl logs -n kube-system -l app=nginx-ingress - 确认TLS证书状态:如果是刚创建的证书,检查cert-manager是否成功颁发:
kubectl get certificates tls-office-secret
额外提示
Kubernetes YAML对缩进要求极严,列表项(-开头)的子元素必须保持一致缩进,否则会直接导致配置逻辑偏离预期。如果用NGINX Ingress Controller,还可以直接查看生成的NGINX配置来验证规则:
kubectl exec -n kube-system <nginx-ingress-pod-name> -- cat /etc/nginx/nginx.conf
内容的提问来源于stack exchange,提问作者Apurv Mishra
相关产品推荐
相关产品推荐

