创建基于路由的集群


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

概览

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

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

准备工作

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

使用以下任一方法设定默认的 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

创建基于路由的集群

您可以使用 gcloud 工具或 Google Cloud Console 创建基于路由的集群。

gcloud

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

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

其中 [CLUSTER_NAME] 是您为集群选择的名称。

控制台

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 点击 创建

  3. 输入集群的名称。

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

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

  6. 点击创建

验证集群是否使用路由

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

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

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

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

控制台

  1. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

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

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

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

  5. 转到 Cloud Console 中的路由页面。

    转到“路由”

  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

对于 GKE 1.7 版及更高版本,Pod 地址范围可以来自下列任意 RFC 1918 块:10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16。对于早期版本,Pod 地址范围必须来自 10.0.0.0/8。

您可通过指定 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. 转到 Cloud Console 中的 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 原生集群具有更大范围的可用地址。

后续步骤