亚马逊AWS官方博客

借助 Cloud Foundations 共享网络产品于多个网络账户规划设计并一键部署云上跨区域互联的多张网络

在之前的几篇博客中,我们介绍了 Cloud Foundations 在支持多账户多区域多可用区构建复杂网络构建[1]和网络流量检查配置[2]方面进行的一系列努力和工作,得到了客户的认可和好评。在项目实践中,有客户反馈需要在多个不同网络账户构建多张网络,以更安全的隔离和更细粒度的管理网络资源。为此,Cloud Foundations 近期进一步增强网络建设能力,更好支持此复杂网络构建“五多”需求。

在过往交付项目中,我们发现有些客户的真实网络构建需求比较复杂,现分享一例。某客户希望构建多张共享中转网关(Amazon Transit Gateway)的网络,这些网络之间需要隔离互不联通。根据 Amazon VPC 类型及是否有互联网联通等划分成两个类型的网络,这两张互相隔离的网部署于不同的网络账号,由不同的团队负责网络运维。每张网络都通过自身的中转网关和内部相应的 VPC 建立关联。每张网有不同的检查 VPC 设计,一个是通过 Palo Alto 防火墙进行东西和南北流量的分别检查,另一个是通过防特网(Fortinet)防火墙进行东西南北流量的统一检查。

Cloud Foundations 支持共享网络和共享网关两种模式,以流水线产品形式部署网络资源。其中共享网络通过一阶流水线部署,共享网关通过二阶流水线部署,即两条流水线接继完成部署。对多区域网络而言,一组流水线共同完成多区域的一张网络部署,一条流水线对应一个区域。以上是之前 Cloud Foundations 网络构建能力。要支持多张网络,需要同时支持不同组别的多套流水线,以分别部署不同网络。为此,我们对流水线引入“阶段”属性。

为保持向下兼容,定义名称为空的阶段为默认阶段。故引入阶段之前的流水线等价于默认阶段流水线。在默认阶段部署完成后可以继续构建其他阶段,例如“开发”、“生产”阶段等。网络产品本质上是流水线产品,借助阶段属性,我们就可以构建不同阶段相互独立的多张网络了。在此基础上,在启动流水线产品时可以指定不同的网络账户部署网络,从而达到分账户管理多张网络之目的。

网络架构组织形式

支持多张网络后,自然而然地也支持在不同网络账户部署网络。对于多张网络部署于一个网络账户还是不同网络账户,您可根据业务需求、网络复杂度、管理粒度和安全隔离要求等综合决策。同一张网络内不同中转网关的自治系统号(ASN)必须不同。如您后期考虑进一步联通多张网络,则其中的中转网关自治系统号也必须不同。

可以从至少四个维度构建网络架构组织形式:网络账户(相同,不同)、区域(单区域,多区域)、模式(共享网络,共享网关)、和网络(单张,多张)。所以可以构建至少 24 = 16 种组织形式,满足从简到繁的不同网络架构需求。例如,您可以在生产网络之外,在另一个网络账户构建一张一模一样的网络以供测试使用。在网络变更提交生产环境前,先于测试网络模拟变更,评估影响或检验正确性。如果您的生产网络横跨多个区域,在准备测试网络时可以就目的区域进行单区域部署,即节约时间成本,又更具针对性。

图 1 同时部署生产和测试网络示意图

除了准备测试网络外,更多时候是支持业务对多张生产网络并存的复杂需求。例如某些业务要求共享网络模式,某些应用又要求共享网关模式。支持多张网络极大提高了 Cloud Foundations 网络构建的灵活性及适用场景。

图 2 同时部署共享网络和共享网关模式

以上示例只是众多可能的网络架构组织形式的一小部分,您可在此基础上做进一步拓展和构建。用符号来描述,s 代表阶段,默认阶段为 s’(其名为空),d 代表网络定义,默认定义为 d’(即 network-vpc),pa 代表流水线,a 代表网络账户,w 代表网络,则之前 Cloud Foundations 仅支持一张默认网络 w’ = pa(d(s’)) = pa(d’);现在支持多张网络 W = {w‘, w1, w2, … , wn},其中 wi = pa(d(si)),不同 wi 的网络账户 a 可同可异。

多阶段流水线产品

网络产品本质上是流水线产品,即通过流水线工厂服务目录(Amazon Service Catalog)产品根据网络定义配置文件生成流水线,运行流水线部署网络资源的产品。通过“阶段”来区分不同流水线,其中名为空的为默认阶段。在多阶段流水线部署过程中,必须首先部署默认阶段,才能部署其他阶段。

