配置多可用区互连

本页面介绍了当新可用区加入多可用区部署时,您必须在多可用区部署的现有可用区中执行的必要配置。此配置可让您与新可用区建立连接。

1. 准备工作

您必须具备以下条件,才能在 Google Distributed Cloud (GDC) 网闸隔离环境中配置多可用区互联:

  • 生成的 kubeconfig 文件和环境变量。如需了解详情,请参阅 IAM-R0004 运行手册。
  • 具有对根管理员集群的临时访问权限的基础架构运维者 (IO)。如需了解详情,请参阅 IAM-R0005 运行手册。

2. 配置多可用区互连

  1. 在多可用区部署的每个可用区中配置 MultiZoneNetworkConfig 资源:

    1. 找到要交互的正确集群。如果根管理员集群正在运行,请使用根管理员集群的 kubeconfig。否则,请使用 kubeconfig 作为引导 Kind 集群。如需了解详情,请参阅 IAM-R0004 运行手册。在此处填充 kubeconfig 路径:

      KUBECONFIG=KUBECONFIG_PATH
      
    2. 创建一个名为 multizone_network_config.yaml 的 YAML 文件。

    3. 将以下内容添加到该文件中:

      apiVersion: system.private.gdc.goog/v1alpha1
      kind: MultiZoneNetworkConfig
      metadata:
        name: multizone-network-config
        namespace: gpc-system
      spec:
        carrierType: CARRIER_TYPE
        zones:
          - zoneID: ZONE_1_ID
            asn: ZONE_1_ASN
            externalSubnets:
              - METERING_SUBNET_1
          - zoneID: ZONE_2_ID
            asn: ZONE_2_ASN
            externalSubnets:
              - METERING_SUBNET_2
        ports:
          - port: PORT_1
          - port: PORT_2
        portSetting:
          mtu: MTU
      

      替换以下内容:

      • CARRIER_TYPE:多可用区骨干网运营商类型。必须为 L2L3

      • ZONE_1_ID:GDC 区域中第一个可用区的 ID。

      • ZONE_1_ASN:GDC 区域中第一个可用区的 BGP 自治系统编号 (ASN)。

      • METERING_SUBNET_1:相应可用区中的按流量计费的子网。此字段必须填充关联区域的根管理员集群中 zone-infra-cidr CIDRClaim 资源的子网。此字段仅用于计量,不会影响对子网通告的控制。您必须使此字段与实际通告的子网保持同步。如果未指定此字段,则不会针对相应地区计量任何流量。

      • ZONE_2_ID:GDC 区域中第二个可用区的 ID。

      • ZONE_2_ASN:GDC 区域中第二个可用区的数据网络的 BGP ASN。

      • METERING_SUBNET_2:相应可用区中的按流量计费的子网。此字段必须填充关联区域的根管理员集群中 zone-infra-cidr CIDRClaim 资源的子网。此字段仅用于计量,不会影响对子网通告的控制。您必须使此字段与实际通告的子网保持同步。如果未指定此字段,则不会针对相应地区计量任何流量。

      • PORT_1:参与多区域互联的第一个端口。如需了解详情,请参阅配置端口

      • PORT_2:参与多可用区互联的第二个端口。如需了解详情,请参阅配置端口

      • MTU:应用于所有端口的 MTU 值。如果未指定,则默认值为 9216。

      如需查看常见部署示例,请参阅多可用区配置示例

    4. multizone_network_config.yaml 文件应用于集群:

      kubectl apply -f multizone_network_config.yaml --kubeconfig=KUBECONFIG_PATH
      
    5. 验证 MultiZonetNetworkConfig 资源的创建是否成功:

      kubectl get multizonenetworkconfig -n gpc-system --kubeconfig=KUBECONFIG_PATH
      

      以下示例显示了包含互连链接的输出:

      NAME                       AGE   READY
      multizone-network-config   26h   True
      
    6. 可选:检查互联 BGP 配置和状态的 MultiZoneNetworkPeeringConfig 资源。

      实际的 BGP 配置由网络协调器设置,并存储在 MultiZoneNetworkPeeringConfig 资源中。每个 MultiZoneNetworkPeeringConfig 资源都表示从一个可用区到另一个可用区的所有 BGP 配置。例如:

      • 名为 zone-1-zone-2-peering-configMultiZoneNetworkPeeringConfig 资源可能如下所示:
      apiVersion: system.private.gdc.goog/v1alpha1
      kind: MultiZoneNetworkPeeringConfig
      metadata:
        name: zone-1-zone-2-peering-config
        namespace: gpc-system
      spec: ...
      status:
        borderLeafSwitches:
        - blswID: 1
          blswName: aa-aa-blsw01
          evpnBGPSessions:
          - bgpSessionConfig:
              addressFamily: EVPN
              bfdConfig:
                bfdMode: MultiHopBFD
              localASN: 65501
              localIP: 192.168.201.65/32
              md5SecretRef:
                name: zone-1-blsw-1-zone-2-blsw-1-evpn-bgp-password
                namespace: gpc-system
              peerASN: 65502
              peerIP: 192.168.202.65
              sourceInterface: loopback2
            bgpSessionStatus:
              prefixCounters:
                received: 4
                sent: 23
              sessionStatus: Up
              uptime: P6DT20H26M59S
          ipv4BGPSessions:
          - bgpSessionConfig:
              addressFamily: IPv4
              bfdConfig:
                bfdMode: PlainBFD
              localASN: 65501
              localIP: 192.168.208.0/31
              md5SecretRef:
                name: zone-1-blsw-1-zone-2-blsw-1-ipv4-bgp-password
                namespace: gpc-system
              peerASN: 65502
              peerIP: 192.168.208.1
            bgpSessionStatus:
              prefixCounters:
                received: 11
                sent: 11
              sessionStatus: Up
              uptime: P6DT20H27M1S
            port:
              port: 6
      

      此示例的状态包含从区域 1 到区域 2 的所有 BGP 会话配置和 BGP 会话状态。

      • 对于 L3 运营商模式,表示从一个可用区到 L3 运营商的所有 IPv4 BGP 会话的 MultiZoneNetworkPeeringConfig 资源(名为 zone-1-ipv4-peering-config)可能如下所示:
      apiVersion: system.private.gdc.goog/v1alpha1
      kind: MultiZoneNetworkPeeringConfig
      metadata:
        name: zone-1-ipv4-peering-config
        namespace: gpc-system
      spec: ...
      status:
        borderLeafSwitches:
        - blswID: 1
          blswName: aa-aa-blsw01
          ipv4BGPSessions:
          - bgpSessionConfig:
              addressFamily: IPv4
              bfdConfig:
                bfdMode: PlainBFD
              localASN: 65501
              localIP: 192.168.208.0/31
              md5SecretRef:
                name: zone-1-blsw-1-port-6-ipv4-bgp-password
                namespace: gpc-system
              peerASN: 65502
              peerIP: 192.168.208.1
            bgpSessionStatus:
              prefixCounters:
                received: 11
                sent: 11
              sessionStatus: Up
              uptime: P6DT20H27M1S
            port:
              port: 6
      

