添加 Pod IPv4 地址范围


本页面介绍了如何为 VPC 原生集群配置额外的 Pod IPv4 地址范围,以及如何为 VPC 原生集群的节点池指定自定义 Pod IPv4 地址范围。

VPC 原生集群中的 Pod IPv4 地址范围始终来自子网次要 IPv4 地址范围。创建新集群时,您需要为集群分配默认 Pod IPv4 地址范围。

  • 对于 Autopilot 集群和 Standard 集群,您可以将集群配置为使用额外的 Pod IPv4 地址范围。GKE 将这些额外的 Pod IPv4 地址范围用于未来节点池中创建的节点上的 Pod IPv4 地址。
  • 对于 Standard 集群,您可以创建节点池,每个节点池都为其 Pod IPv4 地址使用自定义子网次要 IPv4 地址范围。

准备工作

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

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。
  • 确保您拥有包含集群子网的项目的 Compute Network Admin Identity and Access Management (IAM) 角色。此角色是创建新的子网次要 IPv4 地址范围所必需的。使用共享 VPC 时,您需要与共享 VPC 宿主项目的网络管理员协调。
  • 确保 GKE 集群是一个 VPC 原生集群。基于路由的集群不支持额外的 Pod IPv4 地址范围或节点池自定义 Pod IPv4 地址范围。
  • 查看后续步骤部分。

创建新的子网次要 IPv4 地址范围

如需创建新的子网次要 IPv4 地址范围,请使用 Google Cloud 控制台或 Google Cloud CLI。每个子网最多支持 30 个次要 IPv4 地址范围。如需了解详情,请参阅 VPC 文档中的修改次要 IPv4 范围

控制台

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. VPC 网络列表中,选择您要扩展的网络。

  3. 子网列表中,选择所需的子网。

  4. 点击修改

  5. 点击添加 IP 范围

  6. 子网范围名称字段中,输入新的子网次要 IPv4 地址范围的名称。例如 pod-range-2

  7. 次要 IP 范围字段中,以 CIDR 格式输入 IPv4 地址范围。例如 10.2.204.0/22

  8. 点击保存

gcloud

gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --add-secondary-ranges=SECONDARY_RANGE_NAME=SECONDARY_RANGE_CIDR

替换以下内容:

  • SUBNET_NAME:集群子网(创建集群时分配给集群的同一子网)的名称。
  • REGION:集群子网的区域。集群子网的区域是 GKE 集群所在的区域。
  • SECONDARY_RANGE_NAME:充当集群的额外 Pod IPv4 地址范围的新子网次要 IPv4 地址范围的名称。例如 pod-range-2
  • SECONDARY_RANGE_CIDR:供新的子网次要 IPv4 地址范围使用的 CIDR。例如 10.2.204.0/22

通过在 --add-secondary-ranges 标志后指定额外的 SECONDARY_RANGE_NAME=SECONDARY_RANGE_CIDR 对(以英文逗号分隔),您可以添加两个或更多新的子网次要 IPv4 地址范围。

为集群分配额外的 Pod IPv4 范围

您可以在集群级层分配额外的 Pod IPv4 地址范围,该地址范围适用于在集群中创建的新节点池中创建的新节点。如需为集群分配额外的 Pod IPv4 地址范围,您必须先创建新的子网次要 IPv4 地址范围

以下集群支持为集群分配额外的 Pod IPv4 地址范围:

  • 运行 GKE 1.26 版及更高版本的 Autopilot 集群
  • Standard 集群

控制台

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在要修改的集群旁边,点击 操作,然后点击 修改

  3. 网络部分中,点击集群 Pod IPv4 范围(额外)旁边的 修改

  4. 修改额外集群 Pod IPv4 范围对话框中,点击 Pod 次要 CIDR 范围,然后选择集群子网中的一个或多个现有子网次要 IPv4 地址范围的名称。如果没有额外的子网次要 IPv4 地址范围可用,请先创建新的子网次要 IPv4 地址范围,然后重复这些步骤。

  5. 点击保存更改

gcloud

  1. 使用 --additional-pod-ipv4-ranges 标志更新集群:

    gcloud container clusters update CLUSTER_NAME \
        --additional-pod-ipv4-ranges=SECONDARY_RANGE_NAME \
        --location=ZONE_OR_REGION
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • SECONDARY_RANGE_NAME:集群子网中的一个或多个现有子网次要 IPv4 地址范围的名称(以英文逗号分隔)。如果没有子网次要 IPv4 地址范围可用,请先创建新的子网次要 IPv4 地址范围
    • ZONE_OR_REGION:对于可用区级集群,这是集群所在的 Compute Engine 可用区。对于区域级集群,这是集群所在的 Compute Engine 区域。如需查看可用区和区域列表,请参阅 Compute Engine 文档中的区域和可用区

