위 공식문서를 참고하여 ALB Ingress Controller를 EKS에 설치해보겠다.
해당 실습은 AWS EKS 클러스터가 구성되어 있다고 가정하겠다.
0. EC2 인스턴스(우분투 리눅스)에 kubectl 서버 구성하기
EKS에 ALB Ingress Controller를 생성하려면 EKS에 명령을 내릴 서버를 만들어야 한다. EC2 인스턴스를 우분투 리눅스 환경으로 생성하고 아래 환경을 구성한다.
- AWS CLI 환경 구성하기
sudo apt-get install -y unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# aws 설치 확인하기
aws --version
# IAM 등록하기
aws configure
AWS CLI 환경은 커맨드 명령으로 AWS 서비스와 통신할 수 있는 환경을 제공한다.
aws --version으로 aws cli 환경 설치가 완료되면 aws configure 명령을 실행하여 EKS 클러스터 생성시 사용한 IAM 계정의 Access Key와 Secret Key 그리고 Region을 입력해준다. IAM 계정이 없다면 AdministratorAccess 권한을 가진 계정을 생성하고 AccessKey와 SecretKey를 발급받는다.
- eksctl 환경 구성하기
# 변수 저장하기
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH
#eksctl 환경 구성하기
curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"
curl -sL "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check
tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz
sudo mv /tmp/eksctl /usr/local/bin
#설치 확인하기
eksctl version
eksctl은 간단한 명령어로 EKS 생성 및 관리가 가능한 환경을 제공한다.
- kubectl 환경 구성하기
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
kubectl version --short --client
kubectl은 쿠버네티스 Control-Plane에 명령을 내릴 수 있는 환경을 제공한다.
- HELM 설치하기
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
HELM은 kubernetes 매니페스트를 패키지 형식으로 관리하는 툴이다. HELM으로 ALB Ingress Controller 설치를 단순화 할 수 있다.
환경 구성이 끝났으니
해당 서버에서 본격적으로 EKS에 명령을 내려 ALB Ingress Controller를 설치해보자.
1. IAM 정책 생성을 위한 json 파일 다운로드
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
AWS는 ALB Ingress Controller 생성에 필요한 AWS API를 호출할 수 있는 정책을 json 파일로 제공한다.
2. IAM 정책 생성하기
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
설치받은 정책파일(json)로 IAM 정책을 생성한다.
3. IAM OIDC 제공업체 생성하기 ( 자격 증명 공급자 )
EKS 리소스에 접근하려면 IAM 계정은 접근하려는 EKS의 OIDC ID를 가지고 있어야 한다. OIDC ID를 가진 IAM 계정이 EKS 리소스에 접근하면 액세스를 추적 및 제어할 수 있어 세밀한 보안을 구현할 수 있다.
3-1) IAM의 자격증명공급자 중에 OICD ID와 일치하는 공급자가 있는지 확인하기
# 접근하려는 클러스터명 변수에 저장하기
cluster_name=eks
# 접근하려는 클러스터의 OIDC ID 추출하기
oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
echo $oidc_id
# IAM의 자격증명공급자 중에 OICD ID와 일치하는 공급자가 있는지 확인하기
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
반환되는 것이 없으면 클러스터의 OIDC ID를 IAM 계정과 Associate 해야 한다.
3-2) 클러스터의 OIDC ID를 IAM과 어소시에트(associate) 하기
# IAM과 OIDC Privoider Associate 하기
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
# IAM의 Provider 중에 OICD ID와 일치하는 공급자가 있는지 확인하기
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
이번에는 OIDC ID가 반환되는 것을 확인할 수 있다.
AWS 콘솔로 가면 위 사진처럼 자격 증명 공급자가 생성되었음을 확인할 수 있다.
4. IAM 서비스 계정 생성하기
eksctl create iamserviceaccount \
--cluster= my-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole \
--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
IAM 정책과 자격공급자 생성이 완료되면 IAM 역할(Role)을 생성하여 IAM 서비스 계정을 만들어야 한다. IAM 서비스 계정은 AWS 리소스 간 상호작용에 사용되는 계정이다. 일반적인 IAM 계정과는 다른 개념이다.
cluster명(my-cluster)과 IAM 계정ID(111122223333)를 본인의 EKS명과 계정ID로 변경하여 생성한다.
5. ALB Ingress Controller 생성하기
#ALB Ingress Controller 패키지 가져오기
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks
#ALB Ingress Controller 설치하기
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
EKS 리소스에 접근할 수 있는 IAM 서비스 계정 생성도 마무리 되면
이제 ALB Ingress Controller를 생성해보자.
HELM 명령으로 쉽게 ALB Ingress Controller를 설치할 수 있다.
설치가 완료되면 위와 같은 화면이 뜬다.
kubectl get deployment -n kube-system aws-load-balancer-controller
kubectl 명령으로 디플로이먼트가 정상 생성되었는지 확인한다.
참고자료
'DevOps > AWS' 카테고리의 다른 글
[AWS] EKS에서 OIDC가 적용되는 원리 (0) | 2023.11.14 |
---|---|
[AWS] VPC와 Subnet 이해하기 ( + CIDR ) (0) | 2023.11.02 |