Azure AKS中Ingress多域名配置遇404及指向错误问题求助
问题原因与解决方案
一、同一Ingress配置返回404的核心原因:YAML结构错误
你编写的多域名Ingress配置中,rules字段的YAML结构完全不符合Kubernetes规范。Ingress的rules是规则对象列表,每个规则需要将host和对应的http路由配置放在同一个列表条目下,而你把host和http拆成了独立的列表项,导致Ingress Controller无法识别有效的域名-服务绑定关系,最终返回404。
错误结构示例(你的写法):
rules: - host: zoo.example.com - http: # 这是一个无绑定host的独立规则 paths: - path: / ... - host: circus.example.com - http: # 同样是无绑定host的独立规则 paths: - path: / ...
修正后的同一Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-service-2 annotations: cert-manager.io/cluster-issuer: letsencrypt spec: ingressClassName: nginx tls: - hosts: - zoo.example.com - circus.example.com secretName: tls-secret rules: # 第一个完整规则:绑定zoo.example.com到zoo-ui服务 - host: zoo.example.com http: paths: - path: / pathType: Prefix backend: service: name: zoo-ui port: number: 80 # 第二个完整规则:绑定circus.example.com到circus-ui服务 - host: circus.example.com http: paths: - path: / pathType: Prefix backend: service: name: circus-ui port: number: 80
核心修正点:每个规则是单独的-条目,host和http属于同一条目下的缩进属性,确保Ingress Controller能正确解析域名与服务的对应关系。
二、拆分Ingress后域名指向同一服务的可能原因
当你将两个域名拆分为独立Ingress资源时,出现域名指向同一服务的问题,大概率是以下情况:
- TLS Secret冲突:如果两个Ingress共用同一个
secretName: tls-secret,而该证书仅包含单个域名信息,或cert-manager证书颁发异常,会导致Ingress路由匹配混乱。建议为每个Ingress配置独立的TLS Secret,或确保单个Secret包含两个域名的有效证书。 - Ingress规则配置错误:其中一个Ingress未正确指定
host字段,或使用了通配符规则,导致所有请求被匹配到该Ingress对应的服务。检查每个Ingress的rules.host是否准确,避免遗漏或错误。 - Ingress Controller缓存未刷新:AKS上的Nginx Ingress Controller存在配置缓存延迟,修改Ingress后等待1-2分钟,或执行
kubectl rollout restart deployment nginx-ingress-controller -n <你的Ingress命名空间>强制刷新配置。
额外验证步骤
- 执行
kubectl describe ingress <ingress-name>查看Ingress资源状态,确认Rules和TLS部分是否正确解析,是否存在错误提示。 - 检查cert-manager证书状态:
kubectl describe secret tls-secret,查看dnsNames字段是否包含两个目标域名。 - 直接测试服务可用性:通过
kubectl port-forward service/zoo-ui 8080:80访问服务,确认服务本身正常运行。
内容的提问来源于stack exchange,提问作者Jai Narayanan
相关产品推荐
相关产品推荐

