本页面介绍如何创建 GKE on AWS 集群。您还可以使用 Terraform 创建 VPC 和集群。
须知事项
在创建集群之前,请务必满足前提条件。具体而言,您必须提供以下资源:
- 集群将在其中运行的 AWS VPC。
- 最多三个 AWS 子网用于三个控制平面副本。每个子网必须位于不同的 AWS 可用区中。
- GKE on AWS 在管理集群时担任的 AWS IAM 角色。这需要一组特定的 IAM 权限。
- KMS 对称 CMK 密钥,用于静态加密集群数据 (etcd) 和配置。
- 每个控制层面副本的 AWS IAM 实例配置文件。这需要一组特定的 IAM 权限。
- EC2 SSH 密钥对(可选),如果您需要对运行每个控制平面副本的 EC2 实例的 SSH 访问权限。
您负责创建和管理这些资源,这些资源可在所有 GKE 集群之间共享。其他所有底层集群范围的 AWS 资源都由 GKE on AWS 管理。
为您的集群选择 CIDR 范围
在 GKE on AWS 中创建集群时,您需要提供用于 Pod 和 Service 的 IPv4 地址范围。
这些 IP 地址范围使用无类别域间路由 (CIDR) 表示法指定,例如 100.64.0.0/16
。
建议范围
我们建议将以下 CIDR 范围用于 Service 和 Pod:
- Service:100.64.0.0/16
- Pod:100.96.0.0/11
这些范围足够大,可供您扩展集群,而不会出现任何问题。
以下各部分提供了更多详细信息。
有关选择范围的详细信息
GKE on AWS 使用 Pod 和 Service 的叠加网络,因此这些网络的 IP 地址范围在 VPC 内不必为可路由的地址范围。您使用的任何 IP 地址范围都必须保证可用。如需了解详情,请参阅 Dataplane V2。
Pod 和 Service IP 范围可以与 VPC 网络重叠,前提是两者均不包含控制平面或节点池子网 IP 范围。
Pod 和 Service IP 范围必须位于以下专用 IP 范围内:
10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
- 专用 IP 地址 (RFC 1918)100.64.0.0/10
- 共享地址空间 (RFC 6598)192.0.0.0/24
- IETF 协议分配 (RFC 6890)192.0.2.0/24
、198.51.100.0/24
、203.0.113.0/24
- 文档 (RFC 5737)192.88.99.0/24
- IPv6 到 IPv4 中继(已弃用)(RFC 7526)198.18.0.0/15
- 基准测试 (RFC 2544)
我们建议使用 100.64.0.0/10
内的 IP 范围 (RFC 6598)。此范围在运营商级 NAT 中采用,在 VPC 中可能不使用。
例如,以下是有效的配置,其中 Pod、Service 和节点网络不重叠(VPC 使用 RFC 1918 专用 IP 地址,而 Pod 和 Service 网络覆盖在 RFC 6598 专用 IP 上)。
- VPC 网络:
10.0.0.0/16
、172.16.1.0/24
、172.16.2.0/24
- Pod 网络:
100.65.0.0/16
- Service 网络:
100.66.0.0/16
尽管 Pod 和 Service 网络与 VPC 网络重叠,但以下配置也是有效配置,因为没有与控制平面副本重叠。
- VPC 网络:
10.0.0.0/16
- Pod 网络:
10.0.1.0/24
- Service 网络:
10.0.2.0/24
- 控制平面副本子网:
10.0.3.0/24
、10.0.4.0/24
、10.0.5.0/24
以下配置无效,因为 Pod IP 范围与控制平面网络重叠。这种重叠可能会阻止工作负载与 VPC 网络中的控制平面副本进行通信:
- VPC 网络:
10.0.0.0/16
- Pod 网络:
10.0.1.0/24
- Service 网络:
10.1.0.0/24
- 控制平面副本子网:
10.0.1.0/24
、10.0.2.0/24
、10.0.3.0/24
有关 Pod 地址范围的详细信息
Kubernetes 会将地址分配给 Pod 地址范围中的 Pod 对象。每个节点的集群 Pod 范围被拆分为多个较小的范围。当 Pod 被安排在特定节点上时,Kubernetes 会从该节点范围分配 Pod IP。
如需计算 Pod 地址范围的大小,您需要估算集群中所需的节点数量以及每个节点上运行的 Pod 数量。
下表根据您要运行的节点和 Pod 的数量为 Pod CIDR 范提供大小建议。
Pod 地址范围表
Pod 地址范围 | 最大 Pod IP 地址数 | 最大节点数 | 最大 Pod 数 |
---|---|---|---|
/24 最小 Pod 地址范围 |
256 个地址 | 1 个节点 | 110 个 Pod |
/23 | 512 个地址 | 2 个节点 | 220 个 Pod |
/22 | 1024 个地址 | 4 个节点 | 440 个地址 |
/21 | 2048 个地址 | 8 个节点 | 880 个 Pod |
/20 | 4096 个地址 | 16 个节点 | 1760 个 Pod |
/19 | 8192 个地址 | 32 个节点 | 3520 个 Pod |
/18 | 16384 个地址 | 64 个节点 | 7040 个 Pod |
/17 | 32768 个地址 | 128 个节点 | 14080 个 Pod |
/16 | 65536 个地址 | 256 个节点 | 28160 个 Pod |
/15 | 131072 个地址 | 512 个节点 | 56320 个 Pod |
/14 | 262144 个地址 | 1024 个节点 | 112640 个 Pod |
有关服务地址范围的详细信息
Kubernetes 会为服务对象(例如,此地址范围内的负载均衡器)分配虚拟 IP 地址。
如要计算 Service 地址范围的大小,您需要估算集群中所需的服务数量。
下表根据您要运行的 Service 数量提供了 Service CIDR 范围的规模建议。
“Service 地址范围”表格
Service 地址范围 | 最大 Service 数 |
---|---|
/27 最小 Service 地址范围 |
32 个 Service |
/26 | 64 个 Service |
/25 | 128 个 Service |
/24 | 256 个 Service |
/23 | 512 个 Service |
/22 | 1024 个 Service |
/21 | 2048 个 Service |
/20 | 4096 个 Service |
/19 | 8192 个 Service |
/18 | 16384 个 Service |
/17 | 32768 个 Service |
/16 最大 Service 地址范围 |
65536 个 Service |
选择您的舰队宿主项目
舰队是 Google Cloud 的概念,用于将集群整理成更大的组。通过舰队,您可以跨多个云管理多个集群,并在这些云中应用一致的政策。创建集群之后,GKE Multi-Cloud API 会自动向舰队注册集群。
创建集群时,您可以指定要在其中管理集群的舰队宿主项目。由于 GKE on AWS 使用集群名称作为舰队成员资格名称,因此您必须确保集群名称在舰队中是唯一的。
跨项目注册
如果要使用集群所在的 Google Cloud 项目以外的舰队宿主项目,则必须对 Multi-Cloud 服务代理服务账号应用额外的 IAM 政策绑定。这样,服务账号就可以使用舰队宿主项目管理舰队。
如需将服务代理添加到项目中,请运行以下命令:
gcloud beta services identity create --service=gkemulticloud.googleapis.com \ --project=CLUSTER_PROJECT_NUMBER
将
CLUSTER_PROJECT_NUMBER
替换为您的 Google Cloud 项目编号。使用以下命令分配此绑定:
gcloud projects add-iam-policy-binding FLEET_PROJECT_ID \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com" \ --role="roles/gkemulticloud.serviceAgent"
替换以下内容:
FLEET_PROJECT_ID
:舰队主机项目的 Google Cloud 项目CLUSTER_PROJECT_NUMBER
:您的 Google Cloud 项目编号
多云服务代理账号名称采用以下格式:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com
。
您可以在 Google Cloud 控制台服务账号页面上找到您的服务账号。如需详细了解如何查找项目编号,请参阅识别项目。
创建您的集群
可使用以下命令在 GKE on AWS 下创建集群。如需详细了解此命令(包括其可选参数),请参阅 gcloud container aws 参考页面。
gcloud container aws clusters create CLUSTER_NAME \
--aws-region AWS_REGION \
--location GOOGLE_CLOUD_LOCATION \
--cluster-version CLUSTER_VERSION \
--fleet-project FLEET_PROJECT \
--vpc-id VPC_ID \
--subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
--pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
--service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
--role-arn API_ROLE_ARN \
--database-encryption-kms-key-arn DB_KMS_KEY_ARN \
--admin-users ADMIN_USERS_LIST \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--iam-instance-profile CONTROL_PLANE_PROFILE \
--tags "Name=CLUSTER_NAME-cp"
替换以下内容:
CLUSTER_NAME
:您选择的集群名称AWS_REGION
:要在其中创建集群的 AWS 区域GOOGLE_CLOUD_LOCATION
:要在其中管理此集群的 Google Cloud 位置的名称,如 Google Cloud 管理区域中所定义。CLUSTER_VERSION
:要在集群上安装的 Kubernetes 版本FLEET_PROJECT
:将在其中注册集群的舰队宿主项目。如果要从其他 Google Cloud 项目管理此集群,请参阅跨项目注册。VPC_ID
:此集群的 AWS VPC 的 IDCONTROL_PLANE_SUBNET_1
、CONTROL_PLANE_SUBNET_2
、CONTROL_PLANE_SUBNET_3
:集群的三个控制平面实例的子网 IDPOD_ADDRESS_CIDR_BLOCKS
:集群的 pod 的 CIDR 地址范围SERVICE_ADDRESS_CIDR_BLOCKS
:集群的服务的 CIDR 地址范围API_ROLE_ARN
:GKE Multi-Cloud API 角色的 ARNCONTROL_PLANE_PROFILE
:与集群关联的 IAM 实例的配置文件。如需详细了解如何更新 IAM 实例配置文件,请参阅更新 AWS IAM 实例配置文件。DB_KMS_KEY_ARN
:用于加密集群的 Secret 的 AWS KMS 密钥的 Amazon 资源名称 (ARN)CONFIG_KMS_KEY_ARN
:用于加密用户数据的 AWS KMS 密钥的 Amazon 资源名称 (ARN)ADMIN_USERS_LIST
(可选):要向其授予管理特权的用户的电子邮件地址列表(以英文逗号分隔),例如“kai@example.com,hao@example.com,kalani@example.com”。默认为创建集群的用户
如果存在,--tags
参数会将给定 AWS 标记应用于 GKE on AWS 管理的所有底层 AWS 资源。此示例使用控制平面节点所属集群的名称来标记它们。
除非您使用 --ssh-ec2-key-pair
标志指定 SSH 密钥对,否则将无法通过 SSH 连接到这些控制层面节点。
如需查看特定 Google Cloud 位置上所有受支持的 Kubernetes 版本,请运行以下命令。
gcloud container aws get-server-config --location GCP_LOCATION
向 Cloud Logging/Cloud Monitoring 授权
如需使 GKE on AWS 能够创建系统日志和指标并将其上传到 Google Cloud,您必须向其授权。
要授权 Kubernetes 工作负载身份 gke-system/gke-telemetry-agent
将日志写入 Google Cloud Logging,并将指标写入 Google Cloud Monitoring,请运行以下命令:
gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
--member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter
将 GOOGLE_PROJECT_ID
替换为集群的 Google Cloud 项目 ID。
此 IAM 绑定授予 Google Cloud 项目中所有集群上传日志和指标的访问权限。您只需在为项目创建第一个集群后运行此命令。
除非您的 Google Cloud 项目中至少创建了一个集群,否则添加此 IAM 绑定将失败。这是因为,其引用的工作负载身份池 (GOOGLE_PROJECT_ID.svc.id.goog
) 不会在创建集群之前进行预配。
后续步骤
- 创建节点池。
- 为 kubectl 配置集群访问权限。
- 试用快速入门以启动您的第一个工作负载。
- 阅读
gcloud container clusters create
的参考文档。 - 创建集群时遇到了问题?请查看问题排查了解详细信息。