查询集群 Pod IPv4 范围

如需查询集群的默认 Pod IPv4 地址范围以及已分配给集群的任何额外 Pod IPv4 地址范围,请使用以下命令:

gcloud container clusters describe CLUSTER_NAME \
  --location=ZONE_OR_REGION

替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • ZONE_OR_REGION:对于可用区级集群,这是集群所在的 Compute Engine 可用区。对于区域级集群,这是集群所在的 Compute Engine 区域。

输出类似于以下内容,其中包括集群的 IPAllocationPolicy

ipAllocationPolicy:
  clusterSecondaryRangeName: cluster-pods
  clusterIpv4CidrBlock: 10.10.0.0/23
  additionalPodRangesConfig:
    podRangeNames:
      - pod-range-1
      - pod-range-2

其中:

  • clusterSecondaryRangeName:用作集群的默认 Pod IPv4 地址范围的子网次要 IPv4 地址范围的名称(创建集群时定义)。
  • clusterIpv4CidrBlock:Pod IPv4 地址的子网次要 IPv4 地址范围的 CIDR(创建集群时定义)。
  • additionalPodRangesConfig.podRangeNames:Pod IPv4 地址的任何额外分配的子网次要 IPv4 地址范围的列表。

节点池自定义 Pod IPv4 地址范围

对于运行 GKE 1.20.4-gke.500 或更高版本的 Standard 集群,您可以使用以下方法之一为新节点池分配自定义 Pod IPv4 范围:

  • GKE 管理的节点池自定义 Pod IPv4 地址范围:使用此选项,您可以创建新的节点池,并为 GKE 提供在集群子网中创建新的子网次要 IPv4 地址范围所需的信息。在新节点池中创建的每个新节点都分配有一个用于其 Pod IPv4 地址的别名 IP 地址范围,并且每个别名 IP 地址范围都来自 GKE 创建的新子网次要 IPv4 地址范围。只有集群和包含集群子网的 VPC 网络位于同一项目中时,才可以使用此选项。

  • 用户管理的节点池自定义 Pod IPv4 地址范围:使用此选项,您可以创建一个新的节点池,其中 GKE 使用现有子网次要 IPv4 地址范围。在新节点池中创建的每个新节点都分配有一个用于其 Pod IPv4 地址的别名 IP 地址范围,并且每个别名 IP 地址范围都来自您指示 GKE 使用的子网次要 IPv4 地址范围。如果集群位于共享 VPC 服务项目中,并且集群的子网位于宿主项目的共享 VPC 网络中,则您必须使用此选项。

节点池的自定义 Pod IPv4 地址范围会替换在集群级层定义的所有 Pod IPv4 地址范围,包括分配给集群的额外 Pod IPv4 地址范围。分配给节点池的自定义 Pod IPv4 地址范围也称为不连续的多 Pod CIDR

节点池自定义 Pod IPv4 地址范围示例

下图展示了具有用户管理的 Pod IPv4 地址范围的 VPC 原生集群:

使用不连续的多 Pod CIDR 将节点池添加到已用尽次要 Pod IP 地址范围的集群
图表:节点池自定义 Pod IPv4 地址范围示例

在上图中:

  • 集群中每个节点池的每个节点的 Pod 数量上限设置为 64。为了容纳每个节点最多 64 个 Pod,GKE 使用 /25 别名 IP 地址范围创建每个节点,为每个节点提供 128 个 Pod IPv4 地址。
  • 集群的默认 Pod IPv4 地址范围为 /24。由于每个节点需要对 Pod IPv4 地址使用 /25,因此集群的默认 Pod IPv4 地址范围仅支持两个节点。
  • 为了支持额外节点,集群管理员创建了一个额外的节点池,以使每个节点的 Pod 数上限保持在 64。额外的节点池使用自定义 /20 Pod IPv4 地址范围,该地址范围支持 32 个额外节点。

GKE 管理的节点池自定义 Pod IPv4 地址范围

