本页面介绍了如何在组织的数据网络段中创建其他子网,以满足外部网络需求。您必须添加子网,以确保外部服务(例如出站网络地址转换 [NAT] 和外部负载平衡器)有足够的 IP 地址来支持其网络要求,以便连接到组织外部的外部网络。
本页面中列出了多项任务,这些任务不必按顺序完成:
- 为外部服务创建可用区级分支子网:此任务有助于进一步组织或将可用区的现有外部 IP 地址分配给服务。
- 为单个服务创建叶子子网:当您有尚未使用 IP 地址的新服务时,此任务非常有用。
- 从全局 IP 地址范围分配可用区子网:当可用区不再有足够的外部 IP 地址空间时,此任务非常有用。
- 划分未分配可用区的根全局子网:此任务有助于在将外部 IP 地址分配给可用区之前,进一步整理全局 API 服务器中的外部 IP 地址。
- 添加新的网络根范围全局子网:当您的数据网络段不再有足够的全局外部 IP 地址空间来分配给可用区时,此任务非常有用。
在完成本页面中的任务之前,如需大致了解子网及其概念,请参阅子网和 IP 地址。
本页面适用于平台管理员群组中的网络管理员和应用运维人员群组中的应用开发者,他们负责管理组织的网络流量。如需了解详情,请参阅 GDC 气隙环境文档的受众群体。
准备工作
如需获得创建子网所需的权限,请让您的组织 IAM 管理员向您授予 Subnet Organization Admin (subnet-org-admin
) IAM 角色。此角色未绑定到命名空间。
为外部服务创建可用区级分支子网
您可以从可用区的现有可用区级根子网创建可用区级外部子网,以进一步细分可用区级数据网络段中的 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/network-segment: data 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
:父子网的名称,例如data-external-zone0-cidr
。父子网通常是数据网络段中的区域根子网。
如需了解详情,请参阅
Subnet
资源的 API 参考文档。您可以继续细分可用区子网,也可以创建叶子子网,以便直接向外部服务分配单个 IP 地址。
为单个服务创建叶子子网
您必须创建叶子子网,才能为服务分配单个 IP 地址。此叶子子网必须具有字段值 type: Leaf
,并且必须与您的外部服务(例如外部负载平衡器或出站 NAT)位于同一项目命名空间中。
您的叶子子网必须配置为 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/network-segment: data 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
命名空间中的数据网络段完成以下步骤:
在终端窗口中,描述所有数据网络段的根子网并检查其可用的 CIDR:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
将
GLOBAL_API_SERVER_KUBECONFIG
替换为全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全局 API 服务器资源。 标签是常量,必须保持不变。输出类似于以下内容:
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data 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: data-external-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/15
和10.253.0.0/16
可用。您的输出中可能包含多个子网,具体取决于您拥有的根子网数量,因此请记下所有可用的 CIDR,并记下可用 CIDR 来自哪个子网。将您在上一步中记下的最大可用 CIDR 与您需要分配给可用区的 CIDR 大小进行比较。如果最大的可用 CIDR 不足以分配新子网,请先添加新的网络根范围全局子网,然后再继续。记下您决定从中获取新子网 CIDR 的父子网。
例如,如果您需要
/13
CIDR,但可用的 CIDR 仅包含/15
和/16
,则必须创建新的网络根范围全局子网。如果您需要/15
子网,可以从现有的/15
CIDR 分配新的可用区子网。在全局 API 服务器中创建新子网:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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 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
:父子网的名称,例如data-external-root-cidr
,或您创建的新网络根范围全局子网。ORG_NAME
:组织的名称。
如需了解详情,请参阅全局
Subnet
资源的 API 参考文档。通过检查子网的状态
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
验证区域子网是否已在区域管理 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 地址。
划分未分配可用区的根全局子网
如果您想继续从全局根子网组织您的全局可访问 IP 地址范围,而不将 IP 地址分配给您的可用区外部服务,请创建一个全局子网,并且不要在 Subnet
自定义资源中定义传播策略。
在 platform
命名空间中完成以下步骤,以仅在全局范围内划分全局根子网:
在终端窗口中,描述所有数据网络段的根子网并检查其可用的 CIDR:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG describe subnets --namespace platform \ --label ipam.gdc.goog/network-segment=data,ipam.gdc.goog/usage=network-root-range
将
GLOBAL_API_SERVER_KUBECONFIG
替换为全局 API 服务器的 kubeconfig 文件的路径。如需了解详情,请参阅全局 API 服务器资源。 标签是常量,必须保持不变。输出类似于以下内容:
Name: data-external-root-cidr Namespace: platform Labels: ipam.gdc.goog/allocation-preference=default ipam.gdc.goog/subnet-group=data-external-root-group ipam.gdc.goog/usage=network-root-range ipam.gdc.goog/network-segment=data 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: data-external-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/15
和10.253.0.0/16
可用。您的输出中可能包含多个子网,具体取决于您拥有的根子网数量,因此请记下所有可用的 CIDR,并记下可用 CIDR 来自哪个子网。将您在上一步中记下的最大可用 CIDR 与您需要分配给新全局子网的 CIDR 大小进行比较。如果最大的可用 CIDR 不足以分配新子网,请先添加新的网络根范围全局子网,然后再继续。记下您决定从中获取新子网 CIDR 的父子网。
例如,如果您需要
/13
CIDR,但可用的 CIDR 仅包含/15
和/16
,则必须创建新的网络根范围全局子网。如果您需要/15
子网,可以从现有的/15
CIDR 分配新的全局子网。在全局 API 服务器中创建新子网:
kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<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 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
:父子网的名称,例如data-external-root-cidr
,或您创建的新网络根范围全局子网。ORG_NAME
:组织的名称。
如需了解详情,请参阅全局
Subnet
资源的 API 参考文档。通过检查子网的状态
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
数据网络段中适用于您组织的新全局子网已可用。您可以从这个新的全局父子网为特定可用区创建子网。
添加新的网络根范围全局子网
带有 ipam.gdc.goog/usage: network-root-range
标签的全局子网托管网络中所有可用区的 CIDR。如果 CIDR 用完,您必须在全局 API 服务器中创建新的网络根范围子网。您可以根据需要创建多个根全局子网。
如需创建新的网络根范围子网,请完成以下操作:
在终端窗口中,为
platform
命名空间中的数据网络段创建新的网络根范围全局子网:kubectl --kubeconfig GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data 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 服务器中细分,也可以分配给特定地区。