不同网络有不同的定义,所以在流水线产品中引入“变量”用来指定不同的网络定义。变量内容是 JSON 格式的键值对。其中默认阶段可以留空,此时读取名为 network-vpc 的网络定义。非默认阶段读取 profile 键的值为网络定义配置文件名,例如{"profile": "network-prod"}变量定义的配置文件名为 network-prod。此时您需要在基础账户的 cloud-foundations 应用中新增该配置文件,内容为该阶段的网络定义。

以下是启动流水线工厂服务目录产品时新增的输入框,第一个为阶段(stage),第二个为变量(variables)。对于默认阶段而言,两框都留空。对于非默认阶段,建议配置文件名与阶段名有一定关联,便于运维。例如配置文件名为 network-prod,则阶段名为 prod。

以下我们分别就以共享网络和共享网关模式构建多张网络的详细步骤进行进一步说明。

以共享网络构建多张网络

共享网络联通在网络账户创建和管理中转网关和所有 VPC 等资源,通过 Amazon RAM 共享网络账户 VPC 的子网到成员账户。此模式前提条件之一是各账户在一个原生组织(Amazon Organization)内。共享网络在主区域和管控区域通过不同的流水线产品完成部署。主区域通过 network/vpc,管控区域通过 network/vpc/regional。对于同一张网络来说,所有区域的网络结构是定义在同一个配置文件中的。对于不同网络来说,相同区域的网络结构也是定义在不同配置文件中的。需要注意区分。

图 3 共享网络模式多张多区域网络部署示例

上图展示了两张共享网络架构多区域构建示例。大体步骤是先构建默认阶段,后构建其他阶段,在图中即测试阶段。构建默认阶段步骤如下:

  1. 在基础账户 cloud-foundations 应用中定义默认阶段网络结构并保存到 network-vpc 配置文件中。该配置文件名称是固定的;
  2. 在基础账户中启动流水线工厂服务目录产品,路径为 network/vpc,选择单账户模式,填入网络账户 1,阶段、变量、区域均留空。此时部署于主区域,生成一条流水线;
  3. 批准该流水线执行,部署默认阶段网络资源至主区域;
  4. 再次在基础账户中启动流水线工厂服务目录产品,路径为 network/vpc/regional,选择单账户模式,填入网络账户 1,阶段、变量均留空,区域填入所有拟部署管控区域,一个管控区域生成一条流水线;
  5. 依次批准上述流水线执行,部署默认阶段网络资源至各管控区域;

构建测试阶段步骤如下:

  1. 在基础账户 cloud-foundations 应用中定义其他阶段网络结构并保存到 network-test 配置文件中。该配置文件名称是自定义的,建议命名为 network-阶段名
  2. 在基础账户中启动流水线工厂服务目录产品,路径为 network/vpc,选择单账户模式,填入网络账户 2,阶段为 test,变量为{"profile": "network-test"}、区域留空。此时部署于主区域,生成一条流水线,其名包含阶段名。此处也可以填入网络账户 1,和默认阶段共用一个网络账户;
  3. 批准该流水线执行,部署测试阶段网络资源至主区域;
  4. 再次在基础账户中启动流水线工厂服务目录产品,路径为 network/vpc/regional,选择单账户模式,填入网络账户 2,阶段为 test、变量为{"profile": "network-test"},区域填入所有拟部署管控区域,一个管控区域生成一条流水线,其名包含阶段名。此处填入网络账户必须和第 7 步相同;
  5. 依次批准上述流水线执行,部署测试阶段网络资源至各管控区域。

您可以参考上述步骤构建更多共享网络联通。

以共享网关构建多张网络

共享网关联通在网络账户创建和管理中转网关和功能性 VPC 等资源,通过 Amazon RAM 共享中转网关到成员账户,然后在成员账户直接创建 VPC 并挂载到中转网关。此模式并不要求各账户处于同一原生组织内。和共享网络不同,共享网关对主区域和管控区域采用相同的流水线产品完成部署,即 network/tgw/pipeline。另一个不同之处在共享网关流水线产品是二阶的,即需要执行流水线根据网络定义生成第二条流水线,执行后者才最终部署网络资源。网络定义和共享网络大体相同,同一张网络不同区域定义在同一个配置文件中,主要区别是一个 VPC 只能指定到最多一个成员账户。

图 4 共享网关模式多张多区域网络部署示例

