AWS ネットワーキングの準備

GKE on AWS で外部に公開するロードバランサを設定するには、クラスタ ID を使用して VPC とパブリック サブネットにタグを付ける必要があります。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 を専用 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