与现有基础架构集成

在本主题中,您将配置一个具有公共和专用子网的现有 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)连接。

正在创建工作区

  1. 在文本编辑器中创建名为 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)。仅在 volumeTypeGP3 时有效。如需了解详情,请参阅通用 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 替换为代理配置文件的相对路径。 如果您不使用代理,请移除此行。
  2. 运行 anthos-gke aws management init 以创建配置文件:

    anthos-gke aws management init
    
  3. 运行 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 或已标记您的子网,请跳过此步骤。

如需标记您的子网,请执行以下步骤:

  1. 切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。

    cd anthos-aws

  2. 将您的集群 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)
    
  3. 将您的 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)
    
  4. 使用 aws CLI 工具获取您的专用子网 ID。

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. 使用集群 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 中配置主机。接着,通过执行以下步骤,创建脚本以打开隧道:

  1. 使用 terraform 生成一个脚本,用于打开指向堡垒主机的 SSH 隧道。

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    Terraform 会创建 bastion-tunnel.sh 脚本,该脚本使用堡垒主机的 SSH 密钥 (~/.ssh/anthos-gke)。

  2. 要打开隧道,请运行 bastion-tunnel.sh 脚本。隧道会将内容从 localhost:8118 转发到堡垒主机。

    如需打开堡垒主机的隧道,请运行以下命令:

    ./bastion-tunnel.sh -N
    

    来自 SSH 隧道的消息会显示在此窗口中。准备好关闭连接后,请使用 Control+C 或关闭窗口来停止该进程。

  3. 切换到 GKE on AWS 配置所在的目录。

    cd anthos-aws

生成凭据并连接

GKE on AWS 文档假定您使用 localhost 端口 8118 上的 SSH 隧道来访问集群。如果您使用其他类型的连接方式连接 VPC(例如直接互连、VPN 或其他方法),则可以从命令中移除 env HTTP_PROXY=http://localhost:8118 行。

  1. 生成 kubeconfig 以进行身份验证。使用 anthos-gke 将凭据附加到存储在 ~/.kube/config 中的配置。

    anthos-gke aws management get-credentials
    
  2. 使用 kubectl 检查是否可以连接到管理服务。

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    kubectl 将输出集群的状态。

后续步骤