AWS Load Balancer コントローラー - Amazon EKS

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

AWS Load Balancer コントローラー

AWS Load Balancer コントローラーは、Kubernetes クラスターの AWS Elastic Load Balancer を管理します。コントローラーは、以下をプロビジョニングします。

  • Kubernetes を作成するときの AWS Application Load Balancer (IngressALB)。

  • 1.18 以降のAWSクラスターで IP ターゲットNetwork Load Balancerを使用して タイプの Kubernetes を作成するときServiceLoadBalancer Amazon EKS (NLB)。インスタンスターゲットへのネットワークトラフィックを負荷分散する場合は、インツリー Kubernetes ロードバランサーコントローラーを使用し、このコントローラーをインストールする必要はありません。NLB ターゲットタイプの詳細については、の「ターゲットタイプ」を参照してくださいNetwork Load Balancer 用ユーザーガイド。

コントローラーの名前は、以前は AWS ALB Ingress Controller でした。これはGitHub で管理されるオープンソースプロジェクトです。このトピックでは、デフォルトのオプションを使用してコントローラーをインストールする方法について説明します。GitHub でコントローラーの完全なドキュメントを表示できます。コントローラーをデプロイする前に、「」および「」の前提条件でのアプリケーションの負荷分散 Amazon EKSと考慮事項を確認することをお勧めしますにおけるネットワーク負荷分散 Amazon EKS。これらのトピックには、コントローラーがAWSリソースをプロビジョニングする必要があるサンプルアプリケーションをデプロイするステップも含まれています。

Prerequisite

既存の クラスター。既存のクラスターがない場合は、「」 の使用を開始するAmazon EKSを参照してください。

AWS Load Balancer コントローラーを Amazon EKS クラスターにデプロイするには

