본문 바로가기

Notice
Recent Posts
Link
Calendar
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Total
Today
관리 메뉴

AWS Load Balancer Controller, Pod Identity로 설치하기 본문

Kubernetes

AWS Load Balancer Controller, Pod Identity로 설치하기

BinaryNumber 2026. 5. 17. 20:34
반응형

들어가며

EKS에서 Ingress를 쓰려면 AWS Load Balancer Controller가 필요합니다. 그리고 Controller가 ALB를 만들려면 IAM 권한이 있어야 해요.

이 글에서는 기존 IRSA(OIDC) 방식 대신 EKS Pod Identity를 사용해 권한을 연결하는 방법을 다룹니다.


Ingress Controller가 뭔가요?

Ingress Controller는 AWS 리소스(ALB)와 Kubernetes 사이의 중개 역할을 하는 컴포넌트입니다.

Ingress 리소스를 배포해도 Controller가 없으면 AWS 콘솔에 아무것도 생기지 않아요. 클러스터 생성 시 자동으로 설치되지 않기 때문에 직접 설치해야 합니다.

Controller가 하는 일:

역할 설명
이벤트 감시 API 서버로부터 Ingress 관련 이벤트를 감시하고 AWS 리소스 생성
ALB 생성 Ingress 1개당 ALB 1개 생성, Internet-facing / Internal 선택 가능
Target Group Kubernetes 서비스 단위로 생성
Listener 포트 미지정 시 80/443으로 생성
Rule Ingress에 정의한 경로 규칙대로 생성

EKS Pod Identity — IRSA 없이 IAM 권한 연결하기

Pod Identity는 Pod가 IAM 역할을 직접 부여받아 AWS 리소스에 접근하는 인증 방식입니다.

기존 IRSA와의 차이점:

항목 IRSA (기존) Pod Identity
OIDC 공급자 등록 필요 불필요
ServiceAccount 어노테이션 필요 불필요
IAM 신뢰 정책 Principal OIDC Provider ARN pods.eks.amazonaws.com
추가 컴포넌트 없음 Pod Identity Agent 애드온 필요

동작 흐름:

Pod 실행
  → Pod Identity Agent가 임시 자격증명 요청
  → EKS가 연결된 IAM 역할 기반으로 자격증명 발급
  → Pod 내 AWS SDK가 자격증명 자동 사용

1. Pod Identity Agent 애드온 설치

Pod Identity를 사용하려면 클러스터에 EKS Pod Identity Agent 애드온이 먼저 설치되어 있어야 합니다.

aws eks create-addon \
    --cluster-name {Cluster Name} \
    --addon-name eks-pod-identity-agent \
    --region ap-northeast-2

설치 완료 여부를 확인합니다.

aws eks describe-addon \
    --cluster-name {Cluster Name} \
    --addon-name eks-pod-identity-agent \
    --region ap-northeast-2 \
    --query "addon.status"

"ACTIVE"가 출력되면 준비 완료입니다.


2. IAM 정책 생성

ALB를 생성·수정할 수 있는 IAM 정책을 만듭니다.

# 정책 파일 다운로드
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v3.0.0/docs/install/iam_policy.json

# 정책 생성
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

생성 후 출력되는 Policy.Arn 값을 메모해 두세요. 이후 단계에서 사용합니다.


3. Pod Identity용 IAM 역할 생성

Pod Identity에서는 pods.eks.amazonaws.com을 신뢰하는 IAM 역할을 만들어야 합니다.

아래 내용으로 trust-policy.json을 생성합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

역할을 생성하고 앞서 만든 정책을 연결합니다.

# 역할 생성
aws iam create-role \
    --role-name AWSLoadBalancerControllerRole \
    --assume-role-policy-document file://trust-policy.json

# 정책 연결
aws iam attach-role-policy \
    --role-name AWSLoadBalancerControllerRole \
    --policy-arn {Policy ARN}

4. Pod Identity Association 생성

IAM 역할과 Kubernetes ServiceAccount를 연결합니다.

aws eks create-pod-identity-association \
    --cluster-name {Cluster Name} \
    --namespace kube-system \
    --service-account aws-load-balancer-controller \
    --role-arn {Role ARN} \
    --region ap-northeast-2

5. ServiceAccount 생성

Pod Identity에서는 ServiceAccount에 어노테이션이 필요 없습니다. 이름만 맞춰서 생성하면 됩니다.

kubectl create serviceaccount aws-load-balancer-controller \
    -n kube-system

6. AWS Load Balancer Controller 설치

Helm으로 설치합니다. 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

EKS Helm 레포지토리를 추가합니다.

helm repo add eks https://aws.github.io/eks-charts

Controller를 설치합니다.

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 \
    --set image.repository=602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/amazon/aws-load-balancer-controller \
    --set region=ap-northeast-2 \
    --set vpcId={VPC ID}

정상 설치 여부를 확인합니다.

kubectl get deployment -n kube-system aws-load-balancer-controller

7. Ingress 생성해보기

2048 게임 예제로 Ingress가 잘 동작하는지 확인할 수 있습니다.

# 생성
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml

# 삭제
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml

'Kubernetes' 카테고리의 다른 글

Helm upgrade  (0) 2026.05.17
ArgoCD Notifications Slack 연동  (1) 2026.05.16
ArgoCD ApplicationSet  (0) 2026.05.16
ArgoCD Application, AppProject  (0) 2026.05.16
ArgoCD Helm 설치 시 생성되는 컴포넌트 역할 정리  (0) 2026.05.16
Comments