准备 AWS 网络

若要使用 GKE on AWS 来设置面向外部的负载平衡器,您需要使用集群 ID 标记 VPC 和公共子网。如果您已标记了 VPC 和子网,请跳到启用 Ingress

准备工作

在开始使用 GKE on AWS 之前,请确保您已执行以下任务:

GKE on AWS 会要求标记包含负载平衡器端点的子网。AWS on GKE 会自动标记在 AWSCluster 资源的 spec.Networking.ServiceLoadBalancerSubnetIDs 字段中指定的所有子网。

如果您要向用户集群添加额外的子网,或者需要将标记重新应用到现有子网,请执行以下步骤。

  1. anthos-aws 目录中,使用 anthos-gke 将上下文切换到管理服务。

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. 使用 kubectl 获取集群的 AWS VPC 的 ID,并将其存储为变量。

     export VPC_ID=$(\
     env HTTPS_PROXY=http://localhost:8118 \
     kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
    
  3. 使用 echo 检查变量内容。输出类似于 vpc-12345678abcdef0

    echo $VPC_ID
    
  4. 将集群 ID 保存到环境变量。

    export CLUSTER_ID=$(\
    env HTTPS_PROXY=http://localhost:8118 \
    kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
    

    您可以使用 echo 检查变量:

    echo $CLUSTER_ID
    

    响应包含您的集群 ID。

    gke-12345678
    
  5. 如果您将 GKE on AWS 安装到专用 VPC 中,则可以使用 aws 命令行工具检索子网 ID。

    从以下选项中进行选择:

    • 公共(如果要在公共子网上公开 Service)。
    • 专用(如果要在专用子网上公开 Service)。
    • 多个子网(如果要在多个子网上公开 Service)。

    公开

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    输出内容是包含子网 ID 的对象。它类似于 subnet-1234abcdefg。您可以使用 echo 检查变量:

    echo $SUBNET_ID
    

    响应会包含您的子网 ID。

    subnet-012345678abcdef
    

    专用

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    输出内容是包含子网 ID 的对象。它类似于 subnet-1234abcdefg。您可以使用 echo 检查变量:

    echo $SUBNET_ID
    

    响应会包含您的子网 ID。

    subnet-012345678abcdef
    

    多个子网

    如果您为 AWSNodePool 使用多个子网(例如,如果您使用多个可用性区域),则需要单独标记子网 ID。

    使用 aws ec2 describe-subnets 检索子网 ID 的列表。

    如需获取所有公共子网的列表,请运行以下命令:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    如需获取所有专用子网的列表,请运行以下命令:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    响应会包含您的子网 ID。

    subnet-012345678abcdef
    subnet-abcdef123456789
    subnet-123456789abcdef
    
  6. 使用集群 ID 标记您的子网。如果您拥有多个子网,请选择“多个子网”。

    单个子网

    aws ec2 create-tags \
    --resources $SUBNET_ID \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    多个子网

    针对您的每个子网运行以下命令:

    aws ec2 create-tags \
    --resources subnet-ids \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    subnet-ids 替换为子网 ID 列表,以空格分隔。例如 subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef