

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Helm을 사용하여 AWS Load Balancer Controller 설치
<a name="lbc-helm"></a>

**작은 정보**  
 향후 예정된 Amazon EKS 워크숍에 [등록](https://aws-experience.com/emea/smb/events/series/get-hands-on-with-amazon-eks?trk=4a9b4147-2490-4c63-bc9f-f8a84b122c8c&sc_channel=el)합니다.

**작은 정보**  
Amazon EKS Auto Mode를 사용하면 네트워킹 추가 기능을 설치하거나 업그레이드할 필요가 없습니다. Auto Mode에는 포드 네트워킹 및 로드 밸런싱 기능이 포함되어 있습니다.  
자세한 내용은 [EKS Auto Mode를 사용하여 클러스터 인프라 자동화](automode.md) 섹션을 참조하세요.

이 주제에서는 Kubernetes용 패키지 관리자인 Helm과 `eksctl`을 사용하여 AWS Load Balancer Controller를 설치하는 방법을 설명합니다. 컨트롤러는 기본 옵션으로 설치됩니다. 주석을 사용한 구성에 관한 세부 정보를 포함한 컨트롤러에 대한 자세한 내용은 GitHub의 [AWS Load Balancer Controller Documentation](https://kubernetes-sigs.github.io/aws-load-balancer-controller/)를 참조하세요.

다음 단계에서 모든 예제 값을 고유한 값으로 바꿉니다.

## 사전 조건
<a name="lbc-prereqs"></a>

이 자습서를 시작하기 전에 다음 단계를 완료해야 합니다.
+ Amazon EKS 클러스터를 생성합니다. 파일을 만들려면 [Amazon EKS 시작하기](getting-started.md) 섹션을 참조하세요.
+ 로컬 머신에 [헬름](https://helm.sh/docs/helm/helm_install/)을 설치합니다.
+ Kubernetes용 Amazon VPC CNI 플러그인, `kube-proxy` 및 CoreDNS 추가 기능이 [서비스 계정 토큰](service-accounts.md#boundserviceaccounttoken-validated-add-on-versions)에 나열된 최소 버전인지 확인합니다.
+ AWS Elastic Load Balancing 개념에 대해 알아보세요. 자세한 내용은 [Elastic Load Balancing User Guide](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)를 참조하세요.
+ Kubernetes [서비스](https://kubernetes.io/docs/concepts/services-networking/service/) 및 [수신](https://kubernetes.io/docs/concepts/services-networking/ingress/) 리소스에 대해 알아봅니다.

### 고려 사항
<a name="lbc-considerations"></a>

이 페이지의 구성 단계를 진행하기 전에 다음 사항을 고려하세요.
+ IAM 정책과 역할(`AmazonEKSLoadBalancerControllerRole`)은 동일한 AWS 계정의 여러 EKS 클러스터에서 재사용할 수 있습니다.
+ 역할(`AmazonEKSLoadBalancerControllerRole`)이 원래 생성된 동일한 클러스터에 컨트롤러를 설치하는 경우 역할이 있는지 확인한 후 [2단계: Load Balancer Controller 설치](#lbc-helm-install)로 이동합니다.
+ 서비스 계정에 대한 IAM 역할(IRSA)을 사용하는 경우 각 클러스터에 대해 IRSA를 설정해야 하며 역할의 신뢰 정책에서 OpenID Connect(OIDC) 공급자 ARN은 각 EKS 클러스터에 대해 특정합니다. 또한 기존 `AmazonEKSLoadBalancerControllerRole`이 있는 새 클러스터에 컨트롤러를 설치하는 경우 새 클러스터의 OIDC 공급자를 포함하도록 역할의 신뢰 정책을 업데이트하고 적절한 역할 주석으로 새 서비스 계정을 생성합니다. OIDC 공급자가 이미 있는지 아니면 생성해야 하는지 확인하려면 [클러스터에 대한 IAM OIDC 공급자 생성](enable-iam-roles-for-service-accounts.md) 섹션을 참조하세요.

## 1단계: `eksctl`을 사용하여 IAM 역할 생성
<a name="lbc-helm-iam"></a>

다음 단계는 AWS Load Balancer Controller **v2.14.1** 릴리스 버전을 참조하세요. 모든 릴리스에 대한 자세한 내용은 GitHub의 [AWS Load Balancer Controller Release Page](https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/)를 참조하세요.

1. 사용자 대신 AWS API를 직접 호출할 수 있는 AWS 로드 밸런서 컨트롤러의 IAM 정책을 다운로드합니다.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.14.1/docs/install/iam_policy.json
   ```
   + 정부 또는 중국 리전과 같은 비표준 AWS 파티션인 경우 [GitHub의 정책을 검토](https://github.com/kubernetes-sigs/aws-load-balancer-controller/tree/main/docs/install)하고 해당 리전에 적합한 정책을 다운로드합니다.

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

   ```
   aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicy \
       --policy-document file://iam_policy.json
   ```
**참고**  
AWS Management Console에서 정책을 보는 경우 콘솔에 **ELB** 서비스에 대한 경고는 표시되지만 **ELB v2** 서비스에 대한 경고는 표시되지 않습니다. 이는 정책의 작업 중 일부가 **ELB v2**에는 있지만 **ELB**에는 없기 때문에 발생합니다. **ELB**에 대한 경고는 무시해도 됩니다.

1. 클러스터 이름, 리전 코드 및 계정 ID의 값을 바꿉니다.

   ```
   eksctl create iamserviceaccount \
       --cluster=<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 <aws-region-code> \
       --approve
   ```

## 2단계: AWS Load Balancer Controller 설치
<a name="lbc-helm-install"></a>

1. `eks-charts` 차트 Helm 리포지토리를 추가합니다. AWS에서는 [이 리포지토리](https://github.com/aws/eks-charts)를 GitHub에 유지합니다.

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

1. 최신 차트가 적용되도록 로컬 리포지토리를 업데이트합니다.

   ```
   helm repo update eks
   ```

1. AWS 로드 밸런서 컨트롤러를 설치합니다.

   [Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 대해 제한적인 액세스 권한](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)이 있는 Amazon EC2 노드에 컨트롤러를 배포하거나 Fargate 또는 Amazon EKS Hybrid Nodes에 배포하는 경우, 다음 `helm` 명령에 다음 플래그를 추가합니다.
   +  `--set region={{region-code}} ` 
   +  `--set vpcId={{vpc-xxxxxxxx}} ` 

     {{my-cluster}}를 해당 클러스터의 이름으로 바꿉니다. 다음 명령에서 `aws-load-balancer-controller`는 이전 단계에서 생성한 Kubernetes 서비스 계정입니다.

     차트 Helm 구성에 관한 자세한 내용은 GitHub에서 [values.yaml](https://github.com/aws/eks-charts/blob/master/stable/aws-load-balancer-controller/values.yaml)을 참조하세요.

     ```
     helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
       -n kube-system \
       --set clusterName=my-cluster \
       --set serviceAccount.create=false \
       --set serviceAccount.name=aws-load-balancer-controller \
       --version 1.14.0
     ```

**중요**  
배포된 차트는 보안 업데이트를 자동으로 수신하지 않습니다. 새 차트가 사용 가능해지면 수동으로 업그레이드해야 합니다. 업그레이드할 때는 이전 명령에서 `upgrade`을 {{설치}}로 변경합니다.

`helm install` 명령은 컨트롤러의 사용자 지정 리소스 정의(CRD)를 자동으로 설치합니다. `helm upgrade` 명령은 설치하지 않습니다. `helm upgrade,`를 사용하는 경우 CRD를 수동으로 설치해야 합니다. 다음 명령을 실행하여 CRD를 설치합니다.

```
wget https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml
kubectl apply -f crds.yaml
```

## 3단계: 컨트롤러가 설치되어 있는지 확인
<a name="lbc-helm-verify"></a>

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

   ```
   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 매니페스트를 사용하여 배포한 경우 복제본이 하나만 있습니다.

1. 컨트롤러를 사용하여 AWS 리소스를 프로비저닝하기 전에 클러스터가 특정 요구 사항을 충족해야 합니다. 자세한 내용은 [Application Load Balancer를 사용하여 애플리케이션 및 HTTP 트래픽 라우팅](alb-ingress.md) 및 [Network Load Balancer를 사용하여 TCP 및 UDP 트래픽 라우팅](network-load-balancing.md) 섹션을 참조하세요.