15.7. 在具有 Wavelength Zone 子网的现有 VPC 上安装集群


您可以在 Amazon Web Services (AWS) 上将集群安装到现有的 Amazon Virtual Private Cloud (VPC) 中。安装程序会置备所需基础架构的其余部分,您可以进一步自定义这些基础架构。要自定义安装,请在安装集群前修改 install-config.yaml 文件中的参数。

在 AWS 上安装集群到现有的 VPC 中,需要使用 AWS Wavelength 区域将计算节点扩展到 Cloud Infrastructure 的边缘。

您可以使用提供的 CloudFormation 模板来创建网络资源。另外,您可以修改模板来自定义模板,或使用其包含的信息根据公司的策略创建 AWS 资源。

重要

执行安装程序置备的基础架构安装的步骤仅作为示例。在现有 VPC 上安装集群需要了解云供应商和 OpenShift Container Platform 安装过程。您可以使用 CloudFormation 模板来帮助您完成这些步骤,或者帮助您建模您自己的集群安装。您可以决定使用其他方法生成这些资源,而不使用 CloudFormation 模板来创建资源。

15.7.1. 在 AWS 中创建 VPC

您可以在 OpenShift Container Platform 集群的 Amazon Web Services (AWS) 中为所有 Wavelength 区域位置创建一个 Virtual Private Cloud (VPC) 和子网,以将计算节点扩展到边缘位置。您可以进一步自定义 VPC 以满足您的要求,包括 VPN 和路由表。您还可以添加新的 Wavelength 区域子网,不包含在初始部署中。

您可以使用提供的 CloudFormation 模板和自定义参数文件创建代表 VPC 的 AWS 资源堆栈。

注意

如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 已配置了一个 AWS 帐户。
  • 您可以通过运行 aws configure,将 AWS 密钥和 AWS 区域添加到本地 AWS 配置集中。
  • 您可以选择 AWS 帐户上的 AWS Wavelength 区域。

流程

  1. 创建一个 JSON 文件,其包含 CloudFormation 模板需要的参数值:

    [
      {
        "ParameterKey": "VpcCidr", 1
        "ParameterValue": "10.0.0.0/16" 2
      },
      {
        "ParameterKey": "AvailabilityZoneCount", 3
        "ParameterValue": "3" 4
      },
      {
        "ParameterKey": "SubnetBits", 5
        "ParameterValue": "12" 6
      }
    ]
    1
    VPC 的 CIDR 块。
    2
    x.x.x.x/16-24 格式指定 CIDR 块。
    3
    在其中部署 VPC 的可用区的数量。
    4
    指定一个 13 之间的整数。
    5
    各个可用区中每个子网的大小。
    6
    指定 513 之间的整数,其中 5/2713/19
  2. 进入名为 "CloudFormation template for the VPC" 的文档部分,然后从提供的模板中复制语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
  3. 运行以下命令,启动 CloudFormation 模板以创建代表 VPC 的 AWS 资源堆栈:

    重要

    您必须在一行内输入命令。

    $ aws cloudformation create-stack --stack-name <name> \1
         --template-body file://<template>.yaml \2
         --parameters file://<parameters>.json  3
    1
    <name> 是 CloudFormation 堆栈的名称,如 cluster-VPC。如果您删除集群,则需要此堆栈的名称。
    2
    <template> 是您保存的 CloudFormation 模板 YAML 文件的相对路径和名称。
    3
    <parameters> 是相对路径和 CloudFormation 参数 JSON 文件的名称。

    输出示例

    arn:aws:cloudformation:us-east-1:123456789012:stack/cluster-vpc/dbedae40-2fd3-11eb-820e-12a48460849f

  4. 运行以下命令确认模板组件已存在:

    $ aws cloudformation describe-stacks --stack-name <name>

    StackStatus 显示 CREATE_COMPLETE 后,输出会显示以下参数的值。您必须为创建集群运行的其他 CloudFormation 模板提供这些参数值。

    VpcId

    您的 VPC ID。

    PublicSubnetIds

    新公共子网的 ID。

    PrivateSubnetIds

    新专用子网的 ID。

    PublicRouteTableId

    新公共路由表 ID 的 ID。

15.7.2. VPC 的 CloudFormation 模板

您可以使用以下 CloudFormation 模板来部署 OpenShift Container Platform 集群所需的 VPC。

例 15.2. VPC 的 CloudFormation 模板

AWSTemplateFormatVersion: 2010-09-09
Description: Template for Best Practice VPC with 1-3 AZs

