AWS Load Balancer Controller で Helm をインストールする
このトピックでは、Kubernetes のパッケージマネージャーである Helm と eksctl
を使用して
AWS Load Balancer Controller をインストールする方法について説明します。コントローラーはデフォルトのオプションでインストールされます。注釈を使用した設定など、コントローラーの詳細については、GitHub の「AWS Load Balancer Controller ドキュメント
以下のステップでは、サンプル値
を独自の値に置き換えます。
前提条件
このチュートリアルを開始する前に、Amazon EKS クラスターの作成と管理に必要な次のツールとリソースを、インストールおよび設定しておく必要があります。
-
既存の 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 ユーザーガイドを参照してください。
-
Helm
はローカルにインストールされています。
ステップ 1: eksctl
を使用して IAM ロールを作成する
注記
AWS Load Balancer Controller の IAM ロールを AWS アカウントごとに作成するだけで済みます。AmazonEKSLoadBalancerControllerRole
が IAM コンソール
-
ユーザーに代わって AWS API を呼び出すことを許可する、 AWS Load Balancer Controller 用の IAM ポリシーをダウンロードします。
- AWS
-
**
$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy.json
- AWS GovCloud (米国)
-
**
$ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.7.2/docs/install/iam_policy_us-gov.json
$ mv iam_policy_us-gov.json iam_policy.json
-
前のステップでダウンロードしたポリシー を使用して、IAM ポリシーを作成します。
$ aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
注記
AWS Management Console でポリシーを確認すると、コンソールには [ELB] サービスに関する警告が表示されますが、[ELB v2] サービスに関する警告は表示されません。これは、ポリシー内のアクションの一部が [ELB v2] には存在するが、[ELB] には存在しないために起こります。[ELB] に関する警告は無視できます。
-
my-cluster
はご自分のクラスター名に、111122223333
はご自分のアカウント ID に置き換えた上で、コマンドを実行します。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国西部) の AWS リージョンにある場合は、arn:aws:
をarn:aws-us-gov:
に置き換えます。$ eksctl create iamserviceaccount \ --cluster=my-cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --role-name AmazonEKSLoadBalancerControllerRole \ --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --approve
ステップ 2: AWS Load Balancer Controller をインストールする
-
eks-charts
Helm チャートリポジトリを追加します。AWS はこのリポジトリを GitHub で管理しています。 $ helm repo add eks https://aws.github.io/eks-charts
-
ローカルリポジトリを更新して、最新のグラフがあることを確認します。
$ helm repo update eks
-
AWS Load Balancer Controller をインストールします。
my-cluster
の部分は、自分のクラスター名に置き換えます。次のコマンドでは、aws-load-balancer-controller
は前のステップで作成した Kubernetes サービスアカウントです。Helm チャートの設定の詳細については、GitHub の「values.yaml
」を参照してください。 $ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --set clusterName=my-cluster \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
-
Amazon EC2 インスタンスメタデータサービス (IMDS) に対するアクセスが制限されている
Amazon EC2 ノードにコントローラーをデプロイする場合、または Fargate にデプロイする場合には、次の helm
コマンドに次のフラグを追加します。-
--set region=
region-code
-
--set vpcId=
vpc-xxxxxxxx
-
-
Helm チャートと Load Balancer Controller の利用可能なバージョンを表示するには、次のコマンドを使用します。
helm search repo eks/aws-load-balancer-controller --versions
重要
デプロイされたグラフは、セキュリティに関する更新を自動的に受信しません。この更新が利用可能になったら、手動で新しいグラフにアップグレードする必要があります。アップグレードする場合は、前のコマンドで
install
をupgrade
に変更します。
-
helm install
コマンドでは、コントローラーのカスタムリソース定義 (CRDs) が自動的にインストールされます。一方、helm upgrade
コマンドでは自動的にインストールされません。helm upgrade,
コマンドを使用する場合は、CRDs を手動でインストールする必要があります。次のコマンドを実行して、CRDs をインストールします。
wget https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml kubectl apply -f crds.yaml
ステップ 3: コントローラーがインストールされていることを確認する
-
コントローラがインストールされていることを確認します。
$ 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 リソースをプロビジョニングする場合には、クラスターは特定の要件を満たしている必要があります。詳細については、Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングするおよびNetwork Load Balancer を使用して TCP および UDP トラフィックをルーティングするを参照してください。