매니페스트로 AWS Load Balancer Controller 설치

매니페스트로 AWS Load Balancer Controller 설치

팁

Amazon EKS Auto Mode에서는 네트워킹 추가 기능을 설치하거나 업그레이드할 필요가 없습니다. Auto Mode에는 Pod 네트워킹과 로드 밸런싱 기능이 포함됩니다. 자세한 내용은 EKS Auto Mode로 클러스터 인프라 자동화를 참조하세요.

이 주제에서는 Kubernetes 매니페스트를 다운로드하고 적용하여 컨트롤러를 설치하는 방법을 설명합니다. 컨트롤러에 대한 전체 문서는 GitHub에서 볼 수 있습니다.

다음 단계에서는 예시 값을 사용자의 값으로 바꾸세요.

출처: 문서

본문

사전 요구 사항

이 튜토리얼을 시작하기 전에 다음 단계를 완료해야 합니다.

  • Amazon EKS 클러스터를 만듭니다. 만들려면 Amazon EKS 시작하기(Get started with Amazon EKS)를 참조하세요.
  • 로컬 머신에 Helm을 설치합니다.
  • Amazon VPC CNI 플러그인 for Kubernetes, kube-proxy, CoreDNS 추가 기능이 서비스 계정 토큰(Service account tokens)에 나열된 최소 버전 이상인지 확인합니다.
  • AWS Elastic Load Balancing 개념을 학습합니다. 자세한 내용은 Elastic Load Balancing User Guide를 참조하세요.
  • Kubernetes 서비스 및 인그레스 리소스에 대해 학습합니다.

고려 사항

이 페이지의 구성 단계를 진행하기 전에 다음을 고려하세요.

  • IAM 정책과 역할(AmazonEKSLoadBalancerControllerRole)은 같은 AWS 계정의 여러 EKS 클러스터에서 재사용할 수 있습니다.
  • 역할(AmazonEKSLoadBalancerControllerRole)이 원래 생성된 것과 같은 클러스터에 컨트롤러를 설치한다면 역할 존재를 확인한 뒤 2단계: cert-manager 설치로 이동하세요.
  • IAM Roles for Service Accounts(IRSA)를 사용한다면 IRSA는 각 클러스터에 대해 설정되어야 하며, 역할의 신뢰 정책에 있는 OpenID Connect(OIDC) 공급자 ARN은 각 EKS 클러스터마다 고유합니다. 또한 기존 AmazonEKSLoadBalancerControllerRole이 있는 새 클러스터에 컨트롤러를 설치한다면 역할의 신뢰 정책을 업데이트해 새 클러스터의 OIDC 공급자를 포함하고 적절한 역할 주석이 있는 새 서비스 계정을 만들어야 합니다. OIDC 공급자가 이미 있는지 확인하거나 만들려면 클러스터용 IAM OIDC 공급자 생성을 참조하세요.

1단계: IAM 구성

다음 단계는 AWS Load Balancer Controller v2.14.1 릴리스 버전을 기준으로 합니다. 모든 릴리스에 대한 자세한 내용은 GitHub의 AWS Load Balancer Controller Release Page를 참조하세요.

AWS Load Balancer Controller가 사용자 대신 AWS API 호출을 할 수 있게 하는 IAM 정책을 다운로드합니다.

이전 단계에서 다운로드한 정책을 사용해 IAM 정책을 만듭니다.

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json

참고

AWS Management Console에서 정책을 보면 콘솔은 ELB v2 서비스가 아니라 ELB 서비스에 대해 경고를 표시합니다. 이는 정책의 일부 작업이 ELB에는 없고 ELB v2에만 존재하기 때문입니다. ELB에 대한 경고는 무시할 수 있습니다.

2단계: cert-manager 설치

다음 방법 중 하나로 cert-manager를 설치하여 webhook에 인증서 구성을 주입합니다. 자세한 내용은 cert-manager Documentation의 Getting Started를 참조하세요.

