为工作负载网络配置子网

每个 Google Distributed Cloud (GDC) 气隙区域都分配有全局根子网,其中包含 IP 地址管理 (IPAM) 公共 API 子网。全局根子网托管根 IP 地址范围 (CIDR) 池,该池会拆分到每个可用区,以启动租户组织内的所有集群,包括组织基础架构集群和工作负载虚拟机。IP 地址范围的一小部分也作为任播 IP 地址池提供给根子网。

创建组织后,您可以为 GDC 宇宙中的子网完成以下运营任务:

为新可用区创建根范围全局子网

每个可用区都必须有根范围的全局子网。在 GDC 宇宙的初始组织引导阶段,每个可用区都会自动生成全局子网。不过,如果在初始安装后添加了新区域,您必须手动为新区域创建根范围全局子网。

为新可用区网络根范围子网定义 CIDR 范围

定义 CIDR 范围的组织安装指南类似,CIDR 范围不能相互重叠,也不能与 zone-infra-cidr 和现有的根全局子网重叠,这些子网在其自定义资源规范中带有 ipam.gdc.goog/usage: network-root-range 标签。

zone-infra-cidr 存在于每个可用区中,如果客户定义了该值,则可以从客户意见征询问卷 (CIQ) 中检索该值。

  1. 如需检索 zone-infra-cidr,请运行以下命令:

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

    请注意 CIDR 范围。

  2. 您必须拥有一个命名空间,其名称与您将分配给组织的名称一致。确认此命名空间存在:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespace ORG_NAME
    
  3. 检索现有的根全局子网:

    • 对于全局根管理员集群,请运行:

      kubectl –kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet \
          -n ORG_NAME  -l ipam.gdc.goog/usage=network-root-range
      
    • 对于全局组织管理员 API 服务器,请运行:

      kubectl –kubeconfig GLOBAL_ORG_API_SERVER_KUBECONFIG get subnet \
          -n platform -l ipam.gdc.goog/usage=network-root-range
      

      记下输出中的所有 CIDR 范围。

  4. 确认新的计划 CIDR 范围不与任何之前的 CIDR 范围重叠。

确认新 CIDR 范围对新可用区有效后,请确认您的 CIDR 范围符合以下规则:

CIDR 范围字段。 大小下限 VPC/VRF 全局 API 服务器
zoneInfraVPCCIDR 17 基础设施 VPC 全局根
zoneDefaultVPCCIDR 18 默认 VPC 全球组织
zoneOrgAdminExternalCIDR 23 管理网络段 全局根
zoneOrgDataExternalCIDR 23 数据网络段 全局根

在全局根管理员 API 服务器中创建子网

如需在全局根管理员 API 服务器中创建子网,请完成以下步骤:

  1. 列出您的宇宙中的可用区,然后找到新的可用区名称:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -A
    
  2. 为组织的新区域创建区域网络根范围 infra-vpc 子网:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: infra-vpc
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: infra-vpc-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneInfraVPCCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  3. 为组织的新区域创建区域网络根范围数据网络段子网:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: data
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: data-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgDataExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    
  4. 为组织的新可用区创建可用区网络根范围管理员网络分段子网:

    kubectl apply -f --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/network-segment: admin
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: admin-external-NEW_ZONE_NAME-root-cidr
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: zoneOrgAdminExternalCIDR
      zone: NEW_ZONE_NAME
      propagationStrategy: SingleZone
      type: Root
    EOF
    

在全局组织管理员 API 服务器中创建子网

您必须在组织级全局组织管理员 API 服务器运行后,在 platform 命名空间内创建默认 VPC 子网。

创建并应用以下 Subnet 自定义资源:

kubectl apply -f --kubeconfig=GLOBAL_ORG_API_SERVER_KUBECONFIG - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/vpc: default-vpc
    ipam.gdc.goog/usage: zone-network-root-range
  name: default-vpc-NEW_ZONE_NAME-root-cidr
  namespace: platform
spec:
  type: Root
  ipv4Request:
    cidr: zoneDefaultVPCCIDR
  zone: NEW_ZONE_NAME
  propagationStrategy: SingleZone
EOF

放大子网

公共 Subnet 资源不支持自动放大。如需向客户管理的 VPC 或网段添加更多 CIDR 范围,您必须创建新子网并使用特定标签对其进行分组。由于需要访问根管理员集群,客户无法自行扩大子网。

子网分组规则

子网按标签分组为不同的类别:

类别 标签
默认 VPC ipam.gdc.goog/vpc: default-vpc
基础设施 VPC ipam.gdc.goog/vpc: infra-vpc
管理网络段 ipam.gdc.goog/network-segment: admin
数据网络段 ipam.gdc.goog/network-segment: data

