eksctlで作成したEKSクラスタに対して、AWS LoadBalancer Controllerを導入する方法
下記ファイルをDLする
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
IAMポリシーを作成する
aws iam create-policy \
--policy-name ALBIngressControllerIAMPolicy \
--policy-document file://iam-policy.json
AWSロードバランサーコントローラーのIAMロールとServiceAccountを作成する
eksctl create iamserviceaccount \
--cluster=eks-dev-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::XXXXXXXXXXXXXX:policy/AWSLoadBalancerControllerIAMPolicy \
--profile=hogehogeplofile \
--approve
ここで、AWS LoadBalancerをEKSクラスターにデプロイします。
curl -o v2_0_0_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/v2_0_0_full.yaml
kubectl apply -f v2_0_0_full.yaml
eksctlで作成しなかったEKSクラスタに対して、AWS LoadBalancer Controllerを導入する方法
AWSアカウントIDを環境変数に設定します。
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --profile hogehogeplofile --output text)
OIDC IDプロバイダーを環境変数に設定します。
OIDC_PROVIDER=$(aws eks describe-cluster --name eks-dev-cluster --query "cluster.identity.oidc.issuer" --output text --profile hogehogeplofile --region ap-northeast-1 | sed -e "s/^https:\/\///")
jsonを作ります。
read -r -d '' TRUST_RELATIONSHIP <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"${OIDC_PROVIDER}:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
}
]
}
EOF
echo "${TRUST_RELATIONSHIP}" > trust.json
サービスのロールを作ります。
aws iam create-role --role-name aws-load-balancer-controller-role --assume-role-policy-document file://trust.json --description "role for aws-load-balancer-controller" --profile hogehogeplofile
IAMポリシーをロールにアタッチします
aws iam attach-role-policy --role-name aws-load-balancer-controller-role --policy-arn=arn:aws:iam::XXXXXXXXXX:policy/AWSLoadBalancerControllerIAMPolicy --profile hogehogeplofile
ここで、AWS LoadBalancerをEKSクラスターにデプロイします。
curl -o v2_0_0_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/v2_0_0_full.yaml
kubectl apply -f v2_0_0_full.yaml
サービスアカウントにIAMロールを指定します。
kubectl annotate serviceaccount -n kube-system aws-load-balancer-controller eks.amazonaws.com/role-arn=arn:aws:iam::XXXXXXXXXX:role/aws-load-balancer-controller-role
参考文献
https://github.com/awsdocs/amazon-eks-user-guide/blob/master/doc_source/create-service-account-iam-policy-and-role.md
https://github.com/awsdocs/amazon-eks-user-guide/blob/master/doc_source/specify-service-account-role.md
https://blog.sallah-kokaina.com/aws-alb-load-balancer-controller-no-eksctl-managed-cloudformation-stacks-found-error-ckhj5lwrt00w37ys145db8fbq
https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/controller/installation/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/eks-alb-ingress-controller-setup/