本页面介绍如何在 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
替换为您为集群选择的名称。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
输入集群的名称。
在导航窗格的集群下,点击网络。
在高级网络选项下,取消选中启用 VPC 原生流量路由(使用别名 IP)复选框。
点击创建。
创建基于路由的集群并选择控制层面 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
替换以下内容:
控制台
前提条件
如需向新集群的控制层面分配子网,您必须先添加子网。
创建集群并分配控制层面 IP 地址范围
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
输入集群的名称。
在导航窗格的集群下,点击网络。
在 IPv4 网络访问部分,执行以下操作:
- 如需创建公共 GKE 集群,请选择公共集群单选按钮。
- 如需创建专用 GKE 集群,请选择专用集群单选按钮。
在这两种情况下,您以后都可以在修改集群配置时更改集群隔离模式。
在高级网络选项部分中,选中替换控制层面的默认专用端点子网复选框。
在专用端点子网列表中,选择您创建的子网。
取消勾选启用 VPC 原生流量路由(使用别名 IP)复选框。
点击创建。
验证集群是否使用路由
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 地址范围的数据包提供下一个跃点。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要检查的集群的名称。
在集群详情页面上,点击节点标签页。
在节点部分中,记下任何节点的名称。
转到 Google Cloud 控制台中的路由页面。
在路由列表的下一个跃点列中,查找其中一个集群节点的名称。点击该行中的路由名称。
在路由详请页面上,检查下一个跃点部分,验证路由是否提供任何发往特定 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/8
、172.16.0.0/12
或 192.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
替换为您为集群选择的名称。
控制台
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击 add_box 创建。
输入集群的名称。
在导航窗格的集群下,点击网络。
在高级网络选项下,取消选中启用 VPC 原生流量路由(使用别名 IP)复选框。
在 Pod 地址范围字段中,输入
10.96.0.0/16
。点击创建。
集群大小调整的注意事项
给定 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 原生集群具有更大范围的可用地址。
- 基于路由的集群不支持双栈网络。