在我之前的工作中,我被告知在创建 VPC 时,我们应始终尝试在其子网内尽可能地填充其 CIDR。因此,一个具有三个公共子网和三个私有子网的 /16 VPC,
我习惯如下设置:
公有子网为 /20(在本例中为 /20 x 3)= 12k 个 IP
私有子网为 /18(在本例中为 /18 x 3)= ~49.5k 个 IP
这将允许分配 61.5k 个 IP。
然而,在我目前的工作中,我们每个人都在 VPC 中使用 /16,在 /20 中使用六个子网,这样就剩下 1/3 的 IP 需要分配。在之前的工作中,VPC 对等是必须的,因为大多数项目都会连接到电子商务平台所在的主 VPC,但在当前工作中并非如此,我们实际上不需要担心 IP 冲突,这就是为什么没有人真正担心的原因,等等。
我的问题是,我们是否应该为此创建 /16 VPC(我真的觉得这个问题的答案应该永远是否定的),我们是否应该留下大块的 IP 未分配,或者我们是否应该尽可能地填充我们的 VPC?
我对此的观点一直是否定的,因为这不是一个最佳做法,但它似乎总是陷入无声的争论,因为相反的做法不会增加成本。
答案1
我并不认为这是最佳实践,但这是我的观点
- 您拥有几乎无限的空间,因此当然可以使用 /16 VPC。只是不要重叠 CIDR 范围。
- 不要试图填满 VPC 内的 IP 空间,留出一些空间以备将来之需
- 根据你的需求调整子网大小,并增加一些空间。请记住,负载均衡器会占用相当多的 IP 空间
子网与安全组
有些人可能会不同意这一点,尤其是老派安全人员,或者可能与我有不同用例的人。我认为分层子网并不总是必要的,除非您需要只有子网才能提供的功能(例如基于子网的路由、防止入侵的服务器、NAT),否则应该使用安全组代替子网。需要公共和私有子网,但我认为“每个应用程序层一个子网”不一定是最好的方法。非面向公众的服务有时可以通过每个可用区一个子网来实现。在某些情况下,子网可以提供“纵深防御”,这可以减轻安全组配置错误的影响。
在 AWS 中,VPC 中的所有子网都可以相互路由,您无法更改这一点,但可以使用 NACL 和安全组来限制通信。但是,例如,您可能需要一组无法访问互联网或本地的资源,反之亦然。您可以使用安全组来实现这一点,但不是每个人都会信任它们。子网在这里很合适。
我倾向于使用 NACL 来隔离环境 - 例如,生产资源不能与测试资源对话 - 通常在不同的帐户中,但传输网关可以实现通信。
当您采用这种方法时,您会拥有少量较大的子网 - 每个 AZ 可能只有一个子网,每个 AZ 可能有两个子网,以安全团队可以接受的方式限制互联网访问。
答案2
使用 IPv6,子集的大小问题就解决了,所有都是 /64。
假设 VPC 获得 /56 2001:db8:9876:5400::/56
。由此来看,可能:
a
AZ 获得2001:db8:9876:540a::/64
b
AZ 获得2001:db8:9876:540b::/64
等等。这些 /64 有数十亿个地址,而您有 256 个。出于任何原因想要子网?另一个 /64。全局唯一,因此不会发生地址冲突。
像往常一样路由和应用安全策略。
您的问题与 v4 地址规划有关,其限制在于最大化利用率和维护唯一寻址。v6 使这种适当规模的规划变得过时。主机数量无关紧要。
当然,必须经过一个可能相当大规模的项目才能启动它。
分配与安全相关的子网只是地址规划的一个约束。但是,当您添加大量子网时,v4 地址规划会变得复杂。v6 中不存在这种复杂性,“公共”与“私有”都是 /64。不过,请参阅 Tim 的回复,了解安全性不仅仅是子网。