创建基于路由的集群


本页面介绍如何在 Google Kubernetes Engine (GKE) 中创建基于路由的集群。

概览

在 GKE 中,系统可以根据集群将流量从一个 Pod 路由到另一个 Pod 的方式来区分集群。使用 Google Cloud 路由的集群称为基于路由的集群。使用别名 IP 的集群称为 VPC 原生集群

VPC 原生为推荐类型,并且是 GKE 1.21.0-gke.1500 及更高版本中新集群的默认类型。要创建基于路由的集群,您必须明确关闭 VPC 原生选项

准备工作

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

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

创建基于路由的集群

您可以使用 gcloud CLI 或 Google Cloud 控制台创建基于路由的集群。

gcloud

要创建基于路由的集群,请在集群创建命令中添加 --no-enable-ip-alias 标志:

gcloud container clusters create CLUSTER_NAME --no-enable-ip-alias

CLUSTER_NAME 替换为您为集群选择的名称。

控制台

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

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 输入集群的名称。

  4. 在导航窗格的集群下,点击网络

  5. 高级网络选项下,取消选中启用 VPC 原生流量路由(使用别名 IP)复选框。

  6. 点击创建

创建基于路由的集群并选择控制平面 IP 范围

默认情况下,使用 Private Service Connect 的集群会使用主要子网范围来预配分配给控制平面端点的内部 IP 地址。您只能在创建集群期间通过选择其他子网范围来替换此默认设置。以下部分介绍如何创建使用 Private Service Connect 的集群并替换子网范围。

gcloud

创建使用 Private Service Connect 的集群:

gcloud container clusters create CLUSTER_NAME --no-enable-ip-alias \
    --private-endpoint-subnetwork=SUBNET_NAME \
    --region=COMPUTE_REGION

替换以下内容:

  • CLUSTER_NAME:GKE 集群的名称。
  • SUBNET_NAME:现有子网的名称。
  • COMPUTE_REGION:集群的计算区域。如需创建可用区级集群,请将此标志替换为 --zone=COMPUTE_ZONE,其中 COMPUTE_ZONE计算可用区

控制台

前提条件

如需向新集群的控制平面分配子网,您必须先添加子网

创建集群并分配控制平面 IP 范围

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

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 输入集群的名称。

  4. 在导航窗格的集群下,点击网络

  5. IPv4 网络访问部分中,执行以下操作:

    1. 如需将 GKE 集群创建为公共集群,请选择公共集群单选按钮。
    2. 如需将 GKE 集群创建为专用集群,请选择专用集群单选按钮。

    在这两种情况下,您都可以在以后修改集群配置时更改集群隔离模式

  6. 高级网络选项部分中,选中替换控制层面的默认专用端点子网复选框。

  7. 专用端点子网列表中,选择您创建的子网。

  8. 取消勾选启用 VPC 原生流量路由(使用别名 IP)复选框。

  9. 点击创建

验证集群是否使用路由

gcloud

列出集群节点:

kubectl get nodes

输出显示节点的名称:

NAME                                 STATUS   ...     AGE    VERSION
gke-xxx-default-pool-83e239a7-kcg8   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-qm6b   Ready    ...     42m    v1.9.7-gke.6
gke-xxx-default-pool-83e239a7-wnrq   Ready    ...     42m    1.9.7-gke.6

列出路由:

gcloud compute routes list

在此输出的NEXT_HOP列中,查找其中一个集群节点的名称:

NAME                 NETWORK        DEST_RANGE         NEXT_HOP
...
[ROUTE_NAME]         default        10.24.0.0/24       [YOUR_NODE_NAME]
...

在此输出中,路由为任何发往特定 Pod 地址范围的数据包提供下一个跃点。

控制台

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

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要检查的集群的名称。

  3. 集群详情页面上,点击节点标签页。

  4. 节点部分中,记下任何节点的名称。

  5. 转到 Google Cloud 控制台中的路由页面。

    转到“路由”

  6. 在路由列表的下一个跃点列中,查找其中一个集群节点的名称。点击该行中的路由名称。

  7. 路由详请页面上,检查下一个跃点部分,验证路由是否提供任何发往特定 Pod 地址范围的数据包的下一个跃点。

每个节点的 Pod 数

