为新的可用区级组织预配置 CIDR

在 Google Distributed Cloud (GDC) 气隙环境中,您可以创建跨多个地区的 v1 或 v2 组织。不过,在创建组织之前,有以下两种组织创建情形需要进行额外的 CIDR 配置:

以下部分介绍了这些情形以及在创建组织之前必须完成的前提条件。

在新可用区中为 v1 组织配置 CIDR 设置

您无法在新的可用区中预配 v1 组织,因为 v1 组织所需的许多 CIDR 声明已分配给根组织。

您还必须为 v1 组织使用现有的自定义 IP 地址功能。

方案 CIDR 设置

收集您在区域中配置的现有 CIDR 设置,以便在新版组织中避免 CIDR 重叠。

  1. 打印现有的 zone-infra-cidr CIDRClaim 资源:

    kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get cidrclaim \
        -n gpc-system zone-infra-cidr
    
  2. 检查输出中 CIDRClaim 资源的 status.ipv4AllocationStatus.cidrBlocksstatus.ipv6AllocationStatus.cidrBlocks 字段。

    例如,以下 CIDRClaim 资源已预留 192.0.2.0/21198.51.100.0/26203.0.113.0/232001:db8::/66 CIDR 块:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: CIDRClaim
    metadata:
      name: zone-infra-cidr
      namespace: gpc-system
    spec:
      ipv4Spec:
        staticCidrBlocks:
        - 192.0.2.0/21
        - 198.51.100.0/26
        - 203.0.113.0/23
      ipv6Spec:
        staticCidrBlocks:
        - 2001:db8::/66
    status:
      ipv4AllocationStatus:
        cidrBlocks:
        - 192.0.2.0/21
        - 198.51.100.0/26
        - 203.0.113.0/23
      ipv6AllocationStatus:
        cidrBlocks:
        - 2001:db8::/66
    

    请记下这些 CIDR 块,以便在为组织创建自定义外部 CIDR 和自定义内部 CIDR 时避免使用它们。

  3. 检查每个可用区的 zone-infra-cidr,并记下未使用的现有 CIDR 块,以便在为组织创建自定义 CIDR 时避免使用这些 CIDR 块。如需切换地区级上下文,请使用 gdcloud CLI。

  4. 输出所有带有 network-root-range 标签的现有子网:

    kubectl --kubeconfig=GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet \
        -l ipam.gdc.goog/usage=network-root-range -A
    
  5. 检查每个 Subnet 资源的 status.ipv4Allocation.cidrstatus.ipv6Allocation.cidr 字段。

    例如,以下 infra-vpc-root-cidr 已预留 192.0.2.0/15 CIDR:

    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/usage: network-root-range
        ipam.gdc.goog/vpc: infra-vpc
      name: infra-vpc-root-cidr
      namespace: org-1
    spec:
      ipv4Request:
        cidr: 192.0.2.0/15
      propagationStrategy: None
      type: Root
    status:
        ipv4Allocation:
        cidr: 192.0.2.0/15
    

    请记下这些 CIDR,以便在为组织创建自定义外部 CIDR 和自定义内部 CIDR 时避免使用它们。

配置自定义 IP 地址

在 v1 组织引导启动过程中,需要将自定义外部 CIDR 和自定义内部 CIDR 作为全局 OrganizationZonalConfig 自定义资源的输入,以支持全局 v1 组织引导启动。

OrganizationZonalConfig 资源规范中,您必须添加外部 CIDR 和内部 CIDR 的自定义 IP 地址配置。对于区域组织,自定义外部 CIDR 和自定义内部 CIDR 分别实例化为 org-namespace/org-custom-external-cidrorg-namespace/org-custom-internal-cidr CIDR 声明。相应组织的所有其他 CIDR 声明和子网声明都是以下两个 CIDR 声明的子项:

...

spec:
  capacities:
    customIPConfig:
      externalCIDRs:
      - CUSTOM_EXTERNAL_CIDR
      internalCIDRs:
      - CUSTOM_INTERNAL_CIDR

