在本主题中,您将配置一个具有公共和专用子网的现有 AWS Virtual Private Cloud (VPC),并运行 anthos-gke
以完成管理服务的安装。
准备工作
如需完成以下步骤,您需要:
AWS IAM 权限(如要求中所述)。
具有以下各项的现有 AWS VPC:
- 至少一个公共子网。
- 至少一个专用子网。
- 具有到公共子网的路由的互联网网关。
- 具有到专用子网的路由的 NAT 网关。
- 已启用 DNS 主机名。
- DHCP 选项集中没有
domain-name
自定义值。如需了解详情,请参阅问题排查。Anthos clusters on AWS 不支持默认 EC2 域名之外的值。
如需详细了解如何配置 AWS VPC,请参阅具有公共和专用子网的 VPC。
现有 VPC 的公共和专用子网 ID。例如
subnet-1234567890abcdefg
。对于 1.20 或更低版本的集群,AWS 安全组允许从安全组或 IP 范围入站的 SSH(端口 22)连接,您将在此安全组或 IP 范围内管理您的 Anthos clusters on AWS 安装。
对于 1.21 或更高版本的集群,AWS 安全组允许从 VPC IP 范围出站的 Konnectivity(端口 8132)连接,该 IP 范围容纳 Anthos clusters on 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 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 替换为托管您的 Anthos 环境的 Google Cloud 项目。
- 将 MANAGEMENT_KEY_PATH 替换为您的 Google Cloud 管理服务帐号密钥的位置。
- 将 HUB_KEY_PATH 替换为您的 Google Cloud Connect 服务帐号密钥的位置。
- 将 NODE_KEY_PATH 替换为您的 Anthos clusters 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 隧道访问 Anthos clusters 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 子网与 Anthos clusters on AWS 配合使用,并要创建负载平衡器,您需要使用您的管理服务名称标记您的 VPC 和子网。如果您使用 anthos-gke
创建了 VPC 或已标记您的子网,请跳过此步骤。
如需标记您的子网,请执行以下步骤:
切换到您的 Anthos clusters 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 或关闭窗口来停止该进程。
切换到您的 Anthos clusters on AWS 配置所在的目录。
cd anthos-aws
生成凭据并连接
Anthos clusters 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
将输出集群的状态。
后续步骤
- 创建用户集群。
- 将代理与 Anthos clusters on AWS 搭配使用。
- 更改
kubectl
配置以使用更少的命令行选项连接到 Anthos clusters on AWS。 - 查看 Anthos clusters on AWS 管理服务和用户集群所需的最低安全群组。