Amazon EKS Cluster를 배포하는 방법은 크게 3가지가 있습니다.
여기서는 'eksctl' 명령어로 배포하는 방법을 설명합니다.
< AWS 공식 기술문서 >
1.1) EKS Cluster 생성
eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.21 --vpc-cidr
{옵션}
1.2) 클러스터가 서비스 계정에 AWS Identity and Access Management(IAM)를 사용하도록 허용
eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve

※ Fargate는 EC2 노드를 사용하지 않기 때문에, Pod가 AWS 리소스(Cost Explorer, S3, EC2 등)를 액세스하려면 IAM Role for ServiceAccount를 활용해야 합니다.
Fargate 모드를 사용할 경우, 이 과정을 통해 Fargate의 Pod가 적절한 IAM 권한을 가지도록 설정해야 합니다.
2.1) AWS Load Balancer Controller에서 사용자 대신 AWS API를 호출하는 것을 허용하는 IAM 정책을 다운로드
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy.json
2.2) 위에서 다운로드한 정책을 사용하여 IAM 정책을 생성
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
2.3) kube-system 네임스페이스에 AWS LB Controller에 대한 aws-load-balancer-controller라는 이름의 서비스 계정을 생성
* (이 service 계정은 K8S의 service 계정입니다.)
eksctl create iamserviceaccount --cluster=YOUR_CLUSTER_NAME --namespace=kube-system --name=aws-load-balancer-controller --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy --override-existing-serviceaccounts --approve

2.4) 새 서비스 역할이 생성되었는지 확인
eksctl get iamserviceaccount --cluster YOUR_CLUSTER_NAME --name aws-load-balancer-controller --namespace kube-system

2.5) AWS LB Controller 추가 기능 설치
helm repo add eks https://aws.github.io/eks-charts
TargetGroupBinding 사용자 지정 리소스 정의(CRD)를 설치
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"

helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
--set clusterName=YOUR_CLUSTER_NAME \
--set serviceAccount.create=false \
--set region=YOUR_REGION_CODE \
--set vpcId=<VPC_ID> \
--set serviceAccount.name=aws-load-balancer-controller \
-n kube-system
helm delete aws-load-balancer-controller -n kube-system
※ 위 명령어 실패 시, Helm에 추가한 EKS 차트 레포지토리 확인
helm search repo | findstr aws-load-balancer-controller
helm repo update