スキップしてコンテンツを表示

Amazon EKS の Amazon EC2 ノードグループに対し、AWS Load Balancer Controller を使用して Application Load Balancer を設定する方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) の Amazon Elastic Compute Cloud (Amazon EC2) ノードグループに対し、AWS Load Balancer Controller を使用して Application Load Balancer を設定したいと考えています。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

前提条件: サブネットでワーカーノードからの外向きインターネットアクセスを許可する設定を行います。AWS Load Balancer Controller には、外向きインターネット接続が必要です。

AWS Fargate で AWS Load Balancer Controller をデプロイする方法については、「Fargate で Amazon EKS クラスターに AWS Load Balancer Controller を設定する方法を教えてください」を参照してください。

サブネットにタグを付ける

Amazon EKS クラスター内の Amazon Virtual Private Cloud (Amazon VPC) サブネットにタグを付けます。サブネットにタグ付けを行うと、Application Load Balancer のリソースを作成する際に、AWS Load Balancer Controller はサブネットを自動で検出します。

パブリック Application Load Balancer では、クラスターの VPC 内に kubernetes.io/role/elb がタグ付けされた 2 つ以上のパブリックサブネットが必要です。

プライベート Application Load Balancer では、クラスターの VPC 内に kubernetes.io/role/internal-elb がタグ付けされた 2 つ以上のプライベートサブネットが必要です。

OIDC ID プロバイダーを作成します。

サービスアカウント用 AWS Identity and Access Management (IAM) ロール (IRSA) で使用する OIDC ID プロバイダーを、Amazon EKS コンソール、AWSL CLI、または eksctl を使用して作成します。

Amazon EKS コンソール

コンソールを使用する場合は、「OIDC ID プロバイダーの作成 (AWS コンソール)」を参照してください。

AWSL CLI

クラスターが使用するルート認証機関 (CA) のサムプリントを特定し、次の create-open-id-connect-provider コマンドを実行します。

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 認証局のサムプリントに置き換えてください。

eksctl

eksctl コマンドラインツールを使用する場合は、「OIDC ID プロバイダーの作成 (eksctl)」を参照してください。

IAM ポリシーを作成する

AWS Load Balancer Controller に AWS API の呼び出しを許可する IAM ポリシーを作成します。

重要: AWS API へのアクセスを許可するには、IRSA の利用を推奨します。

次の手順を実行します。

  1. リージョンに応じて、次のいずれかのコマンドを実行し、GitHub から AWS Load Balancer Controller の IAM ポリシーをダウンロードします。
    北京と寧夏 (中国) 以外のすべてのリージョンでは、次の describe-cluster コマンドを実行します。

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

    注: example-cluster-name をクラスター名に、example-region-name をリージョンに、example-issuer-url を発行元の URL に置き換えてください。
    北京と寧夏 (中国) リージョンでは、次のcurl コマンドを実行します。

    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
  2. 次の create-policy コマンドを実行し、ワーカーノードのインスタンスプロファイルに AWSLoadBalancerControllerIAMPolicy という IAM ポリシーを作成します。

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \    --policy-document file://iam-policy.json
  3. コマンドが返すポリシーの Amazon リソースネーム (ARN) を書き留めます。

  4. 既存の IAM ロールを使用するか、AWS Load Balancer Controller 用の新しい IAM ロールを作成します。
    注: eksctl を使用して IAM ロールを作成する場合は、--attach-policy-arn パラメータに IAM ポリシー AWSLoadBalancerControllerIAMPolicy の ARN を指定します。

  5. 次の attach-role-policy コマンドを実行し、AWSLoadBalancerControllerIAMPolicy を IAM ロールにアタッチします。

    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. Kubernetes 1.16 以降では、次のコマンドを実行して cert-manager をインストールします。

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-version/cert-manager.yaml
  3. 次のコマンドを、GitHub からダウンロードしたマニフェストファイルで実行します。

    curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/example-version/v2_13_3_full.yaml  
    

    注: example-version をデプロイする AWS Load Balancer Controller のバージョンに置き換えてください。AWS Load Balancer Controller のバージョンを確認する方法については、GitHub のウェブサイトで Kubernetes SIGs を参照してください。バージョンに合わせてファイル名を変更したことを確認してください。上記のコード例では、v2_13_3_full.yaml が AWS Load Balancer Controller v2.13.3 と一致しています。詳細については、GitHub のウェブサイトで aws-load-balancer-controller を参照してください。

  4. .yaml ファイルの ServiceAccount セクションで次の変更を行います。

    spec:        containers:  
        - args:  
            - --cluster-name=example-cluster-name  
            - --ingress-class=alb

    注: example-cluster-name をクラスター名に置き換えてください。
    次の例では、111122223333 はアカウント ID、example-role-name は IAM ロール名を示します。

    apiVersion: v1  
    kind: ServiceAccount  
    metadata:  
      labels:  
        app.kubernetes.io/component: controller  
        app.kubernetes.io/name: aws-load-balancer-controller  
      annotations:                                                                         
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/example-role-name       
      name: aws-load-balancer-controller  
      namespace: kube-system
  5. 次のコマンドを実行し、AWS Load Balancer Controller をデプロイします。

    kubectl apply -f ingress-controller.yaml

サンプルアプリケーションをデプロイする

サンプルアプリケーションをデプロイし、インバウンドオブジェクトを契機として AWS Load Balancer Controller がパブリック Application Load Balancer を作成することを確認します。

次の手順を実行します。

  1. 次のコマンドを実行し、2048 という名前のゲームをデプロイします。

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

    注: example-version をデプロイする AWS Load Balancer Controller のバージョンに置き換えてください。AWS Load Balancer Controller のバージョンを確認する方法については、GitHub のウェブサイトで Kubernetes SIGs を参照してください。

  2. 数分待機した後に次のコマンドを実行し、Kubernetes がインバウンドリソースを作成したことを確認します。

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

    出力例:

    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
  3. Kubernetes がインバウンドリソースを作成しない場合は、次のコマンドを実行し、AWS Load Balancer Controller のログにデプロイエラーメッセージがないかを確認します。

    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
  4. ゲームにアクセスするには、ウェブブラウザを開き、ステップ 2 の出力に表示される URL アドレスを入力します。

  5. 次のコマンドを実行すると、ゲームが削除されます。

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

    注: example-version をデプロイする AWS Load Balancer Controller のバージョンに置き換えてください。

AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