...

自定义外部 CIDR 和自定义内部 CIDR 必须满足以下条件:

  • 在每个地区的 OrganizationZonalConfig 资源中都是唯一的。
  • 在所有可用区中,对于每个现有的 v1 组织,该值在 OrganizationZonalConfig 资源中都是唯一的。
  • 不得与每个可用区的 zone-infra-cidr 重叠。
  • 不得与任何带有 ipam.gdc.goog/usage=network-root-range 标签的全局子网重叠。

满足这些要求后,您可以继续执行默认组织引导步骤,以在新的可用区中引导 v1 组织。

为现有可用区中的 v2 组织配置 CIDR 设置

如需在现有区域中预配 v2 组织,您必须手动创建 CIDRClaim 资源 gpc-system/zone-infra-cidr。您还必须确保新 CIDR 声明中的 CIDR 块不与以下项重叠:

  • 相应可用区中的 gpc-system/instance- CIDR 声明。

  • 宇宙中其他可用区内的任何 gpc-system/zone-infra-cidrgpc-system/instance- CIDR 声明。

方案 CIDR 设置

  1. 打印现有 CIDRClaim 资源:

    kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system
    
  2. 检查输出中每个 CIDRClaim 资源的 status.ipv4AllocationStatus.cidrBlocksstatus.ipv6AllocationStatus.cidrBlocks 字段。

    例如,以下 CIDRClaim 资源已预留 192.0.2.0/21198.51.100.0/26203.0.113.0/232001:db8::/66 CIDR 块:

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: CIDRClaim
    metadata:
      name: instance-external-cidr
      namespace: gpc-system
    spec:
      ipv4Spec:
        staticCidrBlocks:
        - 192.0.2.0/21
        - 198.51.100.0/26
        - 203.0.113.0/23
      ipv6Spec:
        staticCidrBlocks:
        - 2001:db8::/66
    status:
      ipv4AllocationStatus:
        cidrBlocks:
        - 192.0.2.0/21
        - 198.51.100.0/26
        - 203.0.113.0/23
      ipv6AllocationStatus:
        cidrBlocks:
        - 2001:db8::/66
    

    请记下这些 CIDR 块,以便在为 v2 组织创建 zone-infra-cidr 时避免使用它们。

创建 zone-infra-cidr CIDR 声明

  1. 在您的 Universe 的每个地区中,找到并记下具有命名空间 gpc-system 的以下 CIDR 声明:

    • instance-external-cidr
    • instance-internal-pod-network-cidr
    • instance-internal-cluster-ip-cidr
    • instance-internal-physical-network-cidr
    • instance-internal-cidr
    • zone-infra-cidr

    例如,以下命令会返回当前可用区的 instance-external-cidr CIDR 声明:

    kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system instance-external-cidr
    

    如需切换地区级上下文,请使用 gdcloud CLI。

  2. 创建名为 zone-infra-cidr 且不与之前检查过的 CIDR 声明重叠的 CIDRClaim 资源:

    kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG apply -f - <<EOF
    apiVersion: system.private.gdc.goog/v1alpha1
    kind: CIDRClaim
    metadata:
      name: zone-infra-cidr
      namespace: gpc-system
    spec:
      ipv4Spec:
        staticCidrBlocks:
        - IPV4_CIDR
      ipv6Spec:
        staticCidrBlocks:
        - IPV6_CIDR
    EOF
    

    IPv4 和 IPv6 CIDR 必须是唯一的,并且不得与当前可用区或任何其他现有可用区中 gpc-system 命名空间中的任何现有 instance- CIDR 声明重叠。

  3. 检查 zone-infra-cidr 的状态,确保其已准备就绪:

    kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG \
        get cidrclaim -n gpc-system zone-infra-cidr
    

    CIDR 声明为 Ready 后,您可以继续执行默认组织引导加载程序步骤,以在新区域中引导 v2 组织。