在初始引导启动期间,组织接收问卷 (OIQ) 中指定了四个 CIDR 范围。这四个全局子网是在创建客户组织期间在全局 API 服务器中创建的。这些全局子网是组织中每个类别在所有可用区中的根级 CIDR 范围。所有根级全局子网都具有 ipam.gdc.goog/usage: network-root-range 标签。

对于每个可用区,系统都会通过从根级子网中划分出一部分来在全局 API 服务器中创建一个子级全局子网。每个子级全局子网都托管特定可用区中某个类别的 CIDR 范围,并带有 ipam.gdc.goog/usage: zone-network-root-range 标签。可用区的子级全局子网会自动传播到特定可用区。

典型的放大使用场景

为了以最高效的方式为现有子网分配额外的子网以进行扩容,请考虑每种子网类别的推荐用例。在开始放大流程之前,请确定要放大的类别。

默认 VPC

default-vpc 中的子网主要用于为共享服务集群、用户集群和 default-vpc-default-node-subnet 分配 pod 和服务 CIDR,以及为组织分配集群节点 IP 地址和工作负载 IP 地址。

用户集群创建失败是一种常见情况,可能需要扩大子网。

由于无法找到用户集群的 Pod 或服务 CIDR 的父子网,创建用户集群可能会失败。此失败的示例消息类似于以下内容:

could not find parent for subnet platform/user-vm-1-service-cidr

