Amazon EKS の Amazon EC2 ノードグループで AWS Load Balancer Controller を使用して Application Load Balancer を設定するにはどうすればよいですか?

最終更新日: 2021 年 3 月 15 日

Amazon Elastic Kubernetes Service (Amazon EKS) の Amazon Elastic Compute Cloud (Amazon EC2) ノードグループで、AWS Load Balancer Controller を使用して Application Load Balancer (ALB) をセットアップしたいと考えています。

簡単な説明

次の手順は、Amazon EKS の Amazon EC2 ノードグループに AWS Load Balancer Controller をデプロイする方法を示しています。Network Load Balancer を作成する場合は、AWS Load Balancer Controller を参照してください。

AWS Fargate に AWS Load Balancer Controller をデプロイするには、Fargate の Amazon EKS クラスターに AWS Load Balancer Controller をセットアップする方法を教えてくださいを参照してください。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください

クラスターの OIDC ID プロバイダーの作成

クラスターの OpenID Connect (OIDC) ID プロバイダーを作成して、 サービスアカウントの AWS Identity and Access Management (IAM) ロールで使用するには、eksctl または AWS マネジメントコンソールのいすれかを使用します。

AWSL CLI を使用して、クラスターの OIDC ID プロバイダーを作成することもできます。例:

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \
  --query "cluster.identity.oidc.issuer" --region region-name --output text)
aws iam create-open-id-connect-provider \
  --url ${ISSUER_URL} \
  --thumbprint-list ca-thumbprint \
  --client-id-list sts.amazonaws.com \
  --region region-name

注意: cluster-name をクラスター名、 region-name を AWS リージョン、ca-thumbprint をルート CA 証明書のサムプリントに置き換えます。クラスターが oidc.eks.region-name.amazonaws.com で使用するルート CA 証明書のサムプリントを取得できます。

AWS Load Balancer Controller の IAM ポリシーを作成する

Amazon EKS ポリシーを作成して、AWS Load Balancer Controller がユーザーに代わって AWS API を呼び出すことを許可します。AWS API へのアクセスを付与するときは、サービスアカウントに AWS IAM ロールを使用することをお勧めします。

1.    AWS Load Balancer Controller の IAM ポリシードキュメントを AWS GitHub からダウンロードするには、リージョンに応じて、次のいずれかのコマンドを実行します。

中国リージョン以外のすべてのリージョン:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

- または -

中国 (北京と寧夏) リージョン:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json

2.    ワーカーノードインスタンスプロファイル用に AWSLoadBalancerControllerIAMPolicy という名前の IAM ポリシーを作成するには、次のコマンドを実行します。

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam-policy.json

3.    ステップ 2 の出力で返されるポリシーの Amazon リソースネーム (ARN) を書き留めます。

4.    既存の IAM ロールを使用するか、AWS Load Balancer Controller の新しい IAM ロールを作成します。

ヒント: eksctl を使用して IAM ロールを作成する場合は、--attach-policy-arn パラメータを IAM ポリシー AWSLoadBalancerControllerIAMPolicy の ARN とともに使用します。

5.    前に特定した IAM ロールに AWSLoadBalancerControllerIAMPolicy をアタッチするには、次のコマンドを実行します。

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name role-name

注意: 111122223333 を AWS アカウント ID に role-name を IAM ロール名に置き換えます。

AWS Load Balancer Controller のデプロイ

1.    サブネットに関連付けられているロードバランサーに、必要なタグがあることを確認します。

2.    証明書の設定を Webhook に挿入できるように、 cert-manager をインストールします。

Kubernetes 1.16 以降の場合:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml

Kubernetes 1.15 以前の場合:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml

注: $VERSION は、デプロイする cert-managerバージョン (Jetstack GitHub サイトから取得) で置き換えます。

3.    AWS GitHub から AWS Load Balancer Controller 用にダウンロードされたマニフェストファイルで、次のコマンドを実行します。

curl -o ingress-controller.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/install/v2_1_0_full.yaml

注: $VERSION は、デプロイする AWS Load Balancer Controller の バージョン (Kubernetes SIGs GitHub サイトから取得) に置き換えます。

4.    クラスターの cluster-name を編集します。以下に例を示します。

spec:
    containers:
    - args:
        - --cluster-name=your-cluster-name # edit the cluster name
        - --ingress-class=alb

5.    ファイルの ServiceAccount セクションだけを更新します。以下に例を示します。

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  annotations:                                                                        # Add the annotations line
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
  name: aws-load-balancer-controller
  namespace: kube-system

注意: 111122223333 を AWS アカウント ID に role-name を IAM ロール名に置き換えます。

6.    AWS Load Balancer Controller をデプロイするには、以下のコマンドを実行します。

kubectl apply -f ingress-controller.yaml

AWS Load Balancer Controller をテストするサンプルアプリケーションをデプロイする

サンプルアプリケーションをデプロイして、AWS Load Balancer Controller が Ingress オブジェクトから Application Load Balancer を作成することを検証します。

1.    2048 というゲームをサンプルアプリケーションとしてデプロイするには、次のコマンドを実行します。

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

注: $VERSION は、デプロイする AWS Load Balancer Controller の バージョン (Kubernetes SIGs GitHub サイトから取得) に置き換えます。

2.    Ingress リソースが作成されたことを確認するには、数分待ってから、次のコマンドを実行します。

kubectl get ingress/ingress-2048 -n game-2048

次のような出力が表示されます。

NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGE
ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s

数分経過しても Ingress が作成されない場合は、次のコマンドを実行して AWS Load Balancer Controller のログを表示します。

kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller

注意: AWS Load Balancer Controller ログには、デプロイに関する問題のトラブルシューティングに役立つエラーメッセージが含まれていることがあります。

3.    サンプルアプリケーションを表示するには、ウェブブラウザを開き、手順 2 の出力から URL アドレスに移動します。

4.    サンプルアプリケーションをクリーンアップするには、次のコマンドを実行します。

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

注: $VERSION は、デプロイする AWS Load Balancer Controller の バージョン (Kubernetes SIGs GitHub サイトから取得) に置き換えます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?