如需创建具有 GKE 管理的自定义 Pod IPv4 地址范围的节点池,请使用 gcloud CLI 或 GKE API,如下所示:

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --location=ZONE_OR_REGION \
  --create-pod-ipv4-range=name=SECONDARY_RANGE_NAME,range=CIDR_OR_NETMASK

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • CLUSTER_NAME:集群的名称。
  • ZONE_OR_REGION:对于可用区级集群,这是集群所在的 Compute Engine 可用区。对于区域级集群,这是集群所在的 Compute Engine 区域。如需查看可用区和区域列表,请参阅区域和可用区
  • SECONDARY_RANGE_NAME:GKE 创建的子网次要 IPv4 地址范围的名称。如果省略 name=SECONDARY_RANGE_NAME,GKE 会自动生成新的子网次要 IPv4 地址范围的名称。
  • CIDR_OR_NETMASK:以 CIDR 格式(例如 10.12.4.0/20)或子网掩码(例如 /20)表示的 Pod IPv4 地址范围。
    • 如果您仅提供了子网掩码,则 GKE 会尝试创建与包含集群子网的 VPC 网络中的现有子网 IPv4 地址范围不冲突的新子网次要 IPv4 地址范围。
    • 如果您省略 range=CIDR_OR_NETMASK,则 GKE 会尝试创建与包含集群子网的 VPC 网络中的现有子网 IPv4 地址范围不冲突的新 /14 子网次要 IPv4 地址范围。

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": true,
    "podRange": "SECONDARY_RANGE_NAME",
    "podIpv4CidrBlock": "CIDR_OR_NETMASK"
    }
}

替换以下内容:

  • POOL_NAME:新节点池的名称。
  • SECONDARY_RANGE_NAME:(可选)GKE 创建的子网次要 IPv4 地址范围的名称。如果您使用 "" 作为 networkConfig.podRange 的值,或者在请求中省略 podRange 参数,则 GKE 会自动生成新的子网次要 IPv4 地址范围的名称。
  • CIDR_OR_NETMASK:以 CIDR 格式(例如 10.12.4.0/20)或子网掩码(例如 /20)表示的 Pod IPv4 地址范围。
    • 如果您仅提供了子网掩码,则 GKE 会尝试创建与包含集群子网的 VPC 网络中的现有子网 IPv4 地址范围不冲突的新子网次要 IPv4 地址范围。
    • 如果您使用 "" 作为 networkConfig.podIpv4CidrBlock 的值,则 GKE 会尝试创建与包含集群子网的 VPC 网络中的现有子网 IPv4 地址范围不冲突的新 /14 子网次要 IPv4 地址范围。

用户管理的节点池自定义 Pod IPv4 地址范围

如需创建具有用户管理的自定义 Pod IPv4 地址范围的节点池,请使用 gcloud CLI 或 GKE API,如下所示:

gcloud

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --location=ZONE_OR_REGION \
  --pod-ipv4-range SECONDARY_RANGE_NAME

请替换以下内容:

  • POOL_NAME:新节点池的名称。
  • CLUSTER_NAME:集群的名称。
  • ZONE_OR_REGION:对于可用区级集群,这是集群所在的 Compute Engine 可用区。对于区域级集群,这是集群所在的 Compute Engine 区域。如需查看可用区和区域列表,请参阅 Compute Engine 文档中的区域和可用区
  • SECONDARY_RANGE_NAME:集群子网中现有子网的次要 IPv4 地址范围的名称。如有必要,请先创建新的子网次要 IPv4 地址范围

API

"nodePool": {
  "name": "POOL_NAME",
  ...
  "networkConfig": {
    "createPodRange": false,
    "podRange": "SECONDARY_RANGE_NAME"
    }
}

替换以下内容:

查询节点池 Pod IPv4 范围

如需查询节点池的 Pod IPv4 地址范围,请使用以下命令:

gcloud container node-pools describe POOL_NAME \
  --cluster=CLUSTER_NAME \
  --location=ZONE_OR_REGION

替换以下内容:

  • POOL_NAME:节点池的名称。
  • CLUSTER_NAME:集群的名称。
  • ZONE_OR_REGION:对于可用区级集群,这是集群所在的 Compute Engine 可用区。对于区域级集群,这是集群所在的 Compute Engine 区域。

输出类似于以下内容,其中包括节点池的 NodeNetworkConfig

  networkConfig:
    podRange: podrange
    podIpv4CidrBlock: 192.168.0.0/18

其中:

  • podRange:节点池的 Pod IPv4 地址的子网次要 IPv4 地址范围的名称。
  • podIpv4CidrBlock:节点池的 Pod IPv4 地址的子网次要 IPv4 地址范围的 CIDR。

如果节点池使用自定义 Pod IPv4 地址范围,则 podRangepodIpv4CidrBlock 值与集群的默认 Pod IPv4 地址范围不同。

后续步骤

为集群分配额外的 Pod IPv4 地址范围或配置节点池自定义 Pod IPv4 地址范围后,GKE 会更新自动创建的 gke-[cluster-name]-[cluster-hash]-all VPC 防火墙规则,以使其来源范围包含所有 Pod IPv4 地址。

您可能还需要执行以下操作:

后续步骤