2.1. 配置端口

ports 配置取决于运营商类型。设置 ports 时,请遵循以下规则:

  • 如果运营商类型为 L2,您必须在 Spec.Ports 中指定 n 个端口,其中 n 等于可用区数量乘以 2。第一个端口必须连接到第一个邻近区域(按区域 ID 排序)的第一个边界叶交换机(按交换机名称排序)。第二个端口必须连接到第一个邻近区域的第二个边界叶交换机。第三个端口连接到第二个邻近区域的第一个边界叶交换机。后续连接遵循此模式。如需了解相关说明,请参阅 L2 载波部署

  • 如果运营商类型为 L3,则必须在 Spec.Ports 中指定两个端口。当前可用区中的两个边界叶交换机必须使用第一个端口单独连接到第一个提供商边缘设备,并且必须使用第二个端口单独连接到第二个提供商边缘设备。如需了解详情,请参阅 L3 运营商部署

2.2. 多可用区配置示例

本部分包含常见部署示例。

2.2.1. L2 运营商部署

此部署具有以下配置:

  • 三个可用区,ASN 分别为 65501、65502、65503
  • L2 载波
  • 此部署的逻辑连接如下图所示:

    multizone-pnet-l2-carrier-topology

以下是 MultiZoneNetworkConfig YAML 文件示例:

apiVersion: system.private.gdc.goog/v1alpha1
kind: MultiZoneNetworkConfig
metadata:
  name: multizone-network-config
  namespace: gpc-system
spec:
  carrierType: L2
  zones:
    - zoneID: 1
      asn: 65501
    - zoneID: 2
      asn: 65502
    - zoneID: 3
      asn: 65503
  ports:
    - port: 10
    - port: 11
    - port: 12
    - port: 13

