AWS Load Balancer Controller アドオンのインストール
重要
バージョン 2.5 以降では、AWS Load Balancer Controller は、type: LoadBalancer
を持つ Kubernetes サービスリソースのデフォルトコントローラーとなり、サービスごとに AWS Network Load Balancer (NLB) を作成します。これは、サービスの変更ウェブフックを変化することで実行され、これにより type:
LoadBalancer
の新しいサービスの spec.loadBalancerClass
フィールドが service.k8s.aws/nlb
に設定されます。Helm チャートの値 enableServiceMutatorWebhook
を false
に設定すると、この機能をオフにして、レガシークラウドプロバイダー
AWS Load Balancer Controller によって Kubernetes クラスター向けの AWS Elastic Load Balancer が管理されます。コントローラは、以下のリソースをプロビジョニングします。
- Kubernetes
Ingress
-
Kubernetes
Ingress
を作成すると、AWS Load Balancer Controller は AWS Application Load Balancer (ALB) を作成します。 LoadBalancer
タイプの Kubernetes サービス-
タイプ
LoadBalancer
の Kubernetes サービスを作成すると、AWS Load Balancer Controller は AWS Network Load Balancer (NLB) を作成します。以前は、インスタンスターゲットには Kubernetes network load balancer が使用されていましたが、IP ターゲットには AWS Load Balancer Controller が使用されていました。AWS Load Balancer Controller バージョン2.3.0
以降では、いずれかのターゲットタイプを使用して NLBs を作成できます。NLB ターゲットタイプの詳細については、Network Load Balancer のユーザーガイドの 「ターゲットタイプ」を参照してください。
AWS Load Balancer Controller は、以前、AWS ALB Ingress Controller と呼ばれていたものです。これは、GitHub で管理される オープンソースのプロジェクト
このトピックでは、デフォルトのオプションを使用してコントローラをインストールする方法について説明します。GitHub でコントローラーの完全な ドキュメント
前提条件
-
既存の Amazon EKS クラスター。デプロイするには、「Amazon EKS の使用開始」を参照してください。
-
クラスター用の既存 AWS Identity and Access Management IAM OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスター用の IAM OIDC プロバイダーの作成」を参照してください。
-
Amazon VPC CNI plugin for Kubernetes、
kube-proxy
および CoreDNS アドオンが、サービスアカウントトークンに記載されている最小のバージョンであることを確認してください。 -
AWS Elastic Load Balancing に関する知識。詳細については、Elastic Load Balancing ユーザーガイドを参照してください。
Amazon EKS クラスターに AWS Load Balancer Controller デプロイするには
以下のステップでは、
を独自の値に置き換えます。example
values
-
IAM ポリシーを作成します。
-
ユーザーに代わって AWS API を呼び出すことを許可する、AWS Load Balancer Controller 用の IAM ポリシーをダウンロードします。
-
AWS GovCloud (米国東部) あるいは AWS GovCloud (米国東部) の AWS リージョン
$
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy_us-gov.json
-
その他すべての AWS リージョン
$
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
-
-
前のステップでダウンロードしたポリシー を使用して、IAM ポリシーを作成します。
iam_policy_us-gov.json
をダウンロードしている場合は、コマンドを実行する前にiam_policy.json
をiam_policy_us-gov.json
に変更します。$
aws iam create-policy \ --policy-name
AWSLoadBalancerControllerIAMPolicy
\ --policy-document file://iam_policy.json注記
AWS Management Console でポリシーを確認すると、コンソールには [ELB] サービスに関する警告が表示されますが、[ELB v2] サービスに関する警告は表示されません。これは、ポリシー内のアクションの一部が [ELB v2] には存在するが、[ELB] には存在しないために起こります。[ELB] に関する警告は無視できます。
-
-
IAM ロールを作成します。AWS Load Balancer Controller 用の
kube-system
名前空間にaws-load-balancer-controller
という名前のKubernetes サービスアカウントを作成し、Kubernetes サービスアカウントに IAM ロールの名前をアノテーションします。IAM ロールと Kubernetes サービスアカウントを作成するには、
eksctl
または AWS CLI とkubectl
を使用します。 (オプション) Kubernetes サービスアカウントで使用されている AWS Security Token Service エンドポイントタイプを設定します。詳細については、「サービスアカウントの AWS Security Token Service エンドポイントの設定」を参照してください。
現在、Kubernetes 用の AWS ALB Ingress Controller がインストールされていない場合、または現在 Helm とともに AWS Load Balancer Controller の 0.1. バージョンがインストールされていない場合は、次のステップにスキップしてください。
AWS ALB Ingress Controller、あるいは AWS Load Balancer Controller のバージョン
0.1.x
(Helm を使用してインストールした場合のみ) をアンインストールします。この手順は、元々インストールしてあるツールを使用して実行します。AWS Load Balancer Controller は、AWS ALB Ingress Controller for Kubernetes の機能を置き換えます。-
Helm V3 以降を使用して、または Kubernetes マニフェストを適用して AWS Load Balancer Controller をインストールします。Fargate でコントローラーをデプロイする場合は、Helm プロシージャを使用します。Helm プロシージャは、自己署名証明書を生成するため、
cert-manager
に依存しません。 -
コントローラがインストールされていることを確認します。
$
kubectl get deployment -n kube-system aws-load-balancer-controller
出力例は次のとおりです。
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
Helm を使用してデプロイした場合は、前の出力を受け取ります。Kubernetes マニフェストを使用してデプロイした場合、レプリカは 1 つのみとなります。
-
コントローラーを使用して AWS リソースをプロビジョニングする場合には、クラスターは特定の要件を満たしている必要があります。詳細については、Amazon EKS でのアプリケーション負荷分散 および Amazon EKS でのネットワーク負荷分散 を参照してください。