次の手順では、 <example values> ( を含む<>) を独自の値に置き換えます。

  1. クラスターに既存の IAM OIDC プロバイダーがあるかどうかを確認します。

    クラスターの OIDC プロバイダー URL を表示します。

    aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text

    出力例:

    https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

    アカウントの IAM OIDC プロバイダーを一覧表示します。置換 <EXAMPLED539D4633E53DE1B716D3041E> ( を含む <>) を、前のコマンドから返された値に置き換えます。

    aws iam list-open-id-connect-providers | grep <EXAMPLED539D4633E53DE1B716D3041E>

    出力例

    "Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"

    前のコマンドから出力が返された場合は、クラスターのプロバイダーがすでに存在しています。出力が返されない場合はIAM、OIDC プロバイダーを作成する必要があります。

    IAM OIDC プロバイダーを作成するにはクラスターの IAM OIDC プロバイダーを作成する、「」を参照してください。

  2. ユーザーに代わって IAM APIs を呼び出すことを許可する AWS Load Balancer Controller の AWS ポリシーをダウンロードします。GitHub でポリシードキュメントを表示することもできます。

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.3/docs/install/iam_policy.json
  3. 前のステップでダウンロードしたIAMポリシーを使用して ポリシーを作成します。

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

    返されるポリシー ARN を書き留めておきます。

  4. IAM ロールを作成し、 aws-load-balancer-controller または と を使用して、 kube-system Load Load Balancer Controller AWS の名前空間eksctlに という名前の Kubernetes サービスアカウントに注釈を付けますAWS マネジメントコンソールkubectl

    eksctl

    次の コマンドを使用します。

    eksctl create iamserviceaccount \ --cluster=my-cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve
    AWS マネジメントコンソール

    AWS マネジメントコンソール および の使用 kubectl

    1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

    2. ナビゲーションペインで [ロール]、[ロールの作成] の順に選択します。

    3. [Select type of trusted entity (信頼されたエンティティの種類を選択)] セクションで、[Web identity (ウェブ ID)] を選択します。

    4. [Choose a web identity provider (ウェブ ID プロバイダーを選択)] セクションで、次の操作を行います。

      1. [Identity provider (ID プロバイダー)] で、クラスターの URL を選択します。

      2. [Audience (対象者)] で [sts.amazonaws.com] を選択します。

    5. [Next: Permissions (次へ: アクセス許可)] を選択します。

    6. [ポリシーのアタッチ] セクションで、 AWSLoadBalancerControllerIAMPolicy サービスアカウントに使用するステップ 3 で作成した ポリシー。

    7. [次へ: タグ] を選択します。

    8. [Add tags (optional) (タグの追加 (オプション))] 画面で、アカウントのタグを追加できます。[次へ: 確認] を選択します。

    9. [ロール名] に、ロールの名前を入力します。または AmazonEKSLoadBalancerControllerRole, 続いて、[ロールの作成] を選択します。

    10. ロールが作成されたら、コンソールでロールを選択して編集用に開きます。

    11. [Trust relationships] タブを選択し、続いて [Edit trust relationship] を選択します。

    12. 次のような行を見つけます。

      "oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

      次の行のように行を変更します。置換 <EXAMPLED539D4633E53DE1B716D3041E> ( を含む <>) を選択し、クラスターの OIDC プロバイダー ID に置き換えます。<region-code> クラスターがある リージョンコードの 。

      "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B716D3041E>:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
    13. [Update Trust Policy (信頼ポリシーの更新)] を選択して終了します。

    14. 後のステップで使用するために、ロールの ARN を書き留めます。

    15. 以下の内容を という名前のファイルに保存します。aws-load-balancer-controller-service-account.yaml.

      apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<AWS_ACCOUNT_ID>:role/AmazonEKSLoadBalancerControllerRole
    16. クラスターでサービスアカウントを作成します。

      kubectl apply -f aws-load-balancer-controller-service-account.yaml
  5. 現在 AWS ALB Ingress Controller for Kubernetes がインストールされている場合は、アンインストールします。AWS Load Balancer コントローラーは、Kubernetes 用の AWS ALB Ingress Controller の機能を置き換えます。

    1. コントローラーが現在インストールされているかどうかを確認します。

      kubectl get deployment -n kube-system alb-ingress-controller

      出力 (インストールされている場合)。ステップ 5b に進みます。

      NAME READY UP-TO-DATE AVAILABLE AGE alb-ingress-controller 1/1 1 1 122d

      出力 (インストールされていない場合)。インストールされていない場合は、ステップ 6 に進みます。

      Error from server (NotFound): deployments.apps "alb-ingress-controller" not found
    2. コントローラーがインストール済みである場合は、次のコマンドを入力して削除します。

      kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yaml kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml
    3. AWS ALB Ingress Controller for Kubernetes を削除した場合は、ステップ 4 で作成したIAMロールに次のIAMポリシーを追加します。このポリシーは、ALB Ingress Controller for Kubernetes によって作成されたリソースへのAWSLoad Balancer コントローラーアクセスを許可します。

      1. IAM ポリシーをダウンロードします。ポリシーhttps://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_v1_to_v2_additional.jsonを表示することもできます。

        curl -o iam_policy_v1_to_v2_additional.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.3/docs/install/iam_policy_v1_to_v2_additional.json
      2. IAM ポリシーを作成し、返された ARN を書き留めます。

        aws iam create-policy \ --policy-name AWSLoadBalancerControllerAdditionalIAMPolicy \ --policy-document file://iam_policy_v1_to_v2_additional.json
      3. ステップ 4 で作成したIAMロールにIAMポリシーをアタッチします。<your-role-name> ( を含む<>) をロールの名前に置き換えます。を使用してロールを作成した場合eksctl、作成されたロール名を見つけるには、 AWS CloudFormation コンソールを開き、[eksctl-<your-cluster-name>-addon-iamserviceaccount-kube-system-aws-load-balancer-controller スタック。[Resources (リソース)] タブを選択します。ロール名は [Physical ID] 列にあります。を使用してロールAWS マネジメントコンソールを作成した場合、ロール名は、 など、名前を付けたものになりますAmazonEKSLoadBalancerControllerRole

        aws iam attach-role-policy \ --role-name eksctl-<your-role name>\ --policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
  6. Helm V3 以降を使用するか、Kubernetes マニフェストを適用してAWSLoad Balancer コントローラーをインストールします。

    Helm V3 or later
    1. TargetGroupBinding カスタムリソース定義をインストールします。

      kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
    2. eks-charts リポジトリを追加します。

      helm repo add eks https://aws.github.io/eks-charts
    3. クラスターがあるリージョンに対応するコマンドを使用して、AWS Load Balancer Controller をインストールします。

      重要

      Amazon EC2 インスタンスメタデータサービス (IMDS) へのアクセスAmazon EC2が制限されているノードにコントローラーをデプロイする場合、または にデプロイする場合はFargate、実行するコマンドに次のフラグを追加する必要があります。

      • --set region=<region-code>

      • --set vpcId=<vpc-xxxxxxxx>

      helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=<cluster-name> \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system
      重要

      デプロイされたグラフは、セキュリティ更新プログラムを自動的には受信しません。新しいグラフが利用可能になったら、手動でアップグレードする必要があります。

    Kubernetes manifest
    1. ウェブフックcert-managerに証明書設定を挿入するには、 をインストールします。

      • Kubernetes 1.16 以降に をインストールします。

        kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.1/cert-manager.yaml
      • Kubernetes に をインストールします1.15

        kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.1/cert-manager-legacy.yaml
    2. コントローラーをインストールします。

      1. コントローラー仕様をダウンロードします。コントローラーの詳細についてはGitHub のドキュメントを参照してください。

        curl -o v2_1_3_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.1.3/docs/install/v2_1_3_full.yaml
      2. v2_1_3_full.yaml ファイルを次のように編集します。

        • 仕様から ServiceAccount セクションを削除します。これにより、コントローラーのデプロイ時にIAMロールの注釈が上書きされるのを防止し、コントローラーを削除した場合、ステップ 4 で作成したサービスアカウントを保持します。

        • --cluster-name 値を Amazon EKS Deployment セクションでspecクラスター名に設定します。

      3. ファイルを適用します。

        kubectl apply -f v2_1_3_full.yaml
  7. コントローラーがインストールされていることを確認します。

    kubectl get deployment -n kube-system aws-load-balancer-controller

    出力

    NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 1/1 1 1 84s
  8. コントローラーを使用してAWSリソースをプロビジョニングする前に、クラスターが特定の要件を満たしている必要があります。詳細については、「でのアプリケーションの負荷分散 Amazon EKS」および「におけるネットワーク負荷分散 Amazon EKS」を参照してください。