cert-manager를 설치하려면 quay.io 컨테이너 레지스트리를 사용할 것을 권장합니다. 노드가 quay.io 컨테이너 레지스트리에 액세스할 수 없다면 Amazon ECR을 사용해 cert-manager를 설치하세요(아래 참조).

3단계: AWS Load Balancer Controller 설치

컨트롤러 사양을 다운로드합니다. 컨트롤러에 대한 자세한 내용은 GitHub의 문서를 참조하세요.

curl -Lo v2_14_1_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.14.1/v2_14_1_full.yaml

파일에 다음 편집을 수행합니다.

v2_14_1_full.yaml 파일을 다운로드했다면 다음 명령을 실행해 매니페스트에서 ServiceAccount 섹션을 제거합니다. 이 섹션을 제거하지 않으면 이전 단계에서 서비스 계정에 추가한 필수 주석이 덮어써집니다. 이 섹션을 제거하면 컨트롤러를 삭제할 때 이전 단계에서 만든 서비스 계정도 보존됩니다.

sed -i.bak -e '764,772d' ./v2_14_1_full.yaml

다른 파일 버전을 다운로드했다면 편집기에서 파일을 열고 다음 줄을 제거합니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  name: aws-load-balancer-controller
  namespace: kube-system
---

파일의 Deployment spec 섹션에서 your-cluster-name을 클러스터 이름으로 바꿉니다(my-cluster를 클러스터 이름으로 바꿉니다).

sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_14_1_full.yaml

노드가 Amazon EKS Amazon ECR 이미지 저장소에 액세스할 수 없다면 다음 이미지를 가져와 노드가 액세스할 수 있는 저장소에 푸시해야 합니다. 이미지를 가져오고, 태그하고, 자체 저장소에 푸시하는 방법은 한 저장소에서 다른 저장소로 컨테이너 이미지 복사를 참조하세요.

public.ecr.aws/eks/aws-load-balancer-controller:v2.14.1

매니페스트에 레지스트리 이름을 추가합니다. 다음 명령은 개인 저장소 이름이 원본 저장소와 동일하다고 가정하고 개인 레지스트리 이름을 파일에 추가합니다. 111122223333.dkr.ecr.region-code.amazonaws.com을 레지스트리로 바꿉니다. 이 줄은 개인 저장소 이름을 원본 저장소와 동일하게 지정했다고 가정합니다. 그렇지 않다면 개인 레지스트리 이름 뒤의 eks/aws-load-balancer-controller 텍스트를 저장소 이름으로 바꾸세요.

sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_14_1_full.yaml

(Fargate 또는 제한된 IMDS에서만 필요)

Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 대한 액세스가 제한된 Amazon EC2 노드에 컨트롤러를 배포하거나, Fargate 또는 Amazon EKS Hybrid Nodes에 배포한다면 - args: 아래에 다음 매개변수를 추가합니다.

[...]
spec:
      containers:
        - args:
            - --cluster-name=your-cluster-name
            - --ingress-class=alb
            - --aws-vpc-id=vpc-xxxxxxxx
            - --aws-region=region-code

[...]

파일을 적용합니다.

kubectl apply -f v2_14_1_full.yaml

IngressClass 및 IngressClassParams 매니페스트를 클러스터에 다운로드합니다.

curl -Lo v2.14.1_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.14.1/v2_14_1_ingclass.yaml

매니페스트를 클러스터에 적용합니다.

kubectl apply -f v2.14.1_ingclass.yaml

4단계: 컨트롤러 설치 확인

컨트롤러가 설치되었는지 확인합니다.

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

예시 출력은 다음과 같습니다.

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           84s

Helm으로 배포했다면 이전 출력을 받습니다. Kubernetes 매니페스트로 배포했다면 복제본이 하나뿐입니다.

컨트롤러를 사용해 AWS 리소스를 프로비저닝하기 전에 클러스터가 특정 요구 사항을 충족해야 합니다. 자세한 내용은 Application Load Balancers로 애플리케이션 및 HTTP 트래픽 라우팅과 Network Load Balancers로 TCP 및 UDP 트래픽 라우팅을 참조하세요.

더 알아보기 (Learn more)