此问题可能是由多种直接与需要扩大子网相关的原因造成的。请考虑执行以下步骤进行确认:

  1. 检查 Cluster 自定义资源的 .spec.clusterNetwork 部分中的 podCIDRSizeserviceCIDRSize 字段:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get cluster \
        -n platform USER_CLUSTER_NAME -oyaml
    

    输出类似于以下内容:

    Example:
    spec:
      clusterNetwork:
        podCIDRSize: 20
        serviceCIDRSize: 20
    
  2. 查找现有子网的父子网:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=zone-network-root-range
    

    输出类似于以下内容:

    Example:
    NAME                     PARENT   READY   IPV4 CIDR        IPV6 CIDR
    default-vpc-zone0-cidr            True    198.51.100.0/18 
    
  3. 查找由父子网分配的所有子网:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n platform  -l \
        ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage!=zone-network-root-range
    

    输出类似于以下内容:

    Example:
    default-vpc-default-node-subnet       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.100.0/23
    g-org-1-shared-service-pod-cidr       {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.16.0/20
    g-org-1-shared-service-service-cidr   {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.2.0/23
    user-vm-1-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.8.0/21
    user-vm-1-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.4.0/23
    user-vm-2-pod-cidr                    {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.32.0/21
    user-vm-2-service-cidr                {"name":"default-vpc-zone0-cidr","namespace":"platform"}   True    198.51.6.0/23
    

在此示例中,一个 /18 父 CIDR 分配了四个 /23 CIDR、一个 /20 CIDR 和两个 /21 CIDR,而新用户集群正在为 podCIDRSize 请求一个 /20 CIDR,为 serviceCIDRSize 请求一个 /20 CIDR,这不足以满足需求。

在这种情况下,您必须为默认 VPC 添加更多类别的子网。

基础设施 VPC

infra-vpc 中的子网主要用于为组织的基础设施集群和外围集群分配组织的 Pod 和服务 CIDR,以及为外围集群分配节点 IP 地址。

由于这属于内部 GDC 基础架构设置,并且每个组织只有一个组织基础架构集群和一个边界集群,因此 infra-vpc 通常不需要进行扩容操作。

管理网络段

管理网络段中的子网主要用于在组织管理员虚拟路由和转发 (VRF) 中分配 IP 地址。组织中创建了默认节点子网或包含网关信息的子网。该默认子网会为组织基础架构集群节点 IP 地址和边缘集群节点 IP 地址分配 IP 地址。

由于管理员网络段属于内部 GDC 基础架构设置,并且每个组织只能有一个组织基础架构集群和一个边界集群,因此通常不需要扩大此子网。

数据网络段

数据网络段中的子网主要用于在组织数据 VRF 中分配 IP 地址。组织中创建了默认节点子网或包含网关信息的子网。该默认子网会为组织基础架构集群节点 IP 地址和边缘集群节点 IP 地址分配 IP 地址。

由于数据网段属于内部 GDC 基础架构设置,并且每个组织只能有一个组织基础架构集群和一个边界集群,因此通常不需要扩大此子网。

为类别添加更多子网

您可以根据子网类型为类别添加更多子网。以下类型的账号可以添加更多子网:

  • 基础设施 VPC
  • 管理网络段
  • 数据网络段
  • 默认 VPC

确定要添加更多子网的子网类型,然后针对该子网类型完成以下步骤:

  1. 在全局根管理员 API 服务器中,获取根子网类型并从 subnet.status.ipv4Allocation.cidr 中检查其 CIDR maskSize 字段:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=network-root-range
    

    替换以下内容:

    • GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理员集群的 kubeconfig 文件的路径。
    • ORG_NAME:组织的名称。
    • SUBNET_TYPE:子网类型,例如 vpc=infra-vpcnetwork-segment=adminnetwork-segment=datavpc=default-vpc

    将此值记为总 CIDR,稍后会引用。

  2. 获取根子网的所有子子网,并检查 subnet.status.ipv4Allocation.cidr 中每个 CIDR 的 maskSize 字段:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage!=network-root-range
    

    请记下每个值,作为已使用的 CIDR,以便稍后引用。

  3. 根据总 CIDR 和已用 CIDR 计算子网的可用 CIDR。如果可用的 CIDR 不足以分配新子网,请添加新的网络根范围全局子网。然后继续执行下一步。

  4. 在全局根管理员 API 服务器中创建新子网:

    kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE_LABEL
        ipam.gdc.goog/usage: zone-network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      zone: ZONE_NAME
      propagationStrategy: SingleZone
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    替换以下内容:

    • GLOBAL_ROOT_ADMIN_KUBECONFIG:根管理员集群的 kubeconfig 文件的路径。
    • SUBNET_TYPE_LABEL:子网类型,必须是以下值之一:vpc: infra-vpcnetwork-segment: adminnetwork-segment: datavpc: default-vpc
    • SUBNET_NAME:新子网的名称。
    • ORG_NAME:组织的名称。
    • CIDR_PREFIX_LENGTH:新子网的前缀长度,例如 20
    • ZONE_NAME:子网的可用区名称,例如 zone1
    • PARENT_SUBNET_NAME:父子网的名称,例如 infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidrdefault-vpc-root-cidr
  5. 通过检查子网的状态 Ready 类型是否为 true,验证子网是否已就绪。

  6. 验证是否已在组织的全局 API 服务器中创建全局子网,并且该子网已准备就绪:

    kubectl --kubeconfig GLOBAL_ORG_ADMIN_KUBECONFIG get subnet -n NAMESPACE -l \
        ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

    NAMESPACE 替换为子网的命名空间。对于 infra-vpc 子网,请使用 infra-network;对于其他子网类型,请使用 platform

  7. 验证区域子网是否已在根管理员集群的组织命名空间中创建,并且是否已准备就绪:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    
  8. 验证区域子网是否已在 platform 命名空间的 Management API 服务器中创建,并且已准备就绪:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet -n NAMESPACE \
        -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range
    

您指定的可用区中组织的子网升级已完成。 您的管理员可以从新子网创建更多子网。

添加新的网络根范围全局子网

带有 ipam.gdc.goog/usage: network-root-range 标签的全局子网托管相应类别的所有地区的 CIDR。如果已用完,您必须在全局 API 服务器中创建新的 network-root-range 子网。您可以根据需要创建多个根全局子网。

如需创建新的 network-root-range 子网,请完成以下步骤:

  1. 为新的网络根范围全局子网创建一个 YAML 文件,例如 subnet-network-root.yaml

    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/SUBNET_TYPE
        ipam.gdc.goog/usage: network-root-range
      annotations:
        ipam.gdc.goog/pivot-destination: global-org
      name: SUBNET_NAME
      namespace: ORG_NAME
    spec:
      ipv4Request:
        cidr: NEW_CIDR
      type: Root
    

    替换以下内容:

    • SUBNET_TYPE:子网类型,必须是以下值之一:vpc: infra-vpcnetwork-segment: adminnetwork-segment: datavpc: default-vpc
    • API_SERVER_ANNOTATION:用于标识此子网必须透传到另一个 API 服务器的注解。对于 infra-vpc 或管理员和数据网工作细分,请使用 ipam.gdc.goog/pivot-destination: global-org。如果您要添加新的 default-vpc 根范围,请勿设置此注解。
    • SUBNET_NAME:新子网的名称。
    • ORG_NAME:组织的名称。
    • NEW_CIDR:子网的新 CIDR。此 CIDR 不得与同一全局根管理员 API 服务器中具有 ipam.gdc.goog/usage: network-root-range 标签的所有现有子网中的任何 CIDR 重叠。