AKS服务部署完成后无法访问已分配的External IP问题求助
AKS LoadBalancer Service无法访问排查 + App Gateway集成方案
一、先搞定当前LoadBalancer的访问问题
1. 确认Service和Pod是否连得上
跑这个命令查看Service的Endpoints状态:
kubectl describe service <你的服务名>
如果Endpoints字段为空,说明Pod的标签和Service的selector不匹配,先把标签对齐——用kubectl get pods --show-labels查看Pod的标签,再对比Service的selector配置。
2. 先测Pod本身能不能用
创建集群内临时Pod(比如busybox),进去测试Pod内部访问:
kubectl run -it --rm busybox --image=busybox:1.28 -- /bin/sh
在临时Pod内访问目标Pod的IP和端口:
wget -qO- <Pod的IP>:<容器端口>
如果连这个都访问失败,问题出在应用本身——比如容器内服务未启动、端口监听错误,先修复Pod内的应用。
3. 检查Azure负载均衡器的状态
登录Azure门户,找到AKS对应的负载均衡器(名称通常包含kubernetes):
- 验证前端IP配置是否和Service的External IP一致;
- 检查后端池是否包含AKS节点IP,以及健康探测状态是否正常。如果健康探测失败,LB会将节点从后端池移除,导致流量无法到达集群。
- 若应用健康检查路径不是默认的
/,需要在Service中配置readinessProbe和livenessProbe,或手动修改LB的健康探测规则。
- 若应用健康检查路径不是默认的
4. 排查NSG和网络策略
AKS节点的NSG默认会放行LB流量,但自定义规则可能覆盖默认配置:
- 找到节点所在的NSG,确认存在入站规则允许目标端口(如80/443)的流量,来源IP设为你的测试IP或
0.0.0.0/0; - 若启用了Calico等网络插件,需检查Pod的网络策略,确认未拦截外部流量。
二、关于Ingress控制器的选择
你已经部署了Application Gateway,完全不需要单独部署普通Ingress控制器(如NGINX),直接使用**Application Gateway Ingress Controller (AGIC)**即可——这是Azure官方提供的集成组件,专门用于App Gateway与AKS的联动:
- 无需在AKS内额外运行Ingress Pod,节省集群资源;
- 直接复用App Gateway的WAF、SSL终止、路径路由等原生能力;
- 在AKS中定义Ingress资源后,AGIC会自动将配置同步到App Gateway,无需手动修改Gateway规则。
用Terraform部署AGIC的关键步骤
- 确保AKS已启用OIDC issuer,且你配置的RBAC权限包含AGIC所需权限;
- 在Terraform的
azurerm_kubernetes_cluster中添加addon_profile启用AGIC:
addon_profile { application_gateway { enabled = true gateway_id = azurerm_application_gateway.ag.id } }
- 编写Ingress配置文件,指向你的
aks-helloworld服务:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: helloworld-ingress annotations: kubernetes.io/ingress.class: azure/application-gateway spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: aks-helloworld-service port: number: 80
- 部署后,AGIC会自动配置App Gateway的路由规则,直接使用Gateway的公网IP即可访问应用。
总结
- 先按上述步骤排查LoadBalancer的问题,重点关注Endpoints、Pod健康状态、LB配置和NSG规则;
- 既然已使用App Gateway,优先选择AGIC,比单独部署Ingress控制器更省心,还能充分利用Gateway的原生功能。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

