You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 集群1的service_cidr配置为10.0.65.0/19,同样不符合/19的网络地址规则,对应合法块起始是10.0.64.0/19
  2. 两个集群的docker_bridge_cidr都配置为172.17.0.1/16,/16块的网络地址是172.17.0.0,你写的.1是块内主机IP,不符合CIDR格式要求
  3. 集群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子网段完全重合,也会导致路由不通。
修复方案
  1. 所有CIDR配置必须严格使用对应掩码的网络地址,快速校验方法:将IP转为32位二进制,和掩码做与运算,结果和配置的IP一致才是合法网络地址。

  2. 重新做地址规划,确保所有子网段无重叠、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段错开,修正为网络地址,合法
      
  3. 如果两个集群部署在完全独立、不需要打通的VNet中,可以不用跨集群错开地址段,但每个集群内部仍需满足CIDR格式合法、子网无重叠、Service/Docker CIDR不与VNet重叠的要求。

内容的提问来源于stack exchange,提问作者IFThenElse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:01:09