每个 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) 中检索该值。
如需检索
zone-infra-cidr,请运行以下命令:kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr请注意 CIDR 范围。
您必须拥有一个命名空间,其名称与您将分配给组织的名称一致。确认此命名空间存在:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespace ORG_NAME检索现有的根全局子网:
对于全局根管理员集群,请运行:
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 范围。
确认新的计划 CIDR 范围不与任何之前的 CIDR 范围重叠。
确认新 CIDR 范围对新可用区有效后,请确认您的 CIDR 范围符合以下规则:
| CIDR 范围字段。 | 大小下限 | VPC/VRF | 全局 API 服务器 |
|---|---|---|---|
zoneInfraVPCCIDR |
17 | 基础设施 VPC | 全局根 |
zoneDefaultVPCCIDR |
18 | 默认 VPC | 全球组织 |
zoneOrgAdminExternalCIDR |
23 | 管理网络段 | 全局根 |
zoneOrgDataExternalCIDR |
23 | 数据网络段 | 全局根 |
在全局根管理员 API 服务器中创建子网
如需在全局根管理员 API 服务器中创建子网,请完成以下步骤:
列出您的宇宙中的可用区,然后找到新的可用区名称:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -A为组织的新区域创建区域网络根范围
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为组织的新区域创建区域网络根范围数据网络段子网:
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为组织的新可用区创建可用区网络根范围管理员网络分段子网:
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
此问题可能是由多种直接与需要扩大子网相关的原因造成的。请考虑执行以下步骤进行确认:
检查
Cluster自定义资源的.spec.clusterNetwork部分中的podCIDRSize和serviceCIDRSize字段:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG get cluster \ -n platform USER_CLUSTER_NAME -oyaml输出类似于以下内容:
Example: spec: clusterNetwork: podCIDRSize: 20 serviceCIDRSize: 20查找现有子网的父子网:
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查找由父子网分配的所有子网:
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
确定要添加更多子网的子网类型,然后针对该子网类型完成以下步骤:
在全局根管理员 API 服务器中,获取根子网类型并从
subnet.status.ipv4Allocation.cidr中检查其 CIDRmaskSize字段: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-vpc、network-segment=admin、network-segment=data或vpc=default-vpc。
将此值记为总 CIDR,稍后会引用。
获取根子网的所有子子网,并检查
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,以便稍后引用。
根据总 CIDR 和已用 CIDR 计算子网的可用 CIDR。如果可用的 CIDR 不足以分配新子网,请添加新的网络根范围全局子网。然后继续执行下一步。
在全局根管理员 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-vpc、network-segment: admin、network-segment: data或vpc: default-vpc。SUBNET_NAME:新子网的名称。ORG_NAME:组织的名称。CIDR_PREFIX_LENGTH:新子网的前缀长度,例如20。ZONE_NAME:子网的可用区名称,例如zone1。PARENT_SUBNET_NAME:父子网的名称,例如infra-vpc-root-cidr、admin-external-root-cidr、data-external-root-cidr或default-vpc-root-cidr。
通过检查子网的状态
Ready类型是否为true,验证子网是否已就绪。验证是否已在组织的全局 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。验证区域子网是否已在根管理员集群的组织命名空间中创建,并且是否已准备就绪:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subnet -n ORG_NAME \ -l ipam.gdc.goog/SUBNET_TYPE,ipam.gdc.goog/usage=zone-network-root-range验证区域子网是否已在
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 子网,请完成以下步骤:
为新的网络根范围全局子网创建一个 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-vpc、network-segment: admin、network-segment: data或vpc: 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 重叠。