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

使用主机名无法访问AKS中Nginx Ingress对应的Azure负载均衡器

排查私有AKS集群Nginx Ingress无法访问的问题

针对你遇到的私有AKS集群中Nginx Ingress配置完成但无法访问的情况,核心问题通常出在负载均衡器类型配置、节点NSG规则或LB后端健康状态上,以下是具体排查和解决步骤:

一、基础状态检查

  1. 确认Ingress Controller服务状态
    首先检查Ingress Controller的Service是否为公共LoadBalancer类型,以及IP是否与Ingress资源的EXTERNAL-IP一致:

    kubectl get svc ingress-nginx-controller -n jananath-test
    

    如果TYPE不是LoadBalancer,或者EXTERNAL-IP为空/不一致,说明Ingress Controller的网络配置有误。

  2. 验证后端服务可用性
    在集群内部测试后端服务是否正常,排除服务本身的问题:

    kubectl run -it --rm test-pod --image=busybox -- wget -O- http://nginx-test.jananath-test.svc.cluster.local
    

    如果能返回Nginx默认页面,说明后端服务无问题,问题出在Ingress到节点的流量路径。

  3. 检查Ingress Controller Pod状态
    确保Ingress Controller的Pod正常运行,没有崩溃或重启:

    kubectl get pods -n jananath-test
    

二、Azure资源层排查

  1. 检查负载均衡器类型
    登录Azure门户,找到AKS自动生成的资源组(名称以MC_开头),查看其中的负载均衡器:

    • 如果是内部负载均衡器,则无法从公网访问,这是私有AKS集群安装Ingress时的常见默认配置问题。
    • 同时查看LB的后端池,确认AKS节点已被正确添加,且健康探针状态为正常(探针失败会导致LB停止转发流量)。
  2. 检查节点池NSG规则
    私有AKS的节点池NSG默认会阻止外部流量,需要确保存在允许Azure负载均衡器访问节点80端口的入站规则:

    • 在Azure门户的节点NSG中,查看是否有优先级较高的规则阻止了AzureLoadBalancer来源的80端口流量。

三、解决方法

1. 重新安装Ingress Controller为公共LB

如果当前Ingress Controller使用的是内部LB,执行以下命令重新安装,强制创建公共负载均衡器:

NAMESPACE=jananath-test

helm upgrade --install ingress-nginx ingress-nginx  \
--repo https://kubernetes.github.io/ingress-nginx  \
--namespace $NAMESPACE \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"="false"

2. 添加节点NSG入站规则

如果节点NSG缺少允许LB流量的规则,使用Azure CLI添加:

# 替换为你的AKS资源组和集群名称
AKS_RG="your-aks-resource-group"
AKS_CLUSTER="your-aks-cluster-name"

# 获取节点池所在的资源组和NSG名称
NODE_RG=$(az aks show --resource-group $AKS_RG --name $AKS_CLUSTER --query nodeResourceGroup -o tsv)
NODE_NSG=$(az network nsg list --resource-group $NODE_RG --query "[0].name" -o tsv)

# 添加允许LB访问80端口的入站规则
az network nsg rule create \
  --resource-group $NODE_RG \
  --nsg-name $NODE_NSG \
  --name allow-nginx-ingress-80 \
  --priority 100 \
  --source-address-prefixes AzureLoadBalancer \
  --source-port-ranges "*" \
  --destination-address-prefixes "*" \
  --destination-port-ranges 80 \
  --protocol Tcp \
  --access Allow \
  --direction Inbound

3. 修复LB健康探针

如果LB健康探针失败,检查Ingress Controller的探针配置:

kubectl describe svc ingress-nginx-controller -n jananath-test | grep -A5 "HealthCheckNodePort"

确认探针端口和路径(默认是80端口的/healthz),确保Ingress Pod的该路径能正常返回200状态码。

内容的提问来源于stack exchange,提问作者Jananath Banuka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:38:18