실습
IAM 사용자
1. OIDC Identity Provider
EKS가 관리하는 사용자 계정인 service account 에 IAM role 사용하기 위해서는 IAM OIDC provider 가 존재해야합니다.
2. AWS Load Balancer Controller 에 부여할 IAM Policy 생성
Permission 은 Service Account를 위한 IAM roles를 설치하거나 워커 노드의 IAM roles 에 직접적으로 붙일 수 있습니다.
3. AWS Load Balancer Controller 를 위한 Service Account 생성
https://aws.amazon.com/ko/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/
Administrator(관리자) 권한을 가진 사용자를 생성하여 사용합니다.
루트 사용자는 사용하지 않는 것을 권합니다.
CLI 및 Cloud9 설정
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
export AWS_REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile
aws configure set default.region ${AWS_REGION}
실습을 진행하는 계정 ID를 환경 변수로 등록해야 합니다.
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
Amazon EKS로 웹 애플리케이션 구축하기
dev-user:~/environment $ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/demo-flask-backend-7f8bf9bbbb-j4whf 1/1 Running 0 23h
pod/demo-frontend-64d85cf98f-chsvl 1/1 Running 0 24h
pod/demo-frontend-64d85cf98f-fndmq 1/1 Running 0 24h
pod/demo-frontend-64d85cf98f-jt42t 1/1 Running 0 24h
pod/demo-nodejs-backend-6df47b479c-2jmpw 1/1 Running 0 24h
pod/demo-nodejs-backend-6df47b479c-q4lms 1/1 Running 0 24h
pod/demo-nodejs-backend-6df47b479c-xltxg 1/1 Running 0 24h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/demo-flask-backend NodePort 172.20.8.62 <none> 8080:31016/TCP 25h
service/demo-frontend NodePort 172.20.59.251 <none> 80:31810/TCP 24h
service/demo-nodejs-backend NodePort 172.20.29.1 <none> 8080:30795/TCP 24h
service/kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 27h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo-flask-backend 1/1 1 1 25h
deployment.apps/demo-frontend 3/3 3 3 24h
deployment.apps/demo-nodejs-backend 3/3 3 3 24h
실습을 위해 Cloud9 Workspace를 생성하고 dev 계정의 싱가포르 리전에 EKS 클러스터를 생성합니다.
Administrator access 정책을 가진 IAM Role을 생성하여 AWS Cloud9에 붙입니다.
dev-user:~/environment $ aws sts get-caller-identity --query Arn | grep eksworkspace-admin
"arn:aws:sts::[accountid]:assumed-role/grace-eksworkspace-admin/i-061f8d0d966e74c7b"
ALB Controller 를 kube-system 네임 스페이스에 설치, ingress yaml 배포하여 ALB 설정
- EKS의 Ingress의 경우, Application Load Balancers으로 프로비저닝됩니다.
- EKS의 Service의 경우, Network Load Balancers으로 프로비저닝됩니다.
dev-user:~/environment $ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
flask-backend-ingress alb * http://k8s-eksdemogroup-e4f4f4a6d4-1802470264.ap-southeast-1.elb.amazonaws.com 80 25h
frontend-ingress alb * http://k8s-eksdemogroup-e4f4f4a6d4-1802470264.ap-southeast-1.elb.amazonaws.com 80 24h
nodejs-backend-ingress alb * http://k8s-eksdemogroup-e4f4f4a6d4-1802470264.ap-southeast-1.elb.amazonaws.com 80 24h
AWS Load Balancer 컨트롤러에서 지원하는 트래픽 모드:
- Instance(default): 클러스터 내 노드를 ALB의 대상으로 등록합니다. ALB에 도달하는 트래픽은 NodePort로 라우팅된 다음 파드로 프록시됩니다.
- IP: 파드를 ALB 대상으로 등록합니다. ALB에 도달하는 트래픽은 파드로 직접 라우팅됩니다. 해당 트래픽 모드를 사용하기 위해선 ingress.yaml 파일에 주석을 사용하여 명시적으로 지정해야 합니다.
컨트롤러가 AWS ALB/NLB 리소스에 접근할 수 있도록 IAM permissions 설정해야 합니다.
AWS 리소스에 접근하기 위해서는 항상 IAM 권한!! 부여를 신경써주어야 함!!
controller가 워커 노드 위에서 동작되기 때문에 IAM permissions를 통해, AWS ALB/NLB 리소스에 접근할 수 있도록 만들어야 합니다. IAM permissions는 ServiceAccount를 위한 IAM roles를 설치하거나 워커 노드의 IAM roles에 직접적으로 붙일 수 있습니다.
'AWS' 카테고리의 다른 글
[EKS] Python 코드로 EKS 클러스터 접근하기 (0) | 2024.09.29 |
---|---|
[AWS] Assume role (0) | 2024.09.29 |
[AWS] EBS EFS 선택 기준 (0) | 2024.09.17 |
[EKS 모범 사례] 스케쥴링/probe (0) | 2024.08.10 |
[EKS 모범 사례] - karpenter (0) | 2024.08.10 |