2.2.2. L3 运营商部署

此部署具有以下配置:

  • 三个可用区,ASN 分别为 65501、65502、65503
  • L3 运营商
  • 此部署的逻辑连接如下图所示:

    multizone-pnet-l3-carrier-topology

以下是 MultiZoneNetworkConfig YAML 文件示例:

  apiVersion: system.private.gdc.goog/v1alpha1
  kind: MultiZoneNetworkConfig
  metadata:
    name: multizone-network-config
    namespace: gpc-system
  spec:
    carrierType: L3
    zones:
      - zoneID: 1
        asn: 65501
        carrierASN: 60010
      - zoneID: 2
        asn: 65502
        carrierASN: 60010
      - zoneID: 3
        asn: 65503
        carrierASN: 60010
    ports:
      - port: 10
      - port: 11

2.3. 可选:配置多区域 BFD 身份验证

在所有多区域 IPv4 和 EVPN 会话中配置了双向转发检测 (BFD)。默认情况下,系统会配置单跃点纯 BFD。按照本部分中的说明部署具有身份验证的多跃点 BFD:

  1. 为多区域 EVPN BGP 会话启用双向转发检测 (BFD) 身份验证。如需建立并激活 BFD 会话,请确保两个可用区中的配对 BGP 会话配置了相同的 BFD 身份验证密钥 ID 和密钥字符串:

    1. 定义密钥类型。我们建议在引导加载程序机器上执行此命令。出于安全考虑,请至少使用 SHA-1 作为密钥。如果需要,请为配置使用更安全的密钥:

      export KEY_TYPE=SHA1
      
    2. 设置密钥 ID 和密钥字符串。密钥 ID 在各可用区配对的互连会话中必须是唯一的。确定未使用的密钥 ID 并将其分配给变量:

      export KEY_ID=1
      
    3. 使用 chronyc keygen 生成 SHA-1 身份验证密钥:

      CHRONY_OUTPUT=$(chronyc keygen ${KEY_ID:?} ${KEY_TYPE:?})
      

      输出示例:

      echo $CHRONY_OUTPUT
      1 SHA1 HEX:887F1B88085BD0BDE4458EA7C2C4393C50A498EF
      
    4. 提取身份验证密钥并进行验证:

      export KEY_STR=$(echo ${CHRONY_OUTPUT:?} | awk '{ split($3,key,":"); print key[2]}')
      
      echo $KEY_STR
      887F1B88085BD0BDE4458EA7C2C4393C50A498EF
      
    5. 将 BFD 身份验证信息修补到所选的互连会话:

      kubectl --kubeconfig=KUBECONFIG_PATH patch secret zone-LOCAL_ZONE_ID-blsw-LOCAL_BLSW_ID-zone-REMOTE_ZONE_ID-blsw-REMOTE_BLSWID-bfd-auth-key -n gpc-system -p='{
        "stringData": {
          "bfdKeyID": "'"${KEY_ID}"'",
          "bfdKeyValue": "'"${KEY_STR}"'"
        }
      }'
      
    6. 验证 BFD 会话是否正在运行:

      switch# show bfd neighbors vrf default
      
    7. 验证 State 字段是否显示值 Up,以及 Type 字段是否为 SHMH

      OurAddr         NeighAddr       LD/RD                 RH/RS           Holdown(mult)     State       Int                   Vrf                              Type     BSID
      192.168.208.31  192.168.208.30  1090519041/1090519042 Up              5237(3)           Up          Eth1/11               default                          SH       N/A
      192.168.208.91  192.168.208.90  1090519042/1090519042 Up              5624(3)           Up          Eth1/12               default                          SH       N/A
      192.168.202.66  192.168.201.65  1090519071/1090519060 Up              629(3)            Up          Lo2                   default                          MH       N/A
      192.168.202.66  192.168.201.66  1090519072/1090519061 Up              545(3)            Up          Lo2                   default                          MH       N/A
      

2.4. 可选:配置多区域 BGP 密码

边界网关协议 (BGP) 密码有两种类型:IPv4 BGP 会话密码和 EVPN BGP 会话密码。

默认情况下,所有 BGP 密码均为空。请按照本部分中的说明更新密码。

2.4.1. 更新 IPv4 BGP 密码

如果使用 L2 运营商,请更新应用于当前区域中的一个边界叶交换机与另一个区域中的另一个边界叶交换机之间的 IPv4 BGP 会话的 IPv4 BGP 密码:

