Amazon Elastic Kubernetes Service (Amazon EKS) の Application Load Balancer (ALB) で使用されるサブネットを自動的に検出したいと考えています。
簡単な説明
AWS サブネットにタグを付けて、AWS Application Load Balancer によってアプリケーションロードバランサーに使用されるサブネットを自動検出することができます。
解決方法
1. Amazon EKS クラスターに AWS Load Balancer Controller をデプロイします。
2. AWS Load Balancer Controller がインストールされていることを確認します。
kubectl get deployment -n kube-system aws-load-balancer-controller
注: デプロイメントが別の名前空間にデプロイされている場合は、-n kube-system を適切な名前空間に置き換えます。
3. 次のアノテーションを使用して、クラスターに Kubernetes Ingress リソースを作成します。
annotations:
kubernetes.io/ingress.class: alb
注: AWS Load Balancer Controller はロードバランサーを作成します。Ingress リソースは、HTTP または HTTPS トラフィックをクラスター内の異なるポッドにルーティングするように Application Load Balancer を設定します。
4. [internal] (内部) または [internet-facing] (インターネット向け) アノテーションを追加して、Ingress でロードバランサーを作成する場所を指定します。
alb.ingress.kubernetes.io/scheme: internal
alb.ingress.kubernetes.io/scheme: internet-facing
注: 内部ロードバランサーを作成する場合は [internal] (内部) を選択し、パブリックロードバランサーを作成するには [internet-facing] (インターネット向け) を選択します。
5. タグを使用して、Application Load Balancer の入力コントローラーが自動検出を使用してロードバランサーを作成できるようにします。例:
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
注: 手動の「alb.ingress.kubernetes.io/subnets」アノテーションの代わりに、自動検出用のタグを使用できます。
内部ロードバランサーを使用するクラスターの場合の、正しいタグを持つサブネットの例:
kubernetes.io/role/internal-elb 1
パブリックロードバランサーを使用するクラスターの場合の、正しいタグを持つサブネットの例:
kubernetes.io/role/elb 1
注: クラスターバージョン 1.18 以前の場合、Amazon EKS はクラスターの作成時に渡されたすべてのサブネットに次のタグを追加します。タグはバージョン 1.19 クラスターには追加されません。タグを使用していて、以前のバージョンからクラスターバージョン 1.19 に更新した場合は、タグを再度追加する必要はありません。タグはサブネットに残ります。次のタグを使用して、Application Load Balancer のプロビジョニング先を制御できます。Application Load Balancer を自動的にプロビジョニングするために必要なサブネットタグに加えて、このタグを使用します。
kubernetes.io/cluster/$CLUSTER_NAME shared
重要: AWS Load Balancer Controller のワークフローでは、サブネットタグの値が**「 」** (空の文字列) と「1」であるかを確認します。プライベートサブネットの場合は、「kubernetes.io/role/internal-elb」タグの値を空の文字列または「 1 」に設定します。パブリックサブネットの場合は、「kubernetes.io/role/elb」タグの値を空の文字列または「1」に設定します。これらのタグを使用すると、Application Load Balancer の Amazon EKS VPC サブネットからサブネットを自動検出できます。
6. Amazon EKS VPC サブネットに正しいタグが設定されていることを確認します。
aws ec2 describe-subnets --subnet-ids your-subnet-xxxxxxxxxxxxxxxxx
7. サンプルアプリケーションをデプロイして、AWS Load Balancer Controller が Ingress オブジェクトから Application Load Balancer を作成することを検証します。
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml
8. Ingress リソースが作成され、Application Load Balancer に関連付けられていることを確認します。
kubectl get ingress/2048-ingress -n 2048-game
Ingress オブジェクトおよびサブネットで定義したアノテーション ( alb.ingress.kubernetes.io/scheme: ) に応じて、内部またはインターネット向けロードバランサーが作成されます。