Parameters:
  VpcCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.0.0/16
    Description: CIDR block for VPC.
    Type: String
  AvailabilityZoneCount:
    ConstraintDescription: "The number of availability zones. (Min: 1, Max: 3)"
    MinValue: 1
    MaxValue: 3
    Default: 1
    Description: "How many AZs to create VPC subnets for. (Min: 1, Max: 3)"
    Type: Number
  SubnetBits:
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/19-27.
    MinValue: 5
    MaxValue: 13
    Default: 12
    Description: "Size of each subnet to create within the availability zones. (Min: 5 = /27, Max: 13 = /19)"
    Type: Number

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: "Network Configuration"
      Parameters:
      - VpcCidr
      - SubnetBits
    - Label:
        default: "Availability Zones"
      Parameters:
      - AvailabilityZoneCount
    ParameterLabels:
      AvailabilityZoneCount:
        default: "Availability Zone Count"
      VpcCidr:
        default: "VPC CIDR"
      SubnetBits:
        default: "Bits Per Subnet"

Conditions:
  DoAz3: !Equals [3, !Ref AvailabilityZoneCount]
  DoAz2: !Or [!Equals [2, !Ref AvailabilityZoneCount], Condition: DoAz3]

Resources:
  VPC:
    Type: "AWS::EC2::VPC"
    Properties:
      EnableDnsSupport: "true"
      EnableDnsHostnames: "true"
      CidrBlock: !Ref VpcCidr
  PublicSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [0, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 0
      - Fn::GetAZs: !Ref "AWS::Region"
  PublicSubnet2:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [1, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 1
      - Fn::GetAZs: !Ref "AWS::Region"
  PublicSubnet3:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [2, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 2
      - Fn::GetAZs: !Ref "AWS::Region"
  InternetGateway:
    Type: "AWS::EC2::InternetGateway"
  GatewayToInternet:
    Type: "AWS::EC2::VPCGatewayAttachment"
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicRouteTable:
    Type: "AWS::EC2::RouteTable"
    Properties:
      VpcId: !Ref VPC
  PublicRoute:
    Type: "AWS::EC2::Route"
    DependsOn: GatewayToInternet
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
  PublicSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTable
  PublicSubnetRouteTableAssociation2:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz2
    Properties:
      SubnetId: !Ref PublicSubnet2
      RouteTableId: !Ref PublicRouteTable
  PublicSubnetRouteTableAssociation3:
    Condition: DoAz3
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet3
      RouteTableId: !Ref PublicRouteTable
  PrivateSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [3, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 0
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable:
    Type: "AWS::EC2::RouteTable"
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PrivateSubnet
      RouteTableId: !Ref PrivateRouteTable
  NAT:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP
        - AllocationId
      SubnetId: !Ref PublicSubnet
  EIP:
    Type: "AWS::EC2::EIP"
    Properties:
      Domain: vpc
  Route:
    Type: "AWS::EC2::Route"
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT
  PrivateSubnet2:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [4, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 1
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable2:
    Type: "AWS::EC2::RouteTable"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation2:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz2
    Properties:
      SubnetId: !Ref PrivateSubnet2
      RouteTableId: !Ref PrivateRouteTable2
  NAT2:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Condition: DoAz2
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP2
        - AllocationId
      SubnetId: !Ref PublicSubnet2
  EIP2:
    Type: "AWS::EC2::EIP"
    Condition: DoAz2
    Properties:
      Domain: vpc
  Route2:
    Type: "AWS::EC2::Route"
    Condition: DoAz2
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable2
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT2
  PrivateSubnet3:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [5, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 2
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable3:
    Type: "AWS::EC2::RouteTable"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation3:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz3
    Properties:
      SubnetId: !Ref PrivateSubnet3
      RouteTableId: !Ref PrivateRouteTable3
  NAT3:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Condition: DoAz3
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP3
        - AllocationId
      SubnetId: !Ref PublicSubnet3
  EIP3:
    Type: "AWS::EC2::EIP"
    Condition: DoAz3
    Properties:
      Domain: vpc
  Route3:
    Type: "AWS::EC2::Route"
    Condition: DoAz3
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable3
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT3
  S3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Principal: '*'
          Action:
          - '*'
          Resource:
          - '*'
      RouteTableIds:
      - !Ref PublicRouteTable
      - !Ref PrivateRouteTable
      - !If [DoAz2, !Ref PrivateRouteTable2, !Ref "AWS::NoValue"]
      - !If [DoAz3, !Ref PrivateRouteTable3, !Ref "AWS::NoValue"]
      ServiceName: !Join
      - ''
      - - com.amazonaws.
        - !Ref 'AWS::Region'
        - .s3
      VpcId: !Ref VPC

Outputs:
  VpcId:
    Description: ID of the new VPC.
    Value: !Ref VPC
  PublicSubnetIds:
    Description: Subnet IDs of the public subnets.
    Value:
      !Join [
        ",",
        [!Ref PublicSubnet, !If [DoAz2, !Ref PublicSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PublicSubnet3, !Ref "AWS::NoValue"]]
      ]
  PrivateSubnetIds:
    Description: Subnet IDs of the private subnets.
    Value:
      !Join [
        ",",
        [!Ref PrivateSubnet, !If [DoAz2, !Ref PrivateSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PrivateSubnet3, !Ref "AWS::NoValue"]]
      ]
  PublicRouteTableId:
    Description: Public Route table ID
    Value: !Ref PublicRouteTable
  PrivateRouteTableIds:
    Description: Private Route table IDs
    Value:
      !Join [
        ",",
        [
          !Join ["=", [
            !Select [0, "Fn::GetAZs": !Ref "AWS::Region"],
            !Ref PrivateRouteTable
          ]],
          !If [DoAz2,
               !Join ["=", [!Select [1, "Fn::GetAZs": !Ref "AWS::Region"], !Ref PrivateRouteTable2]],
               !Ref "AWS::NoValue"
          ],
          !If [DoAz3,
               !Join ["=", [!Select [2, "Fn::GetAZs": !Ref "AWS::Region"], !Ref PrivateRouteTable3]],
               !Ref "AWS::NoValue"
          ]
        ]
      ]

15.7.3. 创建 VPC 载体网关

要在 Wavelength 区域上运行的 OpenShift Container Platform 集群中使用公共子网,您必须创建载体网关,并将载体网关关联到 VPC。子网可用于部署负载均衡器或边缘计算节点。

要在 OpenShift Container Platform 集群的 Wavelength 区域位置创建边缘节点或面向互联网的负载均衡器,您必须创建以下所需的网络组件:

  • 与现有 VPC 关联的载体网关。
  • 列出路由条目的载波路由表。
  • 与载体路由表关联的子网。

对于仅包含 Wavelength 区中的子网的 VPC 存在载体网关。

以下列表解释了 AWS Wavelength 区域位置上下文中的载体网关的功能:

  • 提供 Wavelength Zone 和 carrier 网络之间的连接,其中包括来自载体网络的任何可用设备。
  • 执行网络地址转换(NAT)功能,如将作为网络边框组的公共 IP 地址(从 Wavelength 区域转换为载体 IP 地址)的 IP 地址转换。这些转换功能适用于入站和出站流量。
  • 授权来自位于特定位置的载体网络的入站流量。
  • 授权到载波网络和互联网的出站流量。
注意

互联网没有入站连接配置,通过载体网关到 Wavelength 区域。

您可以使用提供的 CloudFormation 模板来创建以下 AWS 资源堆栈:

  • 一个载体网关,与模板中的 VPC ID 关联。
  • 一个用于 Wavelength Zone 的公共路由表,名为 <ClusterName>-public-carrier
  • 以载体网关为目标的新路由表中的默认 IPv4 路由条目。
  • AWS Simple Storage Service (S3) 的 VPC 网关端点。
注意

如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 已配置了一个 AWS 帐户。
  • 您可以通过运行 aws configure,将 AWS 密钥和区域添加到本地 AWS 配置集中。

流程

  1. 进入名为"CloudFormation template for the VPC Carrier Gateway"的文档的下一部分,然后复制 VPC Carrier Gateway 模板的 CloudFormation 模板的语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
  2. 运行以下命令来部署 CloudFormation 模板,它会创建一个代表 VPC 的 AWS 资源堆栈:

    $ aws cloudformation create-stack --stack-name <stack_name> \1
      --region ${CLUSTER_REGION} \
      --template-body file://<template>.yaml \2
      --parameters \//
        ParameterKey=VpcId,ParameterValue="${VpcId}" \3
        ParameterKey=ClusterName,ParameterValue="${ClusterName}" 4
    1
    <stack_name> 是 CloudFormation 堆栈的名称,如 clusterName-vpc-carrier-gw。如果您删除集群,则需要此堆栈的名称。
    2
    <template> 是相对路径,以及保存的 CloudFormation 模板 YAML 文件的名称。
    3
    <VpcId> 是从名为"Creating a VPC in AWS"部分创建的 CloudFormation 堆栈输出中提取的 VPC ID。
    4
    <clusterName> 是一个自定义值,前缀为 CloudFormation 堆栈创建的资源的前缀。您可以使用 install-config.yaml 配置文件的 metadata.name 部分中定义的相同名称。

    输出示例

    arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-2fd3-11eb-820e-12a48460849f

验证

  • 运行以下命令确认 CloudFormation 模板组件已存在:

    $ aws cloudformation describe-stacks --stack-name <stack_name>

    StackStatus 显示 CREATE_COMPLETE 后,输出显示以下参数的值:确保为集群运行的其他 CloudFormation 模板提供参数值。

    PublicRouteTableId

    Carrier 基础架构中路由表 ID。

其他资源

15.7.4. VPC Carrier Gateway 的 CloudFormation 模板

您可以使用以下 CloudFormation 模板,在 AWS Wavelength 基础架构上部署 Carrier Gateway。

例 15.3. VPC Carrier Gateway 的 CloudFormation 模板

AWSTemplateFormatVersion: 2010-09-09
Description: Template for Creating Wavelength Zone Gateway (Carrier Gateway).

Parameters:
  VpcId:
    Description: VPC ID to associate the Carrier Gateway.
    Type: String
    AllowedPattern: ^(?:(?:vpc)(?:-[a-zA-Z0-9]+)?\b|(?:[0-9]{1,3}\.){3}[0-9]{1,3})$
    ConstraintDescription: VPC ID must be with valid name, starting with vpc-.*.
  ClusterName:
    Description: Cluster Name or Prefix name to prepend the tag Name for each subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: ClusterName parameter must be specified.

Resources:
  CarrierGateway:
    Type: "AWS::EC2::CarrierGateway"
    Properties:
      VpcId: !Ref VpcId
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "cagw"]]

  PublicRouteTable:
    Type: "AWS::EC2::RouteTable"
    Properties:
      VpcId: !Ref VpcId
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "public-carrier"]]

  PublicRoute:
    Type: "AWS::EC2::Route"
    DependsOn: CarrierGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      CarrierGatewayId: !Ref CarrierGateway

  S3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Principal: '*'
          Action:
          - '*'
          Resource:
          - '*'
      RouteTableIds:
      - !Ref PublicRouteTable
      ServiceName: !Join
      - ''
      - - com.amazonaws.
        - !Ref 'AWS::Region'
        - .s3
      VpcId: !Ref VpcId

Outputs:
  PublicRouteTableId:
    Description: Public Route table ID
    Value: !Ref PublicRouteTable

15.7.5. 在 Wavelength 区域中创建子网

在 OpenShift Container Platform 集群中为边缘计算节点配置机器集前,您必须在 Wavelength Zones 中创建子网。对您要将计算节点部署到的每个 Wavelength 区完成以下步骤。

您可以使用提供的 CloudFormation 模板并创建 CloudFormation 堆栈。然后,您可以使用此堆栈自定义置备子网。

注意

如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。

先决条件

  • 已配置了一个 AWS 帐户。
  • 您可以通过运行 aws configure,将 AWS 密钥和区域添加到本地 AWS 配置集中。
  • 您可以选择 Wavelength Zones 组。

流程

  1. 进入名为"CloudFormation template for the VPC 子网"的文档部分,并从模板中复制语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
  2. 运行以下命令来部署 CloudFormation 模板,它会创建一个代表 VPC 的 AWS 资源堆栈:

    $ aws cloudformation create-stack --stack-name <stack_name> \ 1
      --region ${CLUSTER_REGION} \
      --template-body file://<template>.yaml \ 2
      --parameters \
        ParameterKey=VpcId,ParameterValue="${VPC_ID}" \ 3
        ParameterKey=ClusterName,ParameterValue="${CLUSTER_NAME}" \ 4
        ParameterKey=ZoneName,ParameterValue="${ZONE_NAME}" \ 5
        ParameterKey=PublicRouteTableId,ParameterValue="${ROUTE_TABLE_PUB}" \ 6
        ParameterKey=PublicSubnetCidr,ParameterValue="${SUBNET_CIDR_PUB}" \ 7
        ParameterKey=PrivateRouteTableId,ParameterValue="${ROUTE_TABLE_PVT}" \ 8
        ParameterKey=PrivateSubnetCidr,ParameterValue="${SUBNET_CIDR_PVT}" 9
    1
    <stack_name> 是 CloudFormation 堆栈的名称,如 cluster-wl-<wavelength_zone_shortname>。如果您删除集群,则需要此堆栈的名称。
    2
    <template> 是相对路径,以及保存的 CloudFormation 模板 YAML 文件的名称。
    3
    ${VPC_ID} 是 VPC ID,它是 VPC 模板输出中的 VpcID 值。
    4
    ${ZONE_NAME} 是用于创建子网的 Wavelength Zones 名称的值。
    5
    ${CLUSTER_NAME}ClusterName 的值,用作新 AWS 资源名称的前缀。
    6
    ${ROUTE_TABLE_PUB} 是从 VPC 的载体网关 CloudFormation 堆栈的输出中提取的 PublicRouteTableId
    7
    ${SUBNET_CIDR_PUB} 是一个有效的 CIDR 块,用于创建公共子网。这个块必须是 VPC CIDR 块 VpcCidr 的一部分。
    8
    ${ROUTE_TABLE_PVT} 是从 VPC 的 CloudFormation 堆栈的输出中提取的 PrivateRouteTableId
    9
    ${SUBNET_CIDR_PVT} 是一个有效的 CIDR 块,用于创建专用子网。这个块必须是 VPC CIDR 块 VpcCidr 的一部分。

输出示例

arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-820e-11eb-2fd3-12a48460849f

验证

  • 运行以下命令确认模板组件已存在:

    $ aws cloudformation describe-stacks --stack-name <stack_name>

    StackStatus 显示 CREATE_COMPLETE 后,输出会显示以下参数的值。确保将这些参数值提供给您为集群创建的其他 CloudFormation 模板。

    PublicSubnetId

    由 CloudFormation 堆栈创建的公共子网的 ID。

    PrivateSubnetId

    由 CloudFormation 堆栈创建的专用子网的 ID。

15.7.6. VPC 子网的 CloudFormation 模板

您可以使用以下 CloudFormation 模板,在 Wavelength 区域基础架构上部署私有和公共子网。

例 15.4. VPC 子网的 CloudFormation 模板

AWSTemplateFormatVersion: 2010-09-09
Description: Template for Best Practice Subnets (Public and Private)

Parameters:
  VpcId:
    Description: VPC ID that comprises all the target subnets.
    Type: String
    AllowedPattern: ^(?:(?:vpc)(?:-[a-zA-Z0-9]+)?\b|(?:[0-9]{1,3}\.){3}[0-9]{1,3})$
    ConstraintDescription: VPC ID must be with valid name, starting with vpc-.*.
  ClusterName:
    Description: Cluster name or prefix name to prepend the Name tag for each subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: ClusterName parameter must be specified.
  ZoneName:
    Description: Zone Name to create the subnets, such as us-west-2-lax-1a.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: ZoneName parameter must be specified.
  PublicRouteTableId:
    Description: Public Route Table ID to associate the public subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: PublicRouteTableId parameter must be specified.
  PublicSubnetCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.128.0/20
    Description: CIDR block for public subnet.
    Type: String
  PrivateRouteTableId:
    Description: Private Route Table ID to associate the private subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: PrivateRouteTableId parameter must be specified.
  PrivateSubnetCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.128.0/20
    Description: CIDR block for private subnet.
    Type: String


Resources:
  PublicSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VpcId
      CidrBlock: !Ref PublicSubnetCidr
      AvailabilityZone: !Ref ZoneName
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "public", !Ref ZoneName]]

  PublicSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTableId

  PrivateSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VpcId
      CidrBlock: !Ref PrivateSubnetCidr
      AvailabilityZone: !Ref ZoneName
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "private", !Ref ZoneName]]

  PrivateSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PrivateSubnet
      RouteTableId: !Ref PrivateRouteTableId

