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
排查方向建议
修正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验证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查看Ingress控制器日志
确认外部请求是否到达Ingress控制器:kubectl logs -n $NAMESPACE -l app.kubernetes.io/name=ingress-nginx如果日志中无外部请求记录,说明流量未到达控制器,需重点排查Azure负载均衡器状态。
检查Azure负载均衡器配置
登录Azure门户,查看对应负载均衡器:- 确认健康探针状态为“正常”
- 检查是否存在443端口的转发规则,且后端池指向Ingress控制器节点
- 验证负载均衡器公网IP与配置的
$IP一致
排查防火墙规则
确认AKS节点的网络安全组(NSG)允许外部访问443端口,同时检查本地机器防火墙是否未阻止该端口的访问。
内容的提问来源于stack exchange,提问作者Mark W
相关产品推荐
相关产品推荐

