Home
home

2장 실습 - AWS Load Balancer Controller 부하분산 환경 구성하기

1. AWS Load Balancer Controller 배포

이번 실습은 Amazon EKS 원클릭 배포 환경에서 진행합니다.
인프라 배포를 진행하지 않은 경우 링크를 통해 배포 후 복귀 바랍니다.
그리고 새롭게 인프라를 배포하면 아래 기본 설정 명령을 입력 후 진행 바랍니다.
기본 설정 명령어

1.1. IRSA 구성

AWS Load Balancer Controller 배포에 앞서 권한을 위임하기 위한 인증 절차로 IRSA 구성을 선행합니다.
OIDC 정보 확인
aws eks describe-cluster --name $CLUSTER_NAME \ --query "cluster.identity.oidc.issuer" \ --output text
Bash
복사
# cluster의 oidc 정보 확인
AWSLoadBalancerControllerIAMPolicy 생성
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
Bash
복사
# IAM Policy json 파일 다운로드
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json
Bash
복사
# AWSLoadBalancerControllerIAMPolicy 생성
IRSA 생성
eksctl create iamserviceaccount \ --cluster=$CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve
Bash
복사
# IRSA 생성
eksctl get iamserviceaccount --cluster $CLUSTER_NAME
Bash
복사
# IRSA 정보 확인
kubectl get serviceaccounts -n kube-system aws-load-balancer-controller -o yaml | yh
Bash
복사
# Kubernetes 서비스 어카운트 확인

1.2. AWS Load Balancer Controller 설치

AWS Load Balancer Controller 설치
helm repo add eks https://aws.github.io/eks-charts helm repo update
Bash
복사
# Helm Chart Repository 추가 및 업데이트
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system \ --set clusterName=$CLUSTER_NAME \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
Bash
복사
# Helm Chart - AWS Load Balancer Controller 설치
AWS Load Balancer Controller 설치 확인
kubectl get crd
Bash
복사
# Kubernetes CRD 확인
kubectl get deployment -n kube-system aws-load-balancer-controller kubectl describe deploy -n kube-system aws-load-balancer-controller
Bash
복사
# AWS Load Balancer Controller 확인
kubectl describe clusterroles.rbac.authorization.k8s.io aws-load-balancer-controller-role
Bash
복사
# AWS Load Balancer Controller Role 확인

2. Service (NLB) 배포 및 확인

AWS Load Balancer Controller를 배포한 상태에서 Service의 LoadBalancer인 NLB를 구성하고 통신을 확인합니다.

2.1. Service NLB 배포 및 확인

신규 터미널 1개 - 모니터링
watch -d kubectl get pod,svc,ep
Bash
복사
# [신규 터미널] 파드, 서비스, 엔드포인트 모니터링
디플로이먼트(파드 2대) & 서비스(NLB) 생성
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/echo-service-nlb.yaml cat echo-service-nlb.yaml | yh
Bash
복사
# yaml 파일 다운로드 및 확인
kubectl apply -f echo-service-nlb.yaml
Bash
복사
# 디플로이먼트 & 서비스 배포
kubectl get pod -owide kubectl get targetgroupbindings
Bash
복사
# 정보 확인
통신 확인
kubectl logs -l app=deploy-websrv -f
Bash
복사
# [신규 터미널] 웹 접근 로그 모니터링
kubectl get svc svc-nlb-ip-type -o jsonpath={.status.loadBalancer.ingress[0].hostname} | awk '{ print "Pod Web URL = http://"$1 }'
Bash
복사
# 웹 접속 주소 확인
NLB=$(kubectl get svc svc-nlb-ip-type -o jsonpath={.status.loadBalancer.ingress[0].hostname}) echo $NLB
Bash
복사
# NLB 도메인 변수 선언
curl -s $NLB
Bash
복사
# 웹 접속 확인 (1회)
for i in {1..100}; do curl -s $NLB | grep Hostname ; done | sort | uniq -c | sort -nr
Bash
복사
# 웹 접속 확인 (100회 - 카운팅)

2.2. 파드 수량 변경에 따른 동작 확인

파드 수량 조정
kubectl scale deployment deploy-echo --replicas=1
Bash
복사
# 파드 1대로 조정
kubectl scale deployment deploy-echo --replicas=3
Bash
복사
# 파드 3대로 조정
for i in {1..100}; do curl -s $NLB | grep Hostname ; done | sort | uniq -c | sort -nr
Bash
복사
# 웹 접속 확인 (100회 - 카운팅)
AWS Load Balancer Controller 정보 확인
kubectl describe clusterrolebindings.rbac.authorization.k8s.io aws-load-balancer-controller-rolebinding
Bash
복사
# AWS Load Balancer Controller Rolebinding 확인
kubectl describe clusterroles.rbac.authorization.k8s.io aws-load-balancer-controller-role
Bash
복사
# AWS Load Balancer Controller Cluster Role 확인
디플로이먼트 & 서비스 삭제
kubectl delete deploy deploy-echo; kubectl delete svc svc-nlb-ip-type
Bash
복사
# 자원 삭제

3. Ingress (ALB) 배포 및 확인

AWS Load Balancer Controller를 배포한 상태에서 Ingress의 LoadBalancer인 ALB를 구성하고 통신을 확인합니다.

3.1. Ingress ALB 배포 및 확인

신규 터미널 1개 - 모니터링
watch -d kubectl get pod,ingress,svc,ep -n game-2048
Bash
복사
# [신규 터미널] 파드, 서비스, 인그레스, 엔드포인트 모니터링
디플로이먼트(게임 파드 2대) & 인스레스 생성
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/ingress1.yaml cat ingress1.yaml | yh
Bash
복사
# yaml 파일 다운로드 및 확인
kubectl apply -f ingress1.yaml
Bash
복사
# 디플로이먼트 & 인그레스 배포
kubectl get pod -n game-2048 -owide kubectl get targetgroupbindings -n game-2048
Bash
복사
# 정보 확인
kubectl describe ingress -n game-2048 ingress-2048
Bash
복사
# Ingress 확인
kubectl get ingress -n game-2048 ingress-2048 -o jsonpath={.status.loadBalancer.ingress[0].hostname} | awk '{ print "Game URL = http://"$1 }'
Bash
복사
# 웹 접속 ALB 주소 확인

3.2. 파드 수량 변경에 따른 동작 확인

파드 수량 조정
kubectl scale deployment -n game-2048 deployment-2048 --replicas 3
Bash
복사
# 파드 3대로 조정
kubectl scale deployment -n game-2048 deployment-2048 --replicas 1
Bash
복사
# 파드 1대로 조정
디플로이먼트 & 서비스 & 인그레스 삭제
kubectl delete ingress ingress-2048 -n game-2048 kubectl delete svc service-2048 -n game-2048 && kubectl delete deploy deployment-2048 -n game-2048 && kubectl delete ns game-2048
Bash
복사
# 자원 삭제
Warning: 다음 섹션의 실습을 이어서 진행할 것으로 Amazon EKS 원클릭 배포를 유지합니다. 혹시나 다음 섹션을 진행하지 않을 경우 Amazon EKS 원클릭 배포를 삭제해 주길 바랍니다.
여기까지 2장의 AWS Load Balancer Controller 부하분산 환경 실습을 마칩니다.
수고하셨습니다 :)