Outputs:
  PublicSubnetId:
    Description: Subnet ID of the public subnets.
    Value:
      !Join ["", [!Ref PublicSubnet]]

  PrivateSubnetId:
    Description: Subnet ID of the private subnets.
    Value:
      !Join ["", [!Ref PrivateSubnet]]

15.7.7. 修改安装配置文件以使用 AWS Wavelength 区域子网

修改 install-config.yaml 文件,使其包含 Wavelength Zones 子网。

先决条件

  • 您使用"在 Wavelength Zones 中创建子网"流程创建子网。
  • 您使用"创建安装配置文件"流程创建了 install-config.yaml 文件。

流程

  • 通过在 platform.aws.subnets 参数中指定 Wavelength Zones 子网来修改 install-config.yaml 配置文件。

    带有 Wavelength 区域子网的安装配置文件示例

    # ...
    platform:
      aws:
        region: us-west-2
        subnets: 1
        - publicSubnetId-1
        - publicSubnetId-2
        - publicSubnetId-3
        - privateSubnetId-1
        - privateSubnetId-2
        - privateSubnetId-3
        - publicOrPrivateSubnetID-Wavelength-1
    # ...

    1
    区域中创建的子网 ID 列表: Availability 和 Wavelength 区域。

其他资源

后续步骤

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.