为工作负载配置 IP 地址

本页面介绍了如何在组织的内部虚拟私有云 (VPC) 或默认 VPC 中创建其他子网,以满足内部网络需求。您必须创建 VPC 子网,以确保内部工作负载(例如虚拟机 [VM] 和容器)有足够的 IP 地址来支持组织内的网络需求。

本页面中列出了多项任务,这些任务不必按顺序完成:

在完成本页面中的任务之前,如需大致了解子网及其概念,请参阅子网和 IP 地址

本页面适用于平台管理员群组中的网络管理员和应用运维人员群组中的应用开发者,他们负责管理组织的网络流量。如需了解详情,请参阅 GDC 气隙环境文档的受众群体

准备工作

如需获得创建子网所需的权限,请让您的组织 IAM 管理员向您授予 Subnet Organization Admin (subnet-org-admin) IAM 角色。此角色未绑定到命名空间。

为工作负载创建可用区分支子网

您可以从可用区现有的可用区级根子网创建可用区级内部子网,以进一步细分可用区级默认 VPC 中的 IP 地址。您必须在 platform 命名空间中创建此子网类型。如果父级地区级根子网没有足够的可用 IP 地址,您必须从全局 IP 地址范围分配另一个地区级子网,然后才能继续。

  • 在终端窗口中,在管理 API 服务器中创建新的区域子网:

    kubectl -kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: default-vpc
      name: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      networkSpec:
        enableGateway: true
        enableVLANID: false
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: platform
      type: Branch
    EOF
    

    替换以下内容:

    • MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅可用区级管理 API 服务器资源

    • SUBNET_NAME:新网络子网的名称。

    • CIDR_PREFIX_LENGTH:动态分配的新子网的 CIDR 前缀长度,例如 20。如需静态设置 CIDR,请将 prefixLength 字段替换为 cidr 字段,然后设置 CIDR 地址块,例如 10.0.10.0/27

    • PARENT_SUBNET_NAME:父子网的名称,例如 default-vpc-zone0-cidr。父子网通常是默认 VPC 中的区域根子网。

    如需了解详情,请参阅 Subnet 资源的 API 参考文档。

    您可以继续细分可用区子网,也可以创建叶子子网,以便直接为内部工作负载分配单个 IP 地址

为单个工作负载创建叶子子网

您必须创建叶子子网,才能为工作负载分配单个 IP 地址。 此叶子子网必须具有字段值 type: Leaf,并且必须与您的工作负载资源(例如虚拟机或容器)位于同一项目命名空间中。

您的叶子子网必须配置为 prefixLength 值为 32,因为该子网旨在分配单个 IP 地址。parentReference 值引用的是之前分配的子网,例如您在为工作负载创建可用区级分支子网中创建的父级可用区级子网。

  • 在终端窗口中,在管理 API 服务器中创建叶子子网:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/allocation-preference: default
        ipam.gdc.goog/vpc: default-vpc
      name: SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_SUBNET
        namespace: platform
      type: Leaf
    EOF
    

    替换以下内容:

    • MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅可用区级管理 API 服务器资源
    • SUBNET_NAME:叶子子网的名称。
    • PROJECT_NAMESPACE:与工作负载所在的项目对应的项目命名空间。
    • PARENT_SUBNET:此叶子子网将从中获取 IP 地址的父子网的名称。

您的单个 IP 地址现在可供内部工作负载(例如虚拟机和容器)使用。如需详细了解如何为工作负载配置 IP 地址,请参阅部署虚拟机工作负载部署容器工作负载

从全球 IP 地址范围分配区域子网

如果您的可用区无法从现有的可用区根子网 IP 地址范围为工作负载提供足够的 IP 地址,您可以从全局 IP 地址根范围分配额外的 IP 地址。

