準備 AWS 網路

如要在 AWS 上使用 GKE 設定面向外部的負載平衡器,您必須使用叢集 ID 標記 VPC 和公開子網路。如果您已為虛擬私有雲和子網路加上標記,請跳至「啟用 Ingress」。

事前準備

開始使用 GKE on AWS 前,請務必完成下列工作:

GKE on AWS 需要在含有負載平衡器端點的子網路上加上標記。GKE on AWS 會自動標記 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,可以使用 aws 指令列工具擷取子網路 ID。

    選取下列其中一個選項:

    • 公開:如要公開子網路上的服務。
    • 如要公開私人子網路上的服務,請選取「私人」。
    • 多個子網路 (如要在多個子網路上公開服務)。

    公開

     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
    

    多個子網路

    如果您為 AWSNodePools 使用多個子網路 (例如使用多個可用區),則需要個別標記子網路 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