使用Azure CNI的AKS集群Pod IP不在指定子网,问题排查咨询
问题分析与解决方案
Cluster IP的预期说明
Cluster IP是Kubernetes Service的内部集群通信地址,不属于节点所在的aks-subnet(10.2.4.0/24)范围。它由AKS集群的service_cidr参数定义,默认值为10.0.0.0/16。若需自定义该段,可在Terraform的azurerm_kubernetes_cluster资源的network_profile块中配置service_cidr字段。
Pod IP不符合预期的排查与修复
若你使用的是传统Azure CNI模式(预期Pod从节点子网分配IP),但实际Pod IP不在10.2.4.0/24,请检查以下配置:
- 禁用Azure CNI Overlay模式:如果
azurerm_kubernetes_cluster的network_profile中配置了pod_subnet_id,会自动启用Overlay模式,此时Pod IP从指定的Pod子网分配,而非节点所在的aks-subnet。如需使用传统Azure CNI,移除pod_subnet_id配置即可。 - 确认节点池子网关联:确保
azurerm_kubernetes_cluster_node_pool的subnet_id明确指向aks-subnet(10.2.4.0/24),未错误关联其他子网。 - 子网IP空间与Pod预留:传统Azure CNI下,每个节点需预留
max_pods数量的IP给Pod(默认30)。需保证aks-subnet的地址空间能容纳所有节点的预留IP(节点数 × max_pods + 节点自身IP),空间不足会导致AKS无法从该子网分配Pod IP。 - 验证network_plugin配置:在
azurerm_kubernetes_cluster的network_profile中,必须设置network_plugin = "azure",而非kubenet。
传统Azure CNI模式的Terraform配置示例
resource "azurerm_kubernetes_cluster" "aks" { name = "aks-cluster" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name dns_prefix = "aks-cluster" network_profile { network_plugin = "azure" service_cidr = "10.0.0.0/16" # 可自定义Cluster IP段 dns_service_ip = "10.0.0.10" docker_bridge_cidr = "172.17.0.1/16" # 请勿添加pod_subnet_id,避免启用Overlay模式 } } resource "azurerm_kubernetes_cluster_node_pool" "default" { name = "default" kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id vm_size = "Standard_DS2_v2" node_count = 3 subnet_id = azurerm_subnet.aks_subnet.id # 关联目标aks-subnet max_pods = 30 # 按需调整每个节点的Pod最大数量 }
若你实际需要使用Azure CNI Overlay模式(Pod使用独立子网),则需确保pod_subnet_id指向的子网是你期望的IP段,节点子网仍保留为aks-subnet即可。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

