Terraform部署Azure AKS创建子网报CIDR无效错误排查
问题根因
Azure VNet/AKS 对CIDR块的校验规则非常明确:配置的CIDR地址必须是对应掩码长度下的网络地址(即块起始地址),你之前的判断混淆了「某个IP属于一个CIDR范围」和「CIDR块的网络地址写法合规」两个概念,所以才会觉得配置有效但Azure报错。
/19掩码对应的块大小为8192个IP(32-19=13,2^13=8192),对应第三个八位组的步长为8,也就是合法的/19块第三个八位组取值只能是0、8、16、24、32、40、48、56、64……这类8的整数倍数值:
- 你配置的
10.0.1.0/19,对应/19块的真实网络地址是10.0.0.0,覆盖范围10.0.0.0~10.0.31.255,10.0.1.0只是块内的普通主机地址,不是块起始地址 - 你配置的
10.0.33.0/19,对应/19块的真实网络地址是10.0.32.0,覆盖范围10.0.32.0~10.0.63.255,10.0.33.0同样是块内普通地址
这就是Azure返回InvalidCIDRNotation错误的直接原因。
另外你现有配置里还有三个隐藏问题,就算改完上述两个CIDR,后续部署还是会报错:
- 集群1的
service_cidr配置为10.0.65.0/19,同样不符合/19的网络地址规则,对应合法块起始是10.0.64.0/19 - 两个集群的
docker_bridge_cidr都配置为172.17.0.1/16,/16块的网络地址是172.17.0.0,你写的.1是块内主机IP,不符合CIDR格式要求 - 集群2现有配置中子网存在重叠:
10.0.32.0/19覆盖范围是10.0.32.010.0.63.255,和同集群下`10.0.48.0/20`(覆盖10.0.48.010.0.63.255)完全重叠,会触发地址重叠报错;如果两个集群部署在同一个VNet或者需要VNet对等打通,你规划的集群1、集群2子网段完全重合,也会导致路由不通。
修复方案
所有CIDR配置必须严格使用对应掩码的网络地址,快速校验方法:将IP转为32位二进制,和掩码做与运算,结果和配置的IP一致才是合法网络地址。
重新做地址规划,确保所有子网段无重叠、Service CIDR和Docker Bridge CIDR不与VNet子网段重叠,以下是同VNet部署双集群的合规配置参考:
集群2配置修正
- 子网配置:
azurerm_subnet.default-node-pool-subnet:address_prefixes = ["10.0.0.0/19"](覆盖10.0.0.0~10.0.31.255,合法)azurerm_subnet.execution-nodes-subnet:address_prefixes = ["10.0.32.0/20"](原/19改为/20,覆盖10.0.32.0~10.0.47.255,避免和GPU子网重叠,合法)azurerm_subnet.gpu-nodes-subnet:address_prefixes = ["10.0.48.0/20"](覆盖10.0.48.0~10.0.63.255,原配置合法)
- network_profile配置:
network_plugin = "azure" service_cidr = "10.0.64.0/19" # 原配置合法,覆盖10.0.64.0~10.0.95.255,和VNet子网无重叠 dns_service_ip = "10.0.64.10" # 属于Service CIDR段,合法 docker_bridge_cidr = "172.17.0.0/16" # 修正为网络地址,合法
集群1配置修正
- 子网配置(整体偏移到128段,和集群2无重叠):
azurerm_subnet.cluster1-node-pool-subnet:address_prefixes = ["10.0.128.0/19"](覆盖10.0.128.0~10.0.159.255,合法)azurerm_subnet.cluster1-execution-nodes-subnet:address_prefixes = ["10.0.160.0/20"](覆盖10.0.160.0~10.0.175.255,合法)azurerm_subnet.cluster1-gpu-nodes-subnet:address_prefixes = ["10.0.176.0/20"](覆盖10.0.176.0~10.0.191.255,合法)
- network_profile配置:
network_plugin = "azure" service_cidr = "10.0.192.0/19" # 覆盖10.0.192.0~10.0.223.255,合法无重叠 dns_service_ip = "10.0.192.10" # 属于Service CIDR段,合法 docker_bridge_cidr = "172.18.0.0/16" # 和集群2Docker段错开,修正为网络地址,合法
- 子网配置:
如果两个集群部署在完全独立、不需要打通的VNet中,可以不用跨集群错开地址段,但每个集群内部仍需满足CIDR格式合法、子网无重叠、Service/Docker CIDR不与VNet重叠的要求。
内容的提问来源于stack exchange,提问作者IFThenElse
相关产品推荐
相关产品推荐