kubectl patch secret zone-LOCAL_ZONE_ID-blsw-LOCAL_BLSW_ID-zone-REMOTE_ZONE_ID-blsw-REMOTE_BLSWID-ipv4-bgp-password -p='{"stringData":{"password":"PASSWORD"}}'

替换以下内容:

  • LOCAL_ZONE_ID:当前时区的数字 ID。
  • LOCAL_BLSW_ID:当前可用区边界 Leaf 交换机的数字 ID。此值必须为 12
  • REMOTE_ZONE_ID:远程可用区的数字 ID。
  • REMOTE_BLSW_ID:远程可用区边界叶交换机的数字 ID。此值必须为 12
  • PASSWORD:应用于本地边界叶交换机和远程边界叶交换机之间 IPv4 BGP 会话的 BGP 密码。

如果使用 L3 运营商,请更新应用于当前区域中一个边界叶交换机与 L3 运营商中的提供商边缘设备之间的 IPv4 BGP 会话的 IPv4 BGP 密码:

kubectl patch secret zone-LOCAL_ZONE_ID-blsw-LOCAL_BLSW_ID-port-PORT_ID-ipv4-bgp-password -p='{"stringData":{"password":"PASSWORD"}}' -n gpc-system --kubeconfig=KUBECONFIG_PATH

替换以下内容:

  • LOCAL_ZONE_ID:当前时区的数字 ID。
  • LOCAL_BLSW_ID:当前可用区边界 Leaf 交换机的数字 ID。此值必须为 12
  • PORT_ID:连接到提供商边缘设备的以太网端口的索引。
  • PASSWORD:应用于本地边界 Leaf 交换机与提供商边缘设备之间 IPv4 BGP 会话的 BGP 密码。

2.4.2. 更新 EVPN BGP 密码

如需更新当前可用区中的一个边界 Leaf 交换机与另一个可用区中的另一个边界 Leaf 交换机之间的 EVPN BGP 会话所应用的 EVPN BGP 密码,请运行以下命令:

kubectl patch secret zone-LOCAL_ZONE_ID-blsw-LOCAL_BLSW_ID-zone-REMOTE_ZONE_ID-blsw-REMOTE_BLSWID-evpn-bgp-password -p='{"stringData":{"password":"PASSWORD"}}' -n gpc-system --kubeconfig=KUBECONFIG_PATH

替换以下内容:

  • LOCAL_ZONE_ID:当前时区的数字 ID。
  • LOCAL_BLSW_ID:当前可用区边界 Leaf 交换机的数字 ID。此值必须为 12
  • REMOTE_ZONE_ID:远程可用区的数字 ID。
  • REMOTE_BLSW_ID:远程可用区边界叶交换机的数字 ID。此值必须为 12
  • PASSWORD:应用于本地边界叶交换机和远程边界叶交换机之间的 EVPN BGP 会话的 BGP 密码。

3. 高级配置选项

本部分介绍了多区域网络 API 提供的高级配置选项。

3.1. 配置运营商 BGP 配置替换

默认情况下,边界叶交换机使用默认 IP 地址分配与运营商 PE 设备建立 BGP 对等互连连接。通过检查 MultiZoneNetworkPeeringConfig 资源 zone-<ZONE_ID>-ipv4-peering-config,可以找到正在使用的特定 BGP 对等互连 IP 地址。例如:

   apiVersion: system.private.gdc.goog/v1alpha1
   kind: MultiZoneNetworkPeeringConfig
   metadata:
     name: zone-1-ipv4-peering-config
     namespace: gpc-system
   spec: ...
   status:
     borderLeafSwitches:
     - blswID: 1
       blswName: aa-aa-blsw01
       ipv4BGPSessions:
       - bgpSessionConfig:
           addressFamily: IPv4
           bfdConfig:
             bfdMode: PlainBFD
           localASN: 65501
           localIP: 192.168.208.0/31
           md5SecretRef:
             name: zone-1-blsw-1-port-6-ipv4-bgp-password
             namespace: gpc-system
           peerASN: 65502
           peerIP: 192.168.208.1
   ...

如需使用自定义 IP 地址方案,请按照以下步骤替换默认运营商 BGP 配置:

  1. 运行 kubectl edit MultiZoneNetworkPeeringConfig zone-<ZONE_ID>-ipv4-peering-config -n gpc-system,在 spec.Peerings 下添加 carrierBGPConfigOverride 部分。示例:
