如何通过 Terraform 或 Amazon VPC UI 为大小不是 2 的幂的子网定义 VPC CIDR 块?
How, via Terraform or Amazon VPC UI does one define VPC CIDR block for subnet of size not a power of 2?
我的总体目标是创建一个包含 1 public 个子网 + 3 个私有子网的 VPC,每个子网有 4 个可用 IP。
之前的 Whosebug 回答告诉我,对于我希望创建的 4 个可用 IP 子网中的每一个,我需要一个跨越 9 个 ips 的地址范围:
一切都很好。所以我们需要创建 4 个子网,每个子网有 9 个 IP 地址。
在 AWS VPS 定义中,如何表达 9 Ips 的 CIDR 范围?在CIDR中,很多网站解释,9个IP的范围用2个数字表示,例如:
10.0.0.0/29
10.0.0.8/32
但是当我尝试输入这 2 个数字时,VPC 控制台给出了一条错误消息:
必须是有效的 CIDR 块。
如果您的 VPC 的地址范围超出 RFC 1918 指定的私有 IP 地址范围,Amazon DNS 服务器无法解析私有 DNS 主机名。
我可以只分配 64 个 IP 范围,并保留一些未使用的 IP。但这不是一个节俭的解决方案。
AWS VPC CIDR 不可变! x 3
除非您已经有可以快速部署到 VPC 的持续集成 deployment/configuration,否则最好保留 space 用于扩展。目前,VPC 的限制范围为 CIDR/16 到 CIDR/28。您不能使用 /29,实际上,有 5 个 IP 保留:IP 子网使用 = 2,AWS 保留 = 3。查看:VPC subnets
10.0.0.0: Network address.
10.0.0.1: Reserved by AWS for the VPC router.
10.0.0.2: Reserved by AWS for mapping to the Amazon-provided DNS.
10.0.0.3: Reserved by AWS for future use.
10.0.0.255: Network broadcast address. We do not support broadcast in a VPC, therefore we reserve this address.
对于私有子网,"waste" 没有任何意义,AWS 不会通过分配 "too broad range" 向您收费,但如果您创建小子网(例如 CIDR/28)和计划扩展,例如启动多个 SPOT 实例,创建多个可用区等。然后你会后悔分配微小的子网和 运行 陷入严重的路由问题,最糟糕的是,没有扩展空间,需要拆除整个 VPC。
所以我会建议您使用这个简单的设置,这样您就不会后悔说您不能启动多个 SPOT 实例。
VPC CIDR : 10.0.0.0/18
subnet 1 : 10.0.1.0/26
subnet 2 : 10.0.1.64/26
subnet 3 : 10.0.1.128/26
subnet 4 : 10.0.1.192/26
# if you need AZ
AZ subnet-1 : 10.0.2.0/26
AZ Subnet-2 : 10.0.2.64/26 .....
如果您打算稍后创建从您的 Intranet 到 AWS VPC 的 VPN,那么您必须提前计划并确保您的 VPC CIDR 和子网不会与您的 Intranet CIDR IP 范围冲突。
不过,你可以做到这一点。
VPC CIDR 10.0.0.0/27
Subnet 1 : 10.0.0.0/28
Subnet 2 : 10.0.0.16/28
Subnet 3 : 10.0.0.32/28
Subnet 4 : 10.0.0.48/28
注意:如果您计划使用 RDS,以上设置会为不同子网中的多个可用区提供一些备用 space。然而,它可能会非常混乱
我的总体目标是创建一个包含 1 public 个子网 + 3 个私有子网的 VPC,每个子网有 4 个可用 IP。
之前的 Whosebug 回答告诉我,对于我希望创建的 4 个可用 IP 子网中的每一个,我需要一个跨越 9 个 ips 的地址范围:
一切都很好。所以我们需要创建 4 个子网,每个子网有 9 个 IP 地址。
在 AWS VPS 定义中,如何表达 9 Ips 的 CIDR 范围?在CIDR中,很多网站解释,9个IP的范围用2个数字表示,例如:
10.0.0.0/29
10.0.0.8/32
但是当我尝试输入这 2 个数字时,VPC 控制台给出了一条错误消息:
必须是有效的 CIDR 块。 如果您的 VPC 的地址范围超出 RFC 1918 指定的私有 IP 地址范围,Amazon DNS 服务器无法解析私有 DNS 主机名。
我可以只分配 64 个 IP 范围,并保留一些未使用的 IP。但这不是一个节俭的解决方案。
AWS VPC CIDR 不可变! x 3
除非您已经有可以快速部署到 VPC 的持续集成 deployment/configuration,否则最好保留 space 用于扩展。目前,VPC 的限制范围为 CIDR/16 到 CIDR/28。您不能使用 /29,实际上,有 5 个 IP 保留:IP 子网使用 = 2,AWS 保留 = 3。查看:VPC subnets
10.0.0.0: Network address.
10.0.0.1: Reserved by AWS for the VPC router.
10.0.0.2: Reserved by AWS for mapping to the Amazon-provided DNS.
10.0.0.3: Reserved by AWS for future use.
10.0.0.255: Network broadcast address. We do not support broadcast in a VPC, therefore we reserve this address.
对于私有子网,"waste" 没有任何意义,AWS 不会通过分配 "too broad range" 向您收费,但如果您创建小子网(例如 CIDR/28)和计划扩展,例如启动多个 SPOT 实例,创建多个可用区等。然后你会后悔分配微小的子网和 运行 陷入严重的路由问题,最糟糕的是,没有扩展空间,需要拆除整个 VPC。
所以我会建议您使用这个简单的设置,这样您就不会后悔说您不能启动多个 SPOT 实例。
VPC CIDR : 10.0.0.0/18
subnet 1 : 10.0.1.0/26
subnet 2 : 10.0.1.64/26
subnet 3 : 10.0.1.128/26
subnet 4 : 10.0.1.192/26
# if you need AZ
AZ subnet-1 : 10.0.2.0/26
AZ Subnet-2 : 10.0.2.64/26 .....
如果您打算稍后创建从您的 Intranet 到 AWS VPC 的 VPN,那么您必须提前计划并确保您的 VPC CIDR 和子网不会与您的 Intranet CIDR IP 范围冲突。
不过,你可以做到这一点。
VPC CIDR 10.0.0.0/27
Subnet 1 : 10.0.0.0/28
Subnet 2 : 10.0.0.16/28
Subnet 3 : 10.0.0.32/28
Subnet 4 : 10.0.0.48/28
注意:如果您计划使用 RDS,以上设置会为不同子网中的多个可用区提供一些备用 space。然而,它可能会非常混乱