如何拆分私有CIDR网段并分配至三个可用区(AZ)
基于Terraform cidrsubnets函数拆分指定CIDR网段方法
核心参数逻辑
cidrsubnets函数传参规则很容易踩坑,记住规则就不会出错:
- 第一个参数传入作为拆分源的母网段,也就是当前场景下的
10.163.64.0/22 - 后续每一个参数对应一个要拆分出的子网,参数值是该子网前缀长度比母网前缀长度多出来的位数,不是子网本身的掩码位
- 需要的/25网段总地址数为128,和母网/22的前缀差值为
25-22=3,因此每个待分配子网对应的传参值为3
可直接复用的代码示例
locals { # 定义基础母网段 base_cidr_block = "10.163.64.0/22" # 拆分3个/25网段,连续传入3个差值3即可 allocated_subnets = cidrsubnets(local.base_cidr_block, 3, 3, 3) } # 如果需要把网段和三个可用区做映射,直接按下标取值即可 locals { az_to_cidr_map = { "可用区1" = local.allocated_subnets[0] "可用区2" = local.allocated_subnets[1] "可用区3" = local.allocated_subnets[2] } }
拆分结果验证
执行terraform plan后会得到三个符合要求的网段:
- 10.163.64.0/25:总地址数128
- 10.163.64.128/25:总地址数128
- 10.163.65.0/25:总地址数128
踩坑提醒:不要直接把25作为参数传给cidrsubnets,否则会因为前缀长度溢出报错,或者得到远小于预期的微网段,这是绝大多数人用这个函数拿不到正确结果的核心原因。
内容的提问来源于stack exchange,提问作者hendry
相关产品推荐
相关产品推荐

