使用CAF Terraform超级模块创建的AKS上应用公网IP无法访问
问题描述
通过Terraform azurerm CAF超级模块部署AKS集群后,执行以下操作部署ArgoCD:
- 创建ArgoCD命名空间并安装组件:
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml - 修改ArgoCD Server服务类型为
LoadBalancer以获取公网IP:kubectl edit service argocd-server -n argocd # 将spec.type从ClusterIP修改为LoadBalancer
当前问题:
- 服务的私有ClusterIP可正常访问资源
- 公网IP无法建立连接,且集群内所有LoadBalancer类型服务均存在此问题
- 已检查网络安全组(NSG)规则,确认允许相关流量
排查步骤
1. 验证LoadBalancer服务与Azure负载均衡器状态
- 检查服务状态,确认公网IP已分配且服务就绪:
确认kubectl get svc argocd-server -n argocdEXTERNAL-IP列显示有效公网IP,TYPE为LoadBalancer。 - 进入AKS对应的
MC_开头资源组,查看公共负载均衡器:- 验证前端IP配置已关联公网IP
- 确认后端池正确绑定AKS节点
- 检查健康探测规则(默认TCP探测对应服务端口),确保探测状态为健康
2. 检查AKS集群的出站流量配置
- 若AKS使用Azure Firewall或NAT网关管控出站流量:
- 确认负载均衡器公网IP的入站流量(如443端口)被允许通过防火墙
- 确保AKS节点的出站响应流量可正常返回客户端
3. 验证节点子网的路由表
- 查看AKS节点所在子网关联的路由表:
- 确认无自定义路由拦截公网到负载均衡器的流量
- 确保存在指向负载均衡器的默认路由,未被UDR(用户定义路由)覆盖
4. 确认负载均衡器SKU类型
- AKS默认使用Standard SKU负载均衡器,若部署时指定Basic SKU:
- Basic SKU不支持跨区域流量,需确保客户端与负载均衡器同区域
- 考虑切换为Standard SKU(需调整集群配置或重新部署)
5. 测试公网IP的端口可达性
- 使用工具测试目标端口连通性,排除本地网络问题:
尝试从不同网络环境(如手机热点)测试,确认是否为本地防火墙/代理拦截telnet <公网IP> 443 nc -zv <公网IP> 443
6. 检查CAF模块的AKS网络配置参数
- 核对Terraform配置中的CAF模块参数:
- 是否设置
enable_public_load_balancer = false禁用公网负载均衡器 - 是否开启私有集群(
private_cluster_enabled = true),此时公网访问需通过VPN/Express Route - 是否配置Network Policy规则,拦截了LoadBalancer服务的流量
- 是否设置
7. 查看服务与节点日志
- 检查ArgoCD Server Pod日志,确认服务正常运行:
kubectl logs -n argocd deployment/argocd-server - 查看kube-proxy日志,确认节点网络转发正常:
kubectl logs -n kube-system kube-proxy-<节点名称>
内容的提问来源于stack exchange,提问作者ariva
相关产品推荐
相关产品推荐

