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

AKS中Ingress-Nginx按Host路由失败求助排查

AKS中Ingress-Nginx配置host后外部访问超时问题排查求助

问题现象

  • 当Ingress规则中配置host字段时,外部通过该host域名访问服务出现超时
  • 移除host配置后,外部可正常访问服务
  • 集群内任意Pod执行curl访问该host域名均返回正常结果
  • 本地机器通过nslookup可成功解析该host域名

当前配置信息

Ingress-Nginx控制器Helm安装命令

helm install --replace ingress-nginx ingress-nginx/ingress-nginx \
  --create-namespace \
  --namespace $NAMESPACE \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=127.0.0.1 \
  --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL \
  --set controller.service.loadBalancerIP=$IP \

Ingress资源配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hello-world-ingress
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - my.host.com
    secretName: tls-secret
  rules:
  - host: my.host.com # 移除该项后服务可访问
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: xrcfrontend
            port:
              number: 80

测试命令

  • 集群内测试(正常返回):curl https://my.host.com --insecure
  • 外部测试(超时):curl https://my.host.com --insecure

排查方向建议

  1. 修正Ingress控制器健康探针配置
    注意到Helm参数中azure-load-balancer-health-probe-request-path被设置为127.0.0.1,这是错误配置——健康探针路径应该指向Ingress控制器的健康检查端点(比如/healthz),而非IP地址。Azure负载均衡器会向Ingress Service的公网IP发送探针请求,当前配置会导致探针失败,负载均衡器不会将外部流量转发到后端节点。
    建议修改该参数并重新部署控制器:

    helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
      --namespace $NAMESPACE \
      --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
    
  2. 验证TLS证书状态
    检查cert-manager是否成功签发了tls-secret:

    kubectl get secret tls-secret -n $NAMESPACE
    

    如果secret中没有tls.crt和tls.key字段,说明证书签发失败,Ingress控制器无法处理HTTPS请求。可查看cert-manager日志排查:

    kubectl logs -n cert-manager -l app=cert-manager
    
  3. 查看Ingress控制器日志
    确认外部请求是否到达Ingress控制器:

    kubectl logs -n $NAMESPACE -l app.kubernetes.io/name=ingress-nginx
    

    如果日志中无外部请求记录,说明流量未到达控制器,需重点排查Azure负载均衡器状态。

  4. 检查Azure负载均衡器配置
    登录Azure门户,查看对应负载均衡器:

    • 确认健康探针状态为“正常”
    • 检查是否存在443端口的转发规则,且后端池指向Ingress控制器节点
    • 验证负载均衡器公网IP与配置的$IP一致
  5. 排查防火墙规则
    确认AKS节点的网络安全组(NSG)允许外部访问443端口,同时检查本地机器防火墙是否未阻止该端口的访问。

内容的提问来源于stack exchange,提问作者Mark W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:40:17