添加 Pod IP 地址范围


本页面介绍如何在 VPC 原生 Google Kubernetes Engine (GKE) 集群中启用连续的多 Pod CIDR。

借助不连续的多 Pod CIDR,您可以将新的或现有的次要 Pod IP 地址范围添加到 GKE 集群。创建新节点池时,默认情况下节点池会使用集群的默认 Pod IP 地址范围(也称为集群 CIDR)。通过此功能,您可以在节点池创建期间指定 Pod IP 地址范围,并且该节点池会使用该范围,而不是使用集群的默认 Pod IP 地址范围。

优势

  • 您无需在创建集群前规划未来的增长,从而更高效地进行 IP 分配。
  • 您可以将集群容纳到分段的 IP 地址空间。
  • 您可以重新分配 IP 地址,以应对不断变化的业务需求。

限制

  • 不连续的多 Pod CIDR 仅在 VPC 原生集群中提供。
  • 集群中的所有节点池都必须位于 1.19.8-gke.1000 版到 1.20 版或 1.20.4-gke.500 及更高版本中。
  • 不连续的多 Pod CIDR 需要 Cloud SDK 版本 330 或更高版本。
  • 节点池的次要 Pod IP 地址范围一经创建便无法更改。但是,您可以创建具有新范围的节点池,并将工作负载轮替到新节点池。
  • 连续的多 Pod CIDR 不能与多集群 Service 一起使用。

注意事项

  • 如果您使用配置了 nonMasqueradeCIDRs 参数的 ip-masq-agent,则必须更新 nonMasqueradeCIDRs 以包括所有 Pod CIDR 范围。
  • 如果您使用配置了 ipBlockNetworkPolicy 指定流量,则必须更新 cidr 值以包括所有 Pod CIDR 范围。

已修改防火墙规则

在 GKE 创建集群时,它会创建防火墙规则以启用 Pod 到 Pod 的通信 gke-[cluster-name]-[cluster-hash]-all

在创建或删除启用了连续的多 Pod CIDR 的节点池时,GKE 会将此防火墙规则的来源值更新为集群用于 Pod IP 地址的所有 CIDR。

准备工作

在开始之前,请确保您已执行以下任务:

使用以下任一方法设定默认的 gcloud 设置:

  • 使用 gcloud init(如果您想要在系统引导下完成默认设置)。
  • 使用 gcloud config(如果您想单独设置项目 ID、区域和地区)。

使用 gcloud init

如果您收到 One of [--zone, --region] must be supplied: Please specify location 错误,请完成本部分。

  1. 运行 gcloud init 并按照说明操作:

    gcloud init

    如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

    gcloud init --console-only
  2. 按照说明授权 gcloud 使用您的 Google Cloud 帐号。
  3. 创建新配置或选择现有配置。
  4. 选择 Google Cloud 项目。
  5. 为可用区级集群选择默认 Compute Engine 可用区,或为区域级集群或 Autopilot 集群选择区域。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project PROJECT_ID
  • 如果您使用的是可用区级集群,请设置默认计算可用区
    gcloud config set compute/zone COMPUTE_ZONE
  • 如果您使用的是 Autopilot 集群或区域级集群,请设置默认计算区域
    gcloud config set compute/region COMPUTE_REGION
  • gcloud 更新到最新版本:
    gcloud components update

使用新的次要 Pod IP 地址范围创建节点池

在本部分中,您将创建一个具有次要 Pod IP 地址范围的节点池。

您可以使用 gcloud 命令行工具或 GKE API。

gcloud

gcloud beta container node-pools create POOL_NAME \
  --cluster CLUSTER_NAME \
  --create-pod-ipv4-range name=RANGE_NAME,range=RANGE

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • CLUSTER_NAME:集群的名称。
  • RANGE_NAME:新的次要 Pod IP 地址范围的可选名称。
  • RANGE:作为网络掩码 (/20) 或 CIDR 范围 (10.12.4.0/20) 提供的可选 Pod IP 地址范围。如果指定了网络掩码,则系统会自动从集群网络中的可用空间分配 IP 地址范围。如果未提供值,则 GKE 会自动分配 /14 网络掩码,也就是子网 Pod 的次要 IP 范围的默认大小。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": true,
    "podRange": "RANGE_NAME",
    "podIpv4CidrBlock": "RANGE"
  }
}

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • RANGE_NAME:新的次要 Pod IP 地址范围的可选名称。
  • RANGE:作为网络掩码 (/20) 或 CIDR 范围 (10.12.0.0/20) 提供的可选 Pod IP 地址范围。如果指定了网络掩码,则系统会自动从集群网络中的可用空间分配 IP 地址范围。如果未提供值,则 GKE 会自动分配 /14 网络掩码,也就是子网 Pod 的次要 IP 范围的默认大小。

使用现有的次要 Pod IP 地址范围创建节点池

在本部分中,您将创建一个包含现有次要 Pod IP 地址范围的节点池。

您可以使用 gcloud 工具或 GKE API。

gcloud

gcloud beta container node-pools create POOL_NAME \
  --cluster CLUSTER_NAME \
  --pod-ipv4-range RANGE_NAME

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • CLUSTER_NAME:集群的名称。
  • RANGE_NAME:集群子网中现有次要 Pod IP 地址范围的名称。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "podRange": "RANGE_NAME"
  }
}

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • RANGE_NAME:集群子网中现有次要 Pod IP 地址范围的名称。

验证节点池的 Pod CIDR 地址块

要确定给定节点池中的 Pod 使用哪个 Pod CIDR 地址块,请使用以下命令:

gcloud beta container node-pools describe POOL_NAME \
  --cluster CLUSTER_NAME

输出内容类似如下:

...
network_config:
  pod_ipv4_cidr_block: 192.168.0.0/18
  pod_range: podrange
...

如果节点池使用不连续的多 Pod CIDR,则 pod_rangepod_ipv4_cidr_block 会显示此节点池的配置值。

如果节点池未使用不连续的多 Pod CIDR,则 pod_rangepod_ipv4_cidr_block 会显示集群的默认值,即 IPAllocationPolicy 中的 cluster_secondary_range_namecluster_ipv4_block

问题排查

您可以启用 VPC 流日志来确定数据包是否已正确发送到节点。

后续步骤