AKS Azure CNI节点子网静态IP预留及Pod IP分配管控咨询
AKS Azure CNI IP分配与子网IP预留指南
1. 节点池子网IP用作LoadBalancer外部IP的合规性
完全合规。Azure允许将AKS节点池子网内的IP指定为LoadBalancer服务的外部IP,只要该IP未被子网内其他资源(节点、Pod、VM等)占用即可。但需确保这类IP不在Azure CNI的自动分配范围内,避免地址冲突。
2. Azure CNI跟踪Pod已分配IP的机制
Azure CNI通过以下逻辑管理IP分配与跟踪:
- 每个节点上的
azure-vnet-ipam组件负责从子网中为Pod分配IP,同时维护节点本地的IP使用记录。 - 集群层面,Azure CNI会与Azure网络控制器同步子网的IP占用状态,确保不会出现重复分配。
- 已分配的Pod IP会被标记在节点的IPAM数据库中,同时Azure子网的IP地址空间也会同步标记这些IP为已占用(可通过Azure门户查看子网IP使用详情)。
3. 管控IP分配并预留子网IP的方法
有两种可靠方式预留子网内的IP,避免被Pod自动分配:
方式一:子网级IP预留(推荐)
直接在AKS节点池所在子网中设置IP范围预留:
- 通过Azure门户或Azure CLI找到目标子网,将需要预留的IP段排除在AKS可用IP池之外。例如子网地址空间为
10.0.0.0/24,可将10.0.0.100-10.0.0.150标记为预留,不纳入Azure CNI自动分配范围。 - Azure CLI配置示例:
az network vnet subnet update \ --name <你的子网名称> \ --vnet-name <你的虚拟网络名称> \ --resource-group <你的资源组名称> \ --address-prefixes 10.0.0.0/24 \ --reserved-ip-ranges 10.0.0.100-10.0.0.150
方式二:AKS集群级IP范围限制
创建或更新AKS集群/节点池时,指定Pod可使用的IP段(需是子网内的子集),未包含的IP段自动被预留:
- 创建集群时通过
--pod-cidr参数指定Pod分配范围,示例命令:
此时Pod仅能从az aks create \ --name <你的AKS集群名称> \ --resource-group <你的资源组名称> \ --network-plugin azure \ --vnet-subnet-id <你的子网ID> \ --pod-cidr 10.0.0.0/2610.0.0.0-10.0.0.63分配IP,子网内其余IP不会被Azure CNI分配给Pod。
4. 额外实践建议
- 预留IP段时,需确保不包含AKS节点的IP地址,避免节点网络中断。
- 若集群已运行Pod,修改子网预留范围或Pod CIDR后,需重启节点(或重新部署节点池)才能让新规则生效。
- 用于LoadBalancer服务的预留IP,建议配置为静态IP,避免Azure自动回收,同时确认该IP不在Pod分配范围内。
内容的提问来源于stack exchange,提问作者asitha weerasinghe
相关产品推荐
相关产品推荐

