Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon EKS の Amazon EC2 ノードグループに対し、AWS Load Balancer Controller を使用して Application Load Balancer を設定する方法を教えてください。
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 の利用を推奨します。
次の手順を実行します。
-
リージョンに応じて、次のいずれかのコマンドを実行し、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 -
次の create-policy コマンドを実行し、ワーカーノードのインスタンスプロファイルに AWSLoadBalancerControllerIAMPolicy という IAM ポリシーを作成します。
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json -
コマンドが返すポリシーの Amazon リソースネーム (ARN) を書き留めます。
-
既存の IAM ロールを使用するか、AWS Load Balancer Controller 用の新しい IAM ロールを作成します。
注: eksctl を使用して IAM ロールを作成する場合は、--attach-policy-arn パラメータに IAM ポリシー AWSLoadBalancerControllerIAMPolicy の ARN を指定します。 -
次の 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 をデプロイする
次の手順を実行します。
-
サブネットに関連付けられたロードバランサーに必要なタグが付与されていることを確認します。
-
Kubernetes 1.16 以降では、次のコマンドを実行して cert-manager をインストールします。
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-version/cert-manager.yaml -
次のコマンドを、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 を参照してください。
-
.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 -
次のコマンドを実行し、AWS Load Balancer Controller をデプロイします。
kubectl apply -f ingress-controller.yaml
サンプルアプリケーションをデプロイする
サンプルアプリケーションをデプロイし、インバウンドオブジェクトを契機として AWS Load Balancer Controller がパブリック Application Load Balancer を作成することを確認します。
次の手順を実行します。
-
次のコマンドを実行し、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 を参照してください。
-
数分待機した後に次のコマンドを実行し、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 -
Kubernetes がインバウンドリソースを作成しない場合は、次のコマンドを実行し、AWS Load Balancer Controller のログにデプロイエラーメッセージがないかを確認します。
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller -
ゲームにアクセスするには、ウェブブラウザを開き、ステップ 2 の出力に表示される URL アドレスを入力します。
-
次のコマンドを実行すると、ゲームが削除されます。
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 のバージョンに置き換えてください。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
- 質問済み 1年前