AWS

AWS ALB(Application LoadBalancer) Controller 설치 하기

황동리 2025. 6. 2. 17:32
반응형

참고 문서
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/lbc-helm.html

 

사전 준비

 

0-1. ALB가 생성될 Public 서브넷에 태그 추가

 

0-2. EC2 메타데이터 설정

  • ALB Controller를 설치해주기 위해서는 먼저 ALB Controller가 설치될 EC2 인스턴스의 메타데이터에 접근이 가능 해야합니다.
  • 따라서 EC2 메타데이터에 접근 할 수 있도록 설정을 해줍니다.
  • 저 같은 경우는 Terraform을 사용해서 EC2 노드 그룹을 생성해서 아래와 같이 설정을 해주었습니다.
resource "aws_launch_template" "dev_outcode_cpu_lt" {
  name_prefix   = "dev-outcode-cpu-lt-"
  instance_type = "t3.medium"
  block_device_mappings {
    device_name = "/dev/sdf"
    ebs {
      volume_size = 100
    }
  }
  # 여기 부분에서 http_token을 optional로, http_put_response_hop_limit 값을 2로 변경해주었습니다. 
  metadata_options {
    http_tokens                 = "optional"
    http_put_response_hop_limit = 2
    http_endpoint               = "enabled"
  }
  tag_specifications {
    resource_type = "instance"
    tags = {
      "Name" = "dev-outcode-cpu-node"
    }
  }
}

 

 

1. iam 역할 생성

  • 사용자 대신 AWS API를 직접 호출할 수 있는 AWS 로드 밸런서 컨트롤러의 IAM 정책을 다운로드
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.12.0/docs/install/iam_policy.json

 

  • 다운로드한 정책을 사용하여 IAM 정책을 만듭니다.
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

 

  • ALB Controller는 IAM 권한이 필요한데, 이를 IRSA 방식으로 제공하려면 OIDC Provider가 필요합니다. 따라서 아래 명령어는 그 전제 조건을 충족시키기 위한 필수 단계입니다.
eksctl utils associate-iam-oidc-provider \
    --region <region> \ # EKS 클러스터가 존재하는 리전
  --cluster <eks-cluster-name> \ # EKS 클러스터 명
  --approve

 

  • iamserviceaccount 생성
eksctl create iamserviceaccount \
    --cluster=<eks-cluster-name> \ # EKS 클러스터 이름 넣어줄 것
    --namespace=kube-system \ 
    --name=aws-load-balancer-controller \
    --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ # 내 AWS_ACCOUNT_ID 넣어줄 것
    --override-existing-serviceaccounts \
    --region <클러스터가 존재하는 리전> \
    --approve

 

 

2. AWS Application LoadBalancer Controller 설치

  • eks-charts 차트 Helm 리포지토리를 추가
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks

 

  • AWS 로드 밸런서 컨트롤러를 설치합니다.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=<eks-cluster-name> \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller

 

위 과정을 거치면 ALB Controller 설치가 완료 됩니다.

 

ALB Controller를 재 생성할 때 문제를 겪은 적이 있어서 해결 방법도 같이 적어보도록 하겠습니다.

 

 

3. EKS Cluster 재 생성 시, ALB Controller 재설치하는 방법

 

문제 상황:

EKS Cluster를 삭제하고 재 생성한 후에 ALB Controller를 설치하려고 하는데, iamserviceaccount가 이미 존재한다고 나오면서 eks 클러스터의 serviceaccount가 생성이 안되는 상황

 

해결 방안:

CloudFormation stack에 존재하는 iamserviceaccount 삭제 후 재 생성

  • eksctl 을 사용하여 삭제 진행
eksctl delete iamserviceaccount --cluster <eks-cluster 이름> --name aws-load-balancer-controller --namespace kube-system

 

  • eksctl 을 사용하여 iamserviceaccount 재 생성
eksctl create iamserviceaccount \
    --cluster=<eks-cluster-name> \ 
    --namespace=kube-system \ 
    --name=aws-load-balancer-controller \
    --attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy \ 
    --override-existing-serviceaccounts \
    --region ap-northeast-1 \
    --approve

 

  • 그리고 aws-load-balancer-controller 설치
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=<eks-Cluster-name> \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller
 
반응형