You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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同级,相当于你定义了两个完全分开的规则:

  1. 一个只有域名、没有任何路径/后端的空规则
  2. 一个不指定域名(默认匹配所有*主机)的路径规则

这就是为什么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

后续验证步骤

  1. 应用修正后的配置:
    kubectl apply -f your-ingress-file.yaml
    
  2. 重新查看Ingress状态,确认Rules里的Host已经变成office01.xyz.com:
    kubectl describe ing xyz-office-ingress02
    
  3. 验证DNS解析:确保office01.xyz.com已正确指向Ingress的外部IP,可以用nslookup office01.xyz.com或dig office01.xyz.com测试。
  4. 检查Ingress Controller日志,确认请求是否被正确路由:
    kubectl logs -n kube-system -l app=nginx-ingress
    
  5. 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:32:31