在本主题中,您将配置一个具有公共和专用子网的现有 AWS Virtual Private Cloud (VPC),并运行 anthos-gke
以完成管理服务的安装。
准备工作
如需完成以下步骤,您需要:
AWS IAM 权限(如要求中所述)。
具有以下各项的现有 AWS VPC:
- 至少一个公共子网。
- 至少一个专用子网。
- 具有到公共子网的路由的互联网网关。
- 具有到专用子网的路由的 NAT 网关。
- 已启用 DNS 主机名。
- DHCP 选项集中没有
domain-name
自定义值。如需了解详情,请参阅问题排查。GKE on AWS 不支持默认 EC2 域名以外的值。
如需详细了解如何配置 AWS VPC,请参阅具有公共和专用子网的 VPC。
现有 VPC 的公共和专用子网 ID。例如
subnet-1234567890abcdefg
。对于 1.20 版或更低版本的集群,AWS 安全组允许从管理 GKE on AWS 安装的安全组或 IP 范围入站的 SSH(端口 22)。
对于 1.21 版或更高版本的集群,AWS 安全组允许从容纳 GKE on AWS 节点池的 VPC IP 范围出站的 Konnectivity(端口 8132)连接。
正在创建工作区
在文本编辑器中创建名为
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 securityGroupIDs: - SECURITY_GROUP_IDS googleCloud: projectID: GCP_PROJECT_ID serviceAccountKeys: managementService: MANAGEMENT_KEY_PATH connectAgent: HUB_KEY_PATH node: NODE_KEY_PATH existingVPC: subnetID: VPC_SUBNET_ID allowedSSHSecurityGroupIDs: - SSH_SECURITY_GROUP # Optional fields rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: ROOT_VOLUME_TYPE iops: ROOT_VOLUME_IOPS kmsKeyARN: ROOT_VOLUME_KEY bastionHost: subnetID: BASTION_HOST_SUBNET_ID allowedSSHCIDRBlocks: - SSH_CIDR_BLOCK rootVolume: # Optional kmsKeyARN: BASTION_VOLUME_KEY proxy: PROXY_JSON_FILE
替换以下值:
- 将 AWS_REGION 替换为要在其中运行集群的 AWS 区域。
- 将 ADMIN_AWS_IAM_ARN 替换为管理员 AWS IAM 密钥的 Amazon 资源名称。
- 将 KMS_KEY_ARN 替换为可在创建管理服务时保护管理服务的数据的 AWS KMS 密钥的 Amazon 资源名称。
- 将 DATABASE_KMS_KEY_ARN 替换为用于保护
etcd
数据库的 AWS KMS 密钥的 Amazon 资源名称。 - 将 SECURITY_GROUP_IDS 替换为允许访问管理服务虚拟机的其他安全组 ID。
- 将 GCP_PROJECT_ID 替换为托管您的 GKE Enterprise 环境的 Google Cloud 项目。
- 将 MANAGEMENT_KEY_PATH 替换为您的 Google Cloud 管理服务账号密钥的位置。
- 将 HUB_KEY_PATH 替换为您的 Google Cloud Connect 服务账号密钥的位置。
- 将 NODE_KEY_PATH 替换为您的 GKE on AWS 节点服务账号密钥的位置。
- 将 VPC_SUBNET_ID 替换为运行管理服务的子网 ID。
- 将 SSH_SECURITY_GROUP 替换为管理服务实例中允许 SSH 访问的安全组 ID 列表。
可选:如果您想要加密管理服务卷,请替换以下值:
- 将 ROOT_VOLUME_SIZE 替换为管理服务的卷大小(以 GB 为单位)。例如
10
。 - 将 ROOT_VOLUME_TYPE 替换为 EBS 卷类型。例如
gp3
。 - 将 ROOT_VOLUME_IOPS 替换为卷的每秒预配 IO 操作数 (IOPS)。仅在
volumeType
为GP3
时有效。如需了解详情,请参阅通用 SSD 卷 (gp3)。 - 将 ROOT_VOLUME_KEY 替换为用于加密管理服务实例根卷的 Amazon KMS 密钥的 Amazon 资源名称。如需了解详情,请参阅使用客户管理的 CMK 来加密卷。
可选:如果要创建堡垒主机,以使用 SSH 隧道访问 GKE on AWS 环境,请替换以下值:
- 将 BASTION_HOST_SUBNET_ID 替换为堡垒主机在其中运行的子网 ID。确保 VPC_SUBNET_ID 允许来自 BASTION_HOST_SUBNET_ID 的入站连接。
- 将 SSH_CIDR_BLOCK 替换为堡垒主机允许其入站 SSH 连接的 CIDR 地址块。例如
203.0.113.0/24
。如果要允许来自任意 IP 地址的 SSH 连接,请使用0.0.0.0/0
。 - 将 BASTION_VOLUME_KEY 替换为保护堡垒主机根卷的 AWS KMS 密钥的 Amazon 资源名称。
可选:如果要通过 HTTP 代理定向流量,请替换以下值:
- 将 PROXY_JSON_FILE 替换为代理配置文件的相对路径。 如果您不使用代理,请移除此行。
运行
anthos-gke aws management init
以创建配置文件:anthos-gke aws management init
运行
anthos-gke aws management apply
以创建集群。anthos-gke aws management apply
anthos-gke aws management apply
命令最多可能需要十分钟才能完成。anthos-gke
完成后,您的管理服务在 AWS 上运行。
使用集群名称标记您的子网
如果您是将现有 AWS 子网与 AWS on GKE 配合使用,并要创建负载平衡器,您需要使用您的管理服务名称标记您的 VPC 和子网。如果您使用 anthos-gke
创建了 VPC 或已标记您的子网,请跳过此步骤。
如需标记您的子网,请执行以下步骤:
切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。
cd anthos-aws
将您的集群 ID 导出为环境变量
$CLUSTER-ID
。 选择您的 Terraform 版本,然后运行以下命令:Terraform 0.12、0.13
export CLUSTER_ID=$(terraform output cluster_id)
Terraform 0.14.3+
export CLUSTER_ID=$(terraform output -raw cluster_id)
将您的 AWS VPC ID 导出为环境变量
$VPC_ID
。 选择您的 Terraform 版本,然后运行以下命令:Terraform 0.12、0.13
export VPC_ID=$(terraform output vpc_id)
Terraform 0.14.3+
export VPC_ID=$(terraform output -raw vpc_id)
使用
aws
CLI 工具获取您的专用子网 ID。aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
使用集群 ID 标记您的子网。针对您的每个子网运行以下命令。
aws ec2 create-tags \ --resources SUBNET_IDS \ --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
将 SUBNET_IDS 替换为子网 ID 列表,以空格分隔。例如:
subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef
。
连接到管理服务
在这一部分中,您将建立到管理服务的连接。您可以通过堡垒主机从隧道发送命令。如果您有与 AWS VPC 的直接连接,请跳至生成凭据并连接。
通过堡垒主机进行连接
如果您使用堡垒主机设置 SSH 隧道,请先在 anthos-gke.yaml
中配置主机。接着,通过执行以下步骤,创建脚本以打开隧道:
使用
terraform
生成一个脚本,用于打开指向堡垒主机的 SSH 隧道。terraform output bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh
Terraform 会创建
bastion-tunnel.sh
脚本,该脚本使用堡垒主机的 SSH 密钥 (~/.ssh/anthos-gke
)。要打开隧道,请运行
bastion-tunnel.sh
脚本。隧道会将内容从localhost:8118
转发到堡垒主机。如需打开堡垒主机的隧道,请运行以下命令:
./bastion-tunnel.sh -N
来自 SSH 隧道的消息会显示在此窗口中。准备好关闭连接后,请使用 Control+C 或关闭窗口来停止该进程。
切换到 GKE on AWS 配置所在的目录。
cd anthos-aws
生成凭据并连接
GKE on AWS 文档假定您使用 localhost
端口 8118 上的 SSH 隧道来访问集群。如果您使用其他类型的连接方式连接 VPC(例如直接互连、VPN 或其他方法),则可以从命令中移除 env HTTP_PROXY=http://localhost:8118
行。
生成
kubeconfig
以进行身份验证。使用anthos-gke
将凭据附加到存储在~/.kube/config
中的配置。anthos-gke aws management get-credentials
使用
kubectl
检查是否可以连接到管理服务。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
kubectl
将输出集群的状态。
后续步骤
- 创建用户集群。
- 将代理与 GKE on AWS 搭配使用。
- 更改
kubectl
配置以使用更少的命令行选项连接到 GKE on AWS。 - 查看 GKE on AWS 管理服务和用户集群所需的最低安全群组。