管理服务可创建、更新和删除 GKE on AWS 集群。本主题介绍如何在专用 AWS Virtual Private Cloud (VPC) 内创建管理服务。如果您已有 VPC,请改为参阅与现有基础架构集成。
准备工作
在开始使用 GKE on AWS 之前,请确保您已执行以下任务:
- 完成前提条件。
-
使用 Google Cloud CLI 进行身份验证。
gcloud auth login && \ gcloud auth application-default login
您需要的值
如需完成本主题,您需要具备前提条件中的以下各项:
- KMS 密钥 ARN 或别名
- Google Cloud 服务账号密钥
- Google Cloud 项目
aws
、terraform
和anthos-gke
命令行工具已安装和配置。- GKE on AWS 在其中创建管理集群的 AWS 地区和可用性区域。
配置管理服务
您可以使用 YAML 文件配置 GKE on AWS 管理服务。该文件类似于 Kubernetes 自定义资源配置,但它不是资源的表示法。
在安装并配置
aws
、terraform
和anthos-gke
命令行工具的计算机上打开终端。为 GKE on AWS 配置创建一个空目录,然后切换到该目录。 GKE on AWS 文档使用
anthos-aws
作为示例配置目录。mkdir anthos-aws cd anthos-aws
在文本编辑器中创建名为
anthos-gke.yaml
的文件。将以下内容粘贴到此文件中。apiVersion: multicloud.cluster.gke.io/v1 kind: AWSManagementService metadata: name: management spec: version: aws-1.14.1-gke.0 region: AWS_REGION authentication: awsIAM: adminIdentityARNs: - ADMIN_AWS_IAM_ARN kmsKeyARN: KMS_KEY_ARN databaseEncryption: kmsKeyARN: DATABASE_KMS_KEY_ARN googleCloud: projectID: GCP_PROJECT_ID serviceAccountKeys: managementService: MANAGEMENT_KEY_PATH connectAgent: HUB_KEY_PATH node: NODE_KEY_PATH dedicatedVPC: vpcCIDRBlock: VPC_CIDR_BLOCK availabilityZones: - ZONE_1 - ZONE_2 - ZONE_3 privateSubnetCIDRBlocks: - PRIVATE_CIDR_BLOCK_1 - PRIVATE_CIDR_BLOCK_2 - PRIVATE_CIDR_BLOCK_3 publicSubnetCIDRBlocks: - PUBLIC_CIDR_BLOCK_1 - PUBLIC_CIDR_BLOCK_2 - PUBLIC_CIDR_BLOCK_3 # Optional bastionHost: allowedSSHCIDRBlocks: - SSH_CIDR_BLOCK proxy: PROXY_JSON_FILE # optional
替换以下值:
将 AWS_REGION 替换为要在其中运行集群的 AWS 区域。
将 ADMIN_AWS_IAM_ARN 替换为用户的 Amazon 资源名称,该用户具有 AWS IAM 权限,可创建管理服务。如需获取对
aws
工具进行身份验证的用户的 ARN,请运行aws sts get-caller-identity
。将 KMS_KEY_ARN 替换为 AWS KMS 密钥的 Amazon 资源名称或可在创建过程保护管理服务数据的 KMS 密钥别名。例如:
arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
。如果您没有 ARN,请运行aws kms list-keys
以检索 ARN 列表。将 DATABASE_KMS_KEY_ARN 替换为具有 AWS KMS 密钥 的 Amazon 资源名称或可保护管理服务的
etcd
数据库(例如arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
)的别名。将 GCP_PROJECT_ID 替换为托管您的 GKE Enterprise 环境的 Google Cloud 项目 ID。
将 MANAGEMENT_KEY_PATH 替换为您的 Google Cloud 管理服务账号密钥的位置。
将 HUB_KEY_PATH 替换为您的 Google Cloud Connect 服务账号密钥的位置。
将 NODE_KEY_PATH 替换为您的 GKE on AWS 节点服务账号密钥的位置。
将 VPC_CIDR_BLOCK 替换为
anthos-gke
创建的 AWS VPC IP 地址的总 CIDR 范围。例如10.0.0.0/16
。如需了解详情,请参阅 AWS 文档中的 VPC 和子网基础知识。将 ZONE_1、ZONE_2 和 ZONE_3 替换为要创建节点和控制平面的 AWS EC2 可用区。GKE on AWS 会在这些区域中创建子网。当您使用
anthos-gke
为用户集群生成配置时,GKE on AWS 会在这些可用区中创建控制平面和节点池(例如us-east-1a
)。
如果您只想使用anthos-gke
仅在一个地区中创建用户集群,则可以移除 ZONE_2 和 ZONE_3。将 PRIVATE_CIDR_BLOCK_1、PRIVATE_CIDR_BLOCK_2 和 PRIVATE_CIDR_BLOCK_3 替换为专用子网的 CIDR 地址块。GKE on AWS 组件(如管理服务)在专用子网中运行。此子网必须位于
vpcCIDRBlock
中指定的 VPC 的 CIDR 范围内。您需要为每个可用地区创建一个子网 - 例如10.0.1.0/24
。将 PUBLIC_CIDR_BLOCK_1、PUBLIC_CIDR_BLOCK_2 和 PUBLIC_CIDR_BLOCK_3 替换为您的公共子网的 CIDR 地址块。每个可用性区域都需要一个子网。公共子网向 AWS 网络 ACL 和安全组中指定的安全组和地址范围公开负载均衡器等集群服务,例如
10.0.100.0/24
。将 SSH_CIDR_BLOCK 替换为允许通过 SSH 连接到堡垒主机的 CIDR 地址块,例如
203.0.113.0/24
。如果要允许来自任意 IP 地址的 SSH 连接,请使用0.0.0.0/0
。(可选)将 PROXY_JSON_FILE 替换为代理配置文件的相对路径。如果您不使用代理,请删除此行。
运行
anthos-gke aws management init
以生成具有其他配置的anthos-gke.status.yaml
文件。init
命令还会验证anthos-gke.yaml
文件中的AWSManagementService
对象。anthos-gke aws management init
运行
anthos-gke aws management apply
以在 AWS 上创建管理服务。anthos-gke aws management apply
anthos-gke aws management apply
命令最多可能需要十分钟才能完成。命令完成后,您的管理服务会在 AWS 上运行。
可选字段
上面的 anthos-gke.yaml
文件显示了大多数客户所需的一组典型的字段。anthos-gke.yaml
中的配置还支持许多可选字段。其中包括:
- spec.bootstrapS3Bucket,用于指定 GKE on AWS 配置数据的 AWS S3 存储桶
- spec.tags,用于标记与集群相关的 AWS 资源
- spec.securityGroupIDs,用于为管理集群分配其他安全组 ID
- spec.*Volume 及其子字段 volumeType、iops 和 kmsKeyARN,用于调整 EBS 卷参数
- spec.terraform.stateGCSBucket,用于为 Terraform 配置数据指定 Google Cloud 服务存储桶
如需详细了解 anthos-gke.yaml
支持的所有字段,请参阅 AWS Management Service 参考文档。
连接到管理服务
接下来,使用 anthos-gke
连接到 GKE on AWS 管理服务并进行身份验证。
使用默认设置创建管理服务时,控制层面具有专用 IP 地址,该地址无法从 AWS VPC 外部访问。您可以通过以下三种方法中的任何一种访问管理服务:
- 通过 Amazon 的 AWS Direct Connect 服务
- 通过堡垒主机,它代理互联网与 GKE on AWS 子网之间的连接
- 通过 VPN
如果您在专用 VPC 中创建管理服务,则 GKE on AWS 会在公共子网中自动创建一个堡垒主机。如果您要通过 VPN 或 AWS Direct Connect 连接到管理服务,则不需要此堡垒主机。否则,要通过堡垒主机连接到管理服务,请执行以下步骤:
使用
terraform
工具生成用于打开到堡垒主机的 SSH 隧道的脚本。选择您的 Terraform 版本,然后运行以下命令:Terraform 0.12、0.13
terraform output bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform 0.14.3+
terraform output -raw bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform 会创建
bastion-tunnel.sh
脚本,该脚本引用~/.ssh/anthos-gke
中的堡垒主机的 SSH 密钥。要打开隧道,请运行
bastion-tunnel.sh
脚本。隧道会将内容从localhost:8118
转发到堡垒主机。如需打开堡垒主机的隧道,请运行以下命令:
./bastion-tunnel.sh -N -4
来自 SSH 隧道的消息会显示在此窗口中。准备好关闭连接后,请使用 Control+C 或关闭窗口来停止该进程。
打开新终端,并将目录切换到您的 GKE on AWS 配置所在的目录。
生成
kubeconfig
以进行身份验证。使用anthos-gke
将凭据附加到存储在~/.kube/config
中的配置。anthos-gke aws management get-credentials
使用
kubectl
检查是否可以连接到管理服务。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
输出包括管理服务 API 服务器的网址。
后续步骤
- 创建用户集群。
- 将代理与 GKE on AWS 搭配使用。
- 更改
kubectl
配置以使用更少的命令行选项连接到 GKE on AWS。