设计 VPC:子网内的子网

设计 VPC:子网内的子网

这个问题与这个。看来 OP 没有得到满意的答复 — 因为他没有接受他收到的唯一答复。我们基本上遵循了 AWS Startup Collection 博客上发布的说明:实用 VPC 设计:来自 AWS 解决方案架构师的 301 级指导。但是,那篇文章发表于 2014 年 7 月,所以我不太确定它是否已经过时,或者只是我误解了说明。

我尝试附加代码,但是这使我无法发布我的问题——我假设 StackOverflow 的机器学习算法在这里起作用,因为我的代码与该问题中的代码非常相似,并且我认为我的问题被标记为已经有答案的问题。

那么我该怎么做呢?另一个问题的答案是最佳实践吗?

更新:

“虽然作者列出的 CIDR 细分方式可能让人觉得子网内还有子网,但文章并未提及如何以这种方式创建子网。”

然后如何作者是这么做的吗?

“您不能在 AWS VPC 子网内创建 AWS VPC 子网。”

如果此方法未在 AWS VPC 子网内创建 AWS VPC 子网,则什么是吗?

正如我提到的,那篇文章已经有 2 年了,而我前几天才开始使用 VPC。这种方法当时有效,但现在无效,或者它在 AWS VPC 上根本不有效?

答案1

这种方法当时有效,但现在无效,或者它在 AWS VPC 上根本不有效?

是的,在写下的时候它是有效的,并且现在它仍然有效。

所引用的问题实际上没有足够的信息来确定犯了什么错误,但作者几乎肯定犯了错误,因为原则上所尝试的是正确的。

如果“子网”指的是可以用 CIDR 表示法描述的连续 IP 地址空间块,那么当然所有子网都“位于”其他子网内。这就是我们称它们为“子”网的原因。

但是当我们说 VPC 没有子网内的子网时,我们谈论的是 VPC 有一个简单的路由实现,其中没有概念(或需要或能力)配置除最终子网之外的任何子网,其中部署了具有网络接口的系统。

Level 1 192.168.0.0/16 ... VPC supernet
 Level 2 192.168.128.0/18  Third AZ in region
  Level 3 192.168.130.0/23 Web servers

在此示例中,级别 2 的子网是逻辑/信息/组织子网,但实际上从未在 VPC 中的任何地方声明或配置。中间级别数可能任意,但这些仅用于规划目的。VPC 不知道您可能正在使用的任何子网层次结构,因为它不需要知道。

VPC 本身配置了 1 级 CIDR 块和单个“子网”——这次,我使用该术语来表示VPC 子网-- 显示在第 3 级 -- 被声明为 VPC 中的子网。

此 VPC 子网现在具有子网 ID 和标签,并且存在于单个 AWS 区域的 VPC 中,我可以在该子网上部署 EC2 实例、RDS 实例等。

一旦我将这 512 个地址(192.168.130.0/23)分配给 VPC 子网,这就是它们在该 VPC 中唯一可以使用的地方。

然后,我无法在我的 VPC 中创建子网(例如 192.168.130.128/25),因为它与已分配的 192.168.130.0/23 冲突。

它与 192.168.128.0/18 不冲突,因为我实际上没有在 VPC 中配置该子网。该级别的“子网”(CIDR 块)——上例中的级别 2——本质上仅用于我的规划和组织目的,是我意图的记录,但 VPC 对此一无所知。

事实上,即使我“计划”在第三个可用区中使用该块,但如果我稍后需要在 VPC 内完全不同的可用区中使用 192.168.132.0/22,也不会有任何技术限制或性能影响。从组织上看,这很草率,但从功能上看不是问题。VPC 不知道 192.168.128.0/18“在”我的第三个可用区中,因为从任何实际意义上讲,它实际上并不在第三个可用区中 —— 没有声明或提供此类信息。

您可以轻松地将 192.168.0.0/16 划分为 256 /24 个块¹,并将它们分配给子网和用途,每个子网的可用性区域由随机数生成器选择。但是,不要这样做。不是因为从吞吐量的角度来看它不会同样有效......而是因为它在组织上很混乱,而且 256 个地址可能比您希望分配给每个子网的地址要少。

最后一部分看起来很奇怪,因为 256 个地址似乎很多,但您遇到的问题是当您配置需要接口和地址的服务时 - 我特别考虑可扩展的东西,如 EC2 自动扩展、ECS、竞价实例、Aurora、Lambda 和弹性负载均衡器 (ELB) - 配置过程涉及指定这些服务将存在于哪些子网上。

对于 ELB,对于配置了 ELB 的每个子网,每个子网、每个 ELB 至少需要 2 个可用地址,以便 ELB 节点可以在需要时自行替换(ELB 可以透明地启动第二个节点,使其生效,然后出于任何原因(例如 AWS 指导的维护)退出第一个节点)。当然,您还需要其他可用地址,以便 ELB 通过添加节点来扩展自身。(我见过它们高达 8 个,但不知道 ELB 可以生成的节点数量是否有任何实际限制,以处理增加的流量。)


¹好吧,严格来说不是,因为有一个默认限制为 200 个子网在单个 VPC 中,无论块大小如何。AWS Support 可以根据请求增加此限制,但具有超过 200 个子网的 VPC 可能在设计中存在缺陷。

答案2

我相信我明白了混乱之处。文章暗示特定子网对象为每个层创建。

10.0.0.0/18
   10.0.32.0/19
       10.0.32.0/20 - public
       10.0.48.0/20
           10.0.48.0/21 - protected
           10.0.56.0/21 - spare

您没有创建子网对象对于图表中的每个项目,您只为叶节点创建它们。在上面,这些是创建的真正子网:

  • 10.0.32.0/20 – 公开
  • 10.0.48.0/21 - 受保护
  • 10.0.56.0/21 - 备用

就是这样。其他所有内容可能都在某个子网规划电子表格中,而不是直接在 AWS 中表示。本文的其余部分详细介绍了为什么您不需要费心在 AWS 中表示整个地址层次结构。您只需在将要运行的最终子网上创建子网。

相关内容