apiVersion: system.private.gdc.goog/v1alpha1
kind: MultiZoneNetworkPeeringConfig
metadata:
  name: zone-1-ipv4-peering-config
  namespace: gpc-system
  ...
spec:
  peeringConfigType: L3-IPv4
  peerings:
  - carrierBGPConfigOverride:
      peeringIP:
        localIP: 192.168.78.5/31
        peerIP: 192.168.78.4
    peerA:
      blswID: 1
      port:
        port: 11
      zoneID: 1
    ...

在此示例中,指定 carrierBGPConfigOverride.peeringIP 会将对等互连子网替换为 192.168.78.4/31。

3.2. 配置端口替换

Google 建议所有区域中的所有边界 Leaf 交换机都使用同一组端口。此端口配置适用于需要对端口进行精细控制的场景。

本地地区是指您要部署的地区。

远程地区是指同一多地区世界中的其他地区。

默认情况下,您必须使用同一区域的两个边界 Leaf 交换机上的相同端口来连接到另一个区域或运营商。不过,您可以启用端口替换选项,以指定用于此区域间连接的其他端口。

如需配置端口替换功能,请按以下步骤操作:

  1. 启用 portOverride 功能:

    kubectl patch MultiZoneNetworkConfig multizone-network-config -n gpc-system --type='merge' -p '{"spec":{"enablePortOverride":true}}' --kubeconfig=KUBECONFIG_PATH
    
  2. 确定本地区域边界叶交换机和远程区域边界叶交换机,修改本地边界叶交换机端口:

    kubectl edit MultiZoneNetworkPeeringConfig zone-ZONE_1_ID-zone-ZONE_2_ID -n gpc-system --kubeconfig=KUBECONFIG_PATH
    

    替换以下内容:

    • ZONE_1_ID:本地可用区 ID 和远程可用区 ID 中较小的可用区 ID。例如,如果本地可用区 ID 为 1,远程可用区 ID 为 2,则在此处提供值 1
    • ZONE_2_ID:本地可用区 ID 和远程可用区 ID 中较大的可用区 ID。

    MultiZoneNetworkPeeringConfig 资源可能如下所示:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: MultiZoneNetworkPeeringConfig
    metadata:
      name: zone-2-zone-3-peering-config
      namespace: gpc-system
    spec:
      peeringConfigType: L2
      peerings:
      - peerA:
          blswID: 1
          port:
            port: 12
          zoneID: 2
        peerB:
          blswID: 1
          port:
            port: 12
          zoneID: 3
        secrets:
        - secretRef:
            name: zone-2-blsw-1-zone-3-blsw-1-ipv4-bgp-password
            namespace: gpc-system
          type: ipv4-bgp-password
        - secretRef:
            name: zone-2-blsw-1-zone-3-blsw-1-evpn-bgp-password
            namespace: gpc-system
          type: evpn-bgp-password
        - secretRef:
            name: zone-2-blsw-1-zone-3-blsw-1-bfd-auth-key
            namespace: gpc-system
          type: bfd-auth-key
      - peerA:
          blswID: 1
          port:
            port: 12
          zoneID: 2
        peerB:
          blswID: 2
          port:
            port: 12
          zoneID: 3
        secrets:
        - secretRef:
            name: zone-2-blsw-2-zone-3-blsw-2-ipv4-bgp-password
            namespace: gpc-system
          type: ipv4-bgp-password
        - secretRef:
            name: zone-2-blsw-2-zone-3-blsw-2-evpn-bgp-password
            namespace: gpc-system
          type: evpn-bgp-password
        - secretRef:
            name: zone-2-blsw-2-zone-3-blsw-2-bfd-auth-key
            namespace: gpc-system
          type: bfd-auth-key
    

    您必须更新构成可用区对等互连的其中一个边界叶交换机的端口值。在 Spec.peerings 字段中,查找跨区域对等互连。在此示例中,可用区 2 和可用区 3 之间存在以下对等互连连接:

    peerA:
      blswID: 1
      port:
        port: 12
      zoneID: 2
    peerB:
      blswID: 2
      port:
        port: 12
      zoneID: 3
    

    输出显示两个边界 Leaf 交换机,分别由 blswID: 1blswID: 2 标识。对于由 blswID: 1 标识的第一个边界叶交换机,请将端口更新为 20 的新值:

    peerA:
      blswID: 1
      port:
        port: 20
      zoneID: 2
    peerB:
      blswID: 2
      port:
        port: 12
      zoneID: 3
    

    在此示例中,我们将第一个边界叶交换机的端口值更新为 port: 20