Home
home

04. AWS Load Balancer Controller

1. AWS Load Balancer Controller 란?

: AWS Load Balancer Controller는 쿠버네티스 클러스터에서 Ingress 또는 Service를 감지하여 AWS ELB(Elastic Load Balancer)를 자동으로 생성하고 관리하는 컨트롤러입니다. 이를 통해 AWS 서비스를 활용한 쿠버네티스 애플리케이션을 외부에 노출할 수 있습니다.
[Caption] AWS Load Balancer Controller 소개

2. AWS Load Balancer Controller 주요 기능

쿠버네티스 Ingress 기반 ALB 생성
HTTP/HTTPS 트래픽을 쿠버네티스 클러스터 내의 파트로 전달합니다.
경로 기반 라우팅 및 호스트 기반 라우팅 지원합니다.
AWS WAF(Web Application Firewall)와 통합 가능합니다.
쿠버네티스 Service 기반 NLB 생성
TCP/UDP 트래픽을 처리하며 고성능의 로드 밸런싱을 제공합니다.
IP 모드와 Instance 모드를 지원합니다.
트래픽 모드
Instance 모드: ALB가 쿠버네티스 노드로 트래픽을 전달하며, NodePort를 통해 파드로 전달합니다. (기본 값)
IP 모드: ALB가 파드의 IP를 직접 대상으로 등록하여 바로 파드로 트래픽을 전달합니다.
자동화된 보안 그룹 관리
대상 그룹과 연결된 파드 또는 노드에 대한 보안 그룹 규칙을 자동으로 생성 및 관리할 수 있습니다.

3. AWS Load Balancer Controller 작동 원리

1.
쿠버네티스 API 서버에서 Ingress 또는 Service에 대한 이벤트를 감시합니다.
2.
Ingress가 생성되면 AWS ALB를 프로비저닝합니다.
ALB 리스너와 대상 그룹을 생성합니다.
대상 그룹은 Ingress Rule에 정의한 대상과 연결합니다.
3.
Service가 생성되면 AWS NLB를 프로비저닝합니다.
Service의 type: LoadBalancer 설정에 따라 NLB를 생성합니다.
4.
Annotation을 통한 세부 동작을 구성합니다.

4. AWS Load Balancer Controller 설치 및 확인

Helm을 통한 설치
helm repo add eks https://aws.github.io/eks-charts helm repo update
Bash
복사
# helm 저장소 추가 및 업데이트
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으로 aws-load-balancer-controller 설치
설치 확인
kubectl get deployment -n kube-system aws-load-balancer-controller
Bash
복사
# aws-load-balancer-controller 설치 확인
helm chart로 aws-load-balancer-controller를 설치할 때 별도의 네임 스페이스를 지정하지 않으면 기본 설정으로 kube-system 네임 스페이스에 설치됩니다.

5. AWS Load Balancer Controller 고려 사항

Annotation을 설정해서 로드 밸런서에 대한 동작을 세부적으로 조정할 수 있습니다.
AWS ELB 자원을 관리하기 위해 IRSA(IAM Role for Service Account)를 지정하는데 필요한 권한만 최소화하여 설정합니다.
AWS Load Balancer Controller는 자동으로 보안 그룹 규칙을 관리합니다.
IP 모드를 사용해서 파드로 직접적인 라우팅을 수행할 경우 이를 가능한 적절한 CNI 플러그인을 선택해야 합니다. (예: Amazon VPC CNI 사용)

6. 결론

AWS Load Balancer Controller는 쿠버네티스 클러스터에서 애플리케이션을 외부에 노출하거나 내부 네트워크에서 로드 밸런싱을 수행하는 데 필수적인 도구입니다. 이를 통해 AWS의 로드밸런서 자원인 ALB와 NLB를 자동으로 관리하며, 고급 기능을 사용할 수 있습니다. 이렇게 쿠버네티스 환경에서 네트워킹과 관련된 작업을 간소화하고 AWS 인프라와의 통합성을 극대화할 수 있습니다.