Amazon EKS の Amazon EC2 ノードグループで ALB Ingress Controller をセットアップする方法を教えてください。

最終更新日: 2020 年 10 月 2 日

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

簡単な説明

次の手順は、Amazon EKS の Amazon EC2 ノードグループに ALB Ingress Controller をデプロイする方法を示しています。

AWS Fargate に ALB Ingress Controller をデプロイするには、Fargate の Amazon EKS クラスターに ALB Ingress 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 証明書のサムプリントを取得できます。

ALB Ingress Controller の IAM ポリシーを作成する

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

1.    AWS GitHub から ALB Ingress Controller の IAM ポリシードキュメントをダウンロードするには、次のコマンドを実行します。

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/docs/examples/iam-policy.json

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

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

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

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

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

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

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

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

6.    ALB Ingress Controller のサービスアカウント、クラスターロール、およびクラスターロールバインディングを作成するには、次のコマンドを実行します。

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/rbac-role.yaml

注意: $VERSION を、デプロイする ALB Ingress Controller のバージョンに置き換えます。

7.    テキストエディタで rbac-role.yaml ファイルを開き、ファイルの ServiceAccount セクションにのみ次の変更を加えます。

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

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

8.    rbac-role.yaml ファイルを保存してから、次のコマンドを実行します。

kubectl apply -f rbac-role.yaml

ALB Ingress Controller をデプロイ

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

2.    AWS GitHub でマニフェストファイルをダウンロードするには、次のコマンドを実行します。

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/alb-ingress-controller.yaml

注意: $VERSION を、デプロイする ALB Ingress Controller のバージョンに置き換えます。

3.    ダウンロードしたマニフェストファイルで、--ingress-class=alb 行の後にクラスターの cluster-name を追加し、ファイルを保存して閉じます。例:

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

Amazon Virtual Private Cloud (Amazon VPC) ID を見つけるには、AWS CLI で次のコマンドを実行します。

aws eks describe-cluster --name cluster-name --query 'cluster.resourcesVpcConfig.vpcId' --output text

4.    ALB Ingress Controller をデプロイするには、次のコマンドを実行します。

kubectl apply -f alb-ingress-controller.yaml

サンプルアプリケーションをデプロイして ALB Ingress Controller をテストする

サンプルアプリケーションをデプロイして、ALB Ingress Controller が Ingress オブジェクトのために Application Load Balancer を作成することを確認します。

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

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-service.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-ingress.yaml

注意: $VERSION を、デプロイする ALB Ingress Controller のバージョンに置き換えます。

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

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

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

NAME           HOSTS    ADDRESS                                                                 PORTS       AGE
2048-ingress   *        example-2048game-2048ingr-6fa0-352729433.us-west-2.elb.amazonaws.com    80          24h

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

kubectl logs -n kube-system deployment.apps/alb-ingress-controller

注意: ALB Ingress Controller ログには、デプロイに関する問題のトラブルシューティングに役立つエラーメッセージが表示される場合があります。

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

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

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/$VERSION/docs/examples/2048/2048-namespace.yaml

注意: $VERSION を、デプロイする ALB Ingress Controller のバージョンに置き換えます。</p


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


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