上图展示了两张共享网关架构多区域构建示例。大体步骤也是是先构建默认阶段,后构建其他阶段,在图中即测试阶段。构建默认阶段步骤如下:

  1. 在基础账户 cloud-foundations 应用中定义默认阶段网络结构并保存到 network-vpc 配置文件中。该配置文件名称是固定的;
  2. 在基础账户中启动流水线工厂服务目录产品,路径为 network/tgw/pipeline,选择单账户模式,填入网络账户 1,阶段、变量均留空,区域填入包括主区域在内的所有拟部署区域。此时部署于所有区域,一个区域生成一条流水线;
  3. 依次批准主区域一阶、二阶流水线执行,部署默认阶段网络资源至主区域;
  4. 依次批准其他区域一阶、二阶流水线执行,部署默认阶段网络资源至各管控区域;

构建测试阶段步骤如下:

  1. 在基础账户 cloud-foundations 应用中定义其他阶段网络结构并保存到 network-test 配置文件中。该配置文件名称是自定义的,建议命名为 network-阶段名
  2. 在基础账户中启动流水线工厂服务目录产品,路径为 network/tgw/pipeline,选择单账户模式,填入网络账户 2,阶段为 test,变量为{"profile": "network-test"}、区域填入包括主区域在内的所有拟部署区域。此时部署于所有区域,一个区域生成一条流水线,其名包含阶段名。此处也可以填入网络账户 1,和默认阶段共用一个网络账户;
  3. 依次批准主区域一阶、二阶流水线执行,部署测试阶段网络资源至主区域;
  4. 依次批准其他区域一阶、二阶流水线执行,部署测试阶段网络资源至各管控区域。

您可以参考上述步骤构建更多共享网关联通。

以混合模式构建多张网络

您可以于多区域同时构建共享网络和共享网关两种模式的多张网络。此时建议不在使用默认网络定义配置文件名,而是使用不同的默认配置文件名,以免冲突。由于必须首先部署默认阶段,所以同时部署两种模式时,会部署两张默认阶段的网络,之后才能部署其他阶段的网络。大体步骤如下:

  1. 在基础账户 cloud-foundations 应用中定义各模式各张网络结构并保存到各个配置文件中,例如 network-vpc-main,network-vpc-prod,network-tgw-main,network-tgw-prod 等;
  2. 部署共享网络默认阶段,变量为{"profile": "network-vpc-main"}
  3. 部署共享网络其他阶段,变量为{"profile": "network-vpc-prod"}等;
  4. 部署共享网关默认阶段,变量为{"profile": "network-tgw-main"}
  5. 部署共享网关其他阶段,变量为{"profile": "network-tgw-prod"}等。

您可以参考上述步骤构建更多其他网络。

总结

本文主要介绍了 Cloud Foundations 在多张网络构建方面对复杂网络结构需求的支持所做的一些新工作,并就常见网络共享模式下多张网络构建具体架构和详细步骤进行了讲解和讨论。在此抛砖引玉,期待我们的工作可以更好的助力您,在真实且复杂的网络构建过程中添砖加瓦。我们一如既往的欢迎您的试用反馈以及各种宝贵意见和建议,并致力于提供高质量自动化建设利器。

参考资料

  1. 博客:借助 Cloud Foundations 实现多账户组织云上网络环境两种共享模式的整体规划与一键部署,2023-02
  2. 博客:借助 Cloud Foundations 规划设计云上多区域网络轴辐拓扑结构一键部署东西南北流量分别或合并检查,2023-11

本篇作者

袁文俊

亚马逊云科技专业服务部顾问。曾在亚马逊美国西雅图总部工作多年,就职于 Amazon Relational Database Service (RDS) 关系型数据库服务开发团队。拥有丰富的软件开发及云上运维经验。现负责业务持续性及可扩展性运行、企业应用及数据库上云和迁移、云上灾难恢复管理、云上良好架构框架等架构咨询、方案设计及项目实施工作。

Ryan Yang

亚马逊云科技中国专业服务团队云基础架构师,在加入亚马逊云科技之前,曾致力供职于 SAP 和生态系统合作伙伴,并有 15 年以上的 SAP 大型项目的实施,升级和迁移经验。现任职于亚马逊云科技中国专业服务团队,主要为客户提供云上系统架构设计,SAP 上云迁移等咨询服务。

周闻

亚马逊云科技专业服务团队数据库顾问。专注于企业云上数据库及相关基础设施的架构设计、云上数据库迁移方案设计、最佳实践以及落地实施。

刘育新

亚马逊云科技 ProServe 团队高级顾问,长期从事企业客户入云解决方案的制定和项目的实施工作。