본문 바로가기
AWS

[AWS] EKS Workshop 실습

by HH_g 2024. 8. 10.

실습

 

Amazon EKS web application workshop

Building simple web application using Amazon EKS. This workshop covers from creating eks cluster to application's life cycle.

catalog.us-east-1.prod.workshops.aws

EKS 구조

 

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

 

 

EKS 에 ALB 적용

 

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에 직접적으로 붙일 수 있습니다.

 

 

 

ALB로 배포된 서비스에 정상적으로 접근 가능 확인

 

'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