GKE on AWS で外部に公開するロードバランサを設定するには、クラスタ ID を使用して VPC とパブリック サブネットにタグを付ける必要があります。VPC とサブネットにタグが設定されている場合は、Ingress の有効化に進みます。
始める前に
GKE on AWS の使用を始める前に、次のことを確認してください。
- 前提条件を満たしている。
GKE on AWS では、ロードバランサ エンドポイントを含むサブネット上にタグが必要です。GKE on AWS は、AWSCluster
リソースの spec.Networking.ServiceLoadBalancerSubnetIDs
フィールドで指定されたすべてのサブネットに自動的にタグを付けます。
ユーザー クラスタにサブネットを追加する場合、または既存のサブネットにタグを再適用する必要がある場合は、次の手順に沿って操作します。
anthos-aws
ディレクトリからanthos-gke
を使用して、コンテキストを管理サービスに切り替えます。cd anthos-aws anthos-gke aws management get-credentials
kubectl
を使用してクラスタの AWS VPC の ID を取得し、これを変数として保存します。export VPC_ID=$(\ env HTTPS_PROXY=http://localhost:8118 \ kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
echo
を使用して変数の内容を確認します。出力はvpc-12345678abcdef0
のようになります。echo $VPC_ID
クラスタ 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
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
サブネットにクラスタ 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