针对 platform 命名空间中的默认 VPC 网络完成以下步骤:

  1. 在终端窗口中,描述所有默认 VPC 的根子网并检查其可用的 CIDR:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    GLOBAL_API_SERVER_KUBECONFIG 替换为全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全局 API 服务器资源。 标签是常量,必须保持不变。

    输出类似于以下内容:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    Annotations:  <none>
    API Version:  ipam.global.gdc.goog/v1
    Kind:         Subnet
    Metadata:
      Creation Timestamp:  2025-06-18T23:05:38Z
      Finalizers:
        global-subnet-finalizer
      Generation:        1
      Resource Version:  439434
      UID:               5ed1c51a-b5ee-473e-a185-8e065a87ae8f
    Spec:
      ipv4Request:
        Cidr:                10.252.0.0/14
      Propagation Strategy:  None
      Type:                  Root
    Status:
      Children Refs:
        Name:       default-vpc-zone1-root-cidr
        Namespace:  platform
        Type:       SingleSubnet
      Conditions:
        Last Transition Time:  2025-06-18T23:05:38Z
        Message:               IP allocation finished successfully
        Observed Generation:   1
        Reason:                AllocationSucceeded
        Status:                True
        Type:                  Ready
      ipv4Allocation:
        Available CIDRs:
          10.254.0.0/15
          10.253.0.0/16
        Cidr:  10.252.0.0/14
    Events:    <none>
    

    请注意 Status.ipv4Allocation.Available CIDRs 值,这些值是可用的 CIDR,将在下一步中引用。在上面的输出中,CIDR 范围 10.254.0.0/1510.253.0.0/16 可用。您的输出中可能包含多个子网,具体取决于您拥有的根子网数量,因此请记下所有可用的 CIDR,并记下可用 CIDR 来自哪个子网。

  2. 将您在上一步中记下的最大可用 CIDR 与您需要分配给可用区的 CIDR 大小进行比较。如果最大的可用 CIDR 不足以分配新子网,请先添加新的网络根范围全局子网,然后再继续。记下您决定从中获取新子网 CIDR 的父子网。

    例如,如果您需要 /13 CIDR,但可用的 CIDR 仅包含 /15/16,则必须添加新的网络根范围全局子网。如果您需要 /15 子网,可以从现有的 /15 CIDR 分配新的可用区子网。

  3. 在全局 API 服务器中创建新子网:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      zone: ZONE_NAME
      propagationStrategy: SingleZone
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER_KUBECONFIG:全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全球 API 服务器资源
    • SUBNET_NAME:新子网的名称。
    • CIDR_PREFIX_LENGTH:动态分配的新子网的 CIDR 前缀长度,例如 20。如需静态设置 CIDR,请将 prefixLength 字段替换为 cidr 字段,然后设置 CIDR 地址块,例如 10.0.10.0/27
    • ZONE_NAME:要为其分配子网的可用区,例如 zone1
    • PARENT_SUBNET_NAME:父子网的名称,例如 default-vpc-root-cidr,或您创建的新网络根范围全局子网。
    • ORG_NAME:组织的名称。

    如需了解详情,请参阅全局 Subnet 资源的 API 参考文档。

  4. 通过检查子网的状态 Ready 类型是否为 true,验证子网是否已准备就绪并可在全局 API 服务器中使用:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    输出类似于以下内容:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:28:48Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    
  5. 验证区域子网是否已在区域管理 API 服务器中创建,并且其状态 Ready 类型为 true

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    MANAGEMENT_API_SERVER_KUBECONFIG 替换为管理 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅可用区级管理 API 服务器资源

    输出类似于以下内容:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:29:34Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    

    通过此新的可用区级子网,您可以创建更多可用区级子子网,也可以直接为内部工作负载分配单个 IP 地址

划分未分配可用区的根全局子网

如需进一步划分全球子网,但又不将其分配给某个可用区供工作负载使用,请创建全球子网,但不要在 Subnet 自定义资源中定义传播策略。如果您希望继续从全局根子网组织可全局访问的 IP 地址范围,而不将 IP 地址分配给可用区,此方法非常有用。

platform 命名空间中完成以下步骤,以仅在全局范围内划分全局根子网:

  1. 在终端窗口中,描述所有默认 VPC 的根子网并检查其可用 CIDR:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \
        --label ipam.gdc.goog/vpc=default-vpc,ipam.gdc.goog/usage=network-root-range
    

    GLOBAL_API_SERVER_KUBECONFIG 替换为全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全局 API 服务器资源。 标签是常量,必须保持不变。

    输出类似于以下内容:

    Name:         default-vpc-root-cidr
    Namespace:    platform
    Labels:       ipam.gdc.goog/allocation-preference=default
                  ipam.gdc.goog/subnet-group=default-vpc-root-group
                  ipam.gdc.goog/usage=network-root-range
                  ipam.gdc.goog/vpc=default-vpc
    Annotations:  <none>
    API Version:  ipam.global.gdc.goog/v1
    Kind:         Subnet
    Metadata:
      Creation Timestamp:  2025-06-18T23:05:38Z
      Finalizers:
        global-subnet-finalizer
      Generation:        1
      Resource Version:  439434
      UID:               5ed1c51a-b5ee-473e-a185-8e065a87ae8f
    Spec:
      ipv4Request:
        Cidr:                10.252.0.0/14
      Propagation Strategy:  None
      Type:                  Root
    Status:
      Children Refs:
        Name:       default-vpc-zone1-root-cidr
        Namespace:  platform
        Type:       SingleSubnet
      Conditions:
        Last Transition Time:  2025-06-18T23:05:38Z
        Message:               IP allocation finished successfully
        Observed Generation:   1
        Reason:                AllocationSucceeded
        Status:                True
        Type:                  Ready
      ipv4Allocation:
        Available CIDRs:
          10.254.0.0/15
          10.253.0.0/16
        Cidr:  10.252.0.0/14
    Events:    <none>
    

    请注意 Status.ipv4Allocation.Available CIDRs 值,这些值是可用的 CIDR,将在下一步中引用。在上面的输出中,CIDR 范围 10.254.0.0/1510.253.0.0/16 可用。您的输出中可能包含多个子网,具体取决于您拥有的根子网数量,因此请记下所有可用的 CIDR,并记下可用 CIDR 来自哪个子网。

  2. 将您在上一步中记下的最大可用 CIDR 与您需要分配给新全局子网的 CIDR 大小进行比较。如果最大的可用 CIDR 不足以分配新子网,请先添加新的网络根范围全局子网,然后再继续。记下您决定从中获取新子网 CIDR 的父子网。

    例如,如果您需要 /13 CIDR,但可用的 CIDR 仅包含 /15/16,则必须创建新的网络根范围全局子网。如果您需要 /15 子网,可以从现有的 /15 CIDR 分配新的全局子网。

  3. 在全局 API 服务器中创建新子网:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        prefixLength: CIDR_PREFIX_LENGTH
      propagationStrategy: None
      type: Branch
      parentReference:
        name: PARENT_SUBNET_NAME
        namespace: ORG_NAME
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER_KUBECONFIG:全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全球 API 服务器资源
    • SUBNET_NAME:新子网的名称。
    • CIDR_PREFIX_LENGTH:动态分配的新子网的 CIDR 前缀长度,例如 20。如需静态设置 CIDR,请将 prefixLength 字段替换为 cidr 字段,然后设置 CIDR 地址块,例如 10.0.10.0/27
    • PARENT_SUBNET_NAME:父子网的名称,例如 default-vpc-root-cidr,或您创建的新网络根范围全局子网。
    • ORG_NAME:组织的名称。

    如需了解详情,请参阅全局 Subnet 资源的 API 参考文档。

  4. 通过检查子网的状态 Ready 类型是否为 true,验证子网是否已准备就绪并可在全局 API 服务器中使用:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG get subnet --namespace platform \
        SUBNET_NAME --output jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
    

    输出类似于以下内容:

    status:
      conditions:
      - lastTransitionTime: "2025-06-06T07:28:48Z"
        message: IP allocation finished successfully
        observedGeneration: 1
        reason: AllocationSucceeded
        status: "True"
        type: Ready
    

您组织在默认 VPC 中的新全局子网已可供使用。您可以从这个新的全局父子网为特定可用区创建子网

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

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

如需创建新的网络根范围子网,请完成以下操作:

  • 在终端窗口中,为 platform 命名空间中的默认 VPC 创建新的网络根范围全局子网:

    kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/vpc: default-vpc
        ipam.gdc.goog/usage: network-root-range
      name: SUBNET_NAME
      namespace: platform
    spec:
      ipv4Request:
        cidr: NEW_CIDR
      type: Root
    EOF
    

    替换以下内容:

    • GLOBAL_API_SERVER_KUBECONFIG:全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全球 API 服务器资源
    • SUBNET_NAME:新子网的名称。
    • NEW_CIDR:子网的新 CIDR。此 CIDR 不得与同一全局 API 服务器中具有 ipam.gdc.goog/usage: network-root-range 标签的所有现有子网中的任何 CIDR 重叠。

这个新的全局根范围子网可以在全局 API 服务器中细分,也可以分配给特定地区

后续步骤