AKS集群Ingress无外部IP分配问题及端到端部署求助
问题排查与端到端示例方案
一、Ingress无EXTERNAL IP的常见原因及排查步骤
1. 核心逻辑澄清
Ingress资源本身不会直接分配公网IP,它的EXTERNAL IP实际来自Ingress Controller对应的LoadBalancer类型Service。先排查Ingress Controller的Service状态:
- 查看Ingress Controller Pod状态:
确保所有Pod处于kubectl get pods -n ingress-basicRunning状态,无CrashLoop或Pending情况。 - 查看Ingress Controller的Service:
如果该Service的kubectl get svc -n ingress-basicEXTERNAL-IP为空或处于pending,则问题根源在这个Service,而非Ingress资源本身。
2. 权限与网络配置检查
- AKS权限验证:用Terraform部署AKS时,需确保集群的托管标识(或服务主体)拥有
Network Contributor权限,用于在节点资源组(MC_开头的自动生成组)中创建负载均衡器。检查Terraform配置中是否包含权限绑定的资源(比如azurerm_role_assignment)。 - 网络模式验证:
- 若用Azure CNI,确认子网剩余IP足够分配给LB和Pod;
- 若用Kubenet,确认节点子网的路由表配置正确,无阻止LB创建的规则。
- 节点资源组检查:登录Azure门户查看MC_开头的节点资源组,确认是否有新的负载均衡器被创建。若没有,说明Ingress Controller的Service未触发LB创建,大概率是权限不足。
3. Ingress资源配置验证
检查Ingress资源的spec.ingressClassName字段,需与部署的Ingress Controller的类名匹配(比如Nginx Ingress Controller默认类名为nginx)。若未指定该字段,集群可能没有默认Ingress Controller,导致Ingress资源无法关联到后端控制器。
二、端到端AKS集群(含负载均衡+DNS)示例结构
一个完整的示例包含Terraform基础设施定义和Kubernetes应用配置两部分:
1. Terraform部分(基础设施)
- 定义AKS集群:启用托管标识,配置网络(推荐用现有VNet/子网),并为托管标识分配
Network Contributor权限到VNet资源组; - 可选:创建Azure DNS Zone(用于后续绑定公网IP);
- 输出AKS的kubeconfig配置,方便连接集群。
2. Kubernetes部分(应用)
- 部署Nginx Ingress Controller:创建LoadBalancer类型的Service,可通过annotations指定LB SKU(比如
service.beta.kubernetes.io/azure-load-balancer-sku: standard); - 部署示例应用(如Hello World):创建Deployment和ClusterIP类型的Service;
- 部署Ingress资源:关联示例应用的Service,配置Host规则(比如
hello.example.com); - 可选:部署
external-dns组件,自动将Ingress Controller的LB公网IP同步到Azure DNS Zone,实现域名自动解析。
三、常见错误总结
- 遗漏Ingress Controller的LoadBalancer Service配置,或Service的annotations错误导致LB创建失败;
- AKS托管标识/服务主体权限不足,无法在节点资源组创建负载均衡器;
- Ingress资源未指定正确的
ingressClassName,无法关联到后端控制器。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