在基于路由的集群中,每个节点都分配有一个 /24 范围内的适用于 Pod 的 IP 地址。/24 范围内有 256 个地址,但每个节点的 Pod 数目上限是 110。Kubernetes 能将可用 IP 地址数量设为 Pod 数量的将近两倍,当 Pod 添加到节点以及从节点中移除时,Kubernetes 能够减少 IP 地址的重用。

Pod 地址范围

基于路由的集群有一系列 IP 地址可用于 Pod 和服务。虽然该范围同时用于 Pod 和服务,但它称为“Pod 地址范围”。Pod 地址范围最后的 /20 用于服务。一个 /20 范围有 212 = 4096 个地址。因此,4096 个地址用于服务,剩余范围用于 Pod。

在命令输出中,Pod 地址范围称为 clusterIpv4Cidr,用于服务的地址范围称为 servicesIpv4Cidr。例如,gcloud container clusters describe 的输出包括如下所示的输出:

clusterIpv4Cidr: 10.96.0.0/16
...
servicesIpv4Cidr: 10.96.240.0/20

Pod 地址范围可以来自下列任意 RFC 1918 块:10.0.0.0/8172.16.0.0/12192.168.0.0/16

您可通过指定 CIDR 范围来自定义 Pod 地址范围。例如,您可指定范围 10.96.0.0/16

gcloud

gcloud container clusters create CLUSTER_NAME \
    --no-enable-ip-alias \
    --cluster-ipv4-cidr 10.96.0.0/16

CLUSTER_NAME 替换为您为集群选择的名称。

控制台

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

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 输入集群的名称。

  4. 在导航窗格的集群下,点击网络

  5. 高级网络选项下,取消选中启用 VPC 原生流量路由(使用别名 IP)复选框。

  6. Pod 地址范围字段中,输入 10.96.0.0/16

  7. 点击创建

集群大小调整的注意事项

给定 GKE 集群的最大节点数、Pod 数和服务数由集群子网大小和 Pod 地址范围的大小决定。创建集群后,Pod 地址范围大小便无法再更改。创建集群时,请确保选择足够大的 Pod 地址范围以适应集群的预期增长。

下表说明了如何为具有 900 个节点的集群选择足够的地址范围:

范围 指南
节点

节点 IP 地址取自集群子网的主要范围。集群子网必须足够大,以容纳集群中的全部节点。

例如,如果您计划创建一个含 900 个节点的集群,则集群子网的大小必须至少为 /22。一个 /22 范围有 210 = 1024 个地址。减去 4 个不可用的 IP 地址后,您还有 1020 个地址,这足以容纳 900 个节点。

Pod 地址范围

每个节点都有一个 /24 范围内的适用于 Pod 的 IP 地址。一个 /24 范围有 28 = 256 个地址。回想一下,Pod 地址范围中有 4096 个用于服务。Pod 地址范围的剩余部分用于 Pod,并且大小必须足以容纳节点数 x 256 得出的地址数目。

假设您计划创建一个含 900 个节点的集群。那么 Pod 需要 900 x 256 = 230,400 个地址。现在假设您的 Pod 地址范围为 /14。一个 /14 范围有 218 = 262,144 个地址。减去用于服务的 4096 个地址后,您还有 258048 个地址,这足以容纳 900 个节点。

范围大小的默认值和限制

下表给出了集群子网和 Pod 地址范围的大小下限、大小上限和默认大小。

范围 默认大小 大小下限 大小上限
节点

/20,包括 212 = 4096 个地址。减去 4 个保留地址后,您还有 4092 个地址用来容纳节点。

/29,包括 23 = 8 个地址。减去 4 个保留地址后,您还有 4 个地址用来容纳节点。

/7,包括 225 个地址。大约有 3300 万个地址用来容纳节点。

Pod 地址范围

/14,包括 218 = 262,144 个地址。

/19,包括 213 = 8192 个地址。

/9,包括 223 = 8388608 个地址。

限制

  • 无法将 VPC 原生集群迁移到基于路由的集群。
  • 无法将基于路由的集群迁移到 VPC 原生集群。
  • 基于路由的集群只能将 RFC 1918 范围内的地址用于专用 IP 地址。VPC 原生集群具有更大范围的可用地址。
  • 基于路由的集群不支持双栈网络。

后续步骤