내용으로 건너뛰기

Fargate용 Amazon EKS 클러스터에 AWS Load Balancer Controller를 설치하려면 어떻게 해야 합니까?

6분 분량
0

AWS Fargate용 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 AWS Load Balancer Controller를 설치하려고 합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

기존 Application Load Balancer 수신 컨트롤러 배포 없이 AWS Load Balancer Controller를 설정할 수 있습니다.

전제 조건:

  • 기존 Kubernetes용 AWS ALB Ingress Controller를 제거합니다. AWS Load Balancer Controller가 해당 기능을 대체합니다.
  • eksctl 버전 0.109.0 이상을 사용하십시오. 자세한 내용을 보려면 eksct 웹사이트의 설치를 참조하십시오.
  • 워크스테이션에 Helm을 설치합니다.

Amazon EKS 클러스터, 서비스 AWS 계정 정책 및 역할 기반 액세스 제어 정책 생성

다음 단계를 완료합니다.

  1. eksctl을 사용하여 Amazon EKS 클러스터를 생성하려면, 다음 명령을 실행합니다.

    eksctl create cluster \
      --name YOUR_CLUSTER_NAME \
      --version 1.28 \
      --fargate

    참고: YOUR_CLUSTER_NAME을 클러스터 이름으로 바꾸십시오. Fargate 포드(--fargate)만 사용하는 클러스터에 대해서는 Fargate 포드 실행 역할을 생성할 필요가 없습니다.

  2. 클러스터가 서비스 계정에 AWS ID and Access Management(IAM)를 사용하도록 허용하려면 다음 명령을 실행합니다.

    eksctl utils associate-iam-oidc-provider \
      --cluster YOUR_CLUSTER_NAME \
      --approve

    참고: YOUR_CLUSTER_NAME을 클러스터 이름으로 바꾸십시오. kubeletkube-proxyFargateExecutionRole을 사용하여 Fargate 포드를 실행합니다. 하지만 FargateExecutionRole은 Fargate 포드의 IAM 역할이 아닙니다. Fargate 포드의 경우, 서비스 계정에 대해 IAM 역할을 사용해야 합니다.

  3. AWS Load Balancer Controller에서 사용자 대신 AWS API를 직접 호출하도록 허용하는 IAM 정책을 다운로드하려면, 다음 명령을 실행합니다.

  4.  curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json
  5. 다운로드한 정책으로 IAM 정책을 생성하려면 다음 create-policy AWS CLI 명령을 실행합니다.

    aws iam create-policy \
      --policy-name AWSLoadBalancerControllerIAMPolicy \
      --policy-document file://iam_policy.json
  6. AWS Load Balancer Controller의 서비스 계정을 생성하려면 다음 명령을 실행합니다.

    eksctl create iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --approve

    참고: YOUR_CLUSTER_NAME를 클러스터 이름으로 바꾸고 AWS_ACCOUNT_ID를 계정 ID로 바꾸십시오. 위의 명령은 kube-system 네임스페이스에 aws-load-balancer-controller라는 서비스 계정을 생성합니다.

  7. 새 서비스 역할이 생성되었는지 확인하려면, 다음 명령 중 하나를 실행합니다.

    eksctl get iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --name=aws-load-balancer-controller \
      --namespace=kube-system

    참고: YOUR_CLUSTER_NAME을 클러스터 이름으로 바꾸십시오.
    -또는-

    kubectl get serviceaccount aws-load-balancer-controller \
      --namespace kube-system \
      -o yaml

Helm으로 AWS Load Balancer Controller 설치

다음 단계를 완료합니다.

  1. Amazon EKS 차트를 Helm에 추가하려면, 다음 명령을 실행합니다.

    helm repo add eks https://aws.github.io/eks-charts
  2. 리포지토리를 업데이트하고 최신 차트를 가져오려면 다음 명령을 실행합니다.

    helm repo update eks
  3. Helm 차트를 설치하려면, 다음 명령을 실행합니다.

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      --set clusterName=YOUR_CLUSTER_NAME \
      --set serviceAccount.create=false \
      --set region=YOUR_REGION_CODE \
      --set vpcId=EKS_CLUSTER_VPC_ID \
      --set serviceAccount.name=aws-load-balancer-controller \
      --version 1.11.0 \
      -n kube-system

    참고: YOUR_CLUSTER_NAME을 클러스터 이름으로 바꾸고 YOUR_REGION_CODE를 클러스터의 AWS 리전으로 바꾸십시오. 또한 EKS_CLUSTER_VPC_ID를 클러스터의 가상 프라이빗 클라우드(VPC) ID로 바꾸십시오.

  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

AWS Load Balancer Controller 테스트

구현을 테스트하려면 AWS Load Balancer Controller를 사용하여 다음 리소스 중 하나를 생성하십시오.

  • 수신용 Application Load Balancer
  • 서비스유형LoadBalancer인 Network Load Balancer

수신 리소스는 URI, 호스트 이름 및 경로와 같은 웹 개념을 기반으로 트래픽을 다양한 서비스로 라우팅합니다. 로드 밸런서를 여러 서비스와 공유하거나 서비스 라우팅을 제어하려면 수신 리소스를 사용하는 것이 가장 좋습니다. Service LoadBalancer를 사용하여 서비스에 전용 로드 밸런서를 할당합니다.

참고: 다음 테스트 단계에서는 2048이라는 예제 게임 애플리케이션을 배포합니다.

Application Load Balancer 생성

수신용 Application Load Balancer를 생성하려면 다음 단계를 완료하십시오.

  1. 게임 배포에 필요한 Fargate 프로필을 생성하려면, 다음 명령을 실행합니다.

    eksctl create fargateprofile \
      --cluster YOUR_CLUSTER_NAME \
      --region YOUR_REGION_CODE \
      --name your-alb-sample-app \
      --namespace game-2048

    참고: YOUR_CLUSTER_NAME을 클러스터 이름으로 바꾸고 YOUR_REGION_CODE를 리전으로 바꾸십시오.

  2. 애플리케이션을 배포하려면 다음 명령을 실행합니다.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. 잠시만 기다려주십시오. 그 후 다음 명령을 실행하여 AWS Load Balancer Controller가 수신 리소스를 생성했는지 확인합니다.

    kubectl get ingress/ingress-2048 -n game-2048

    출력 예시:

    NAME         CLASS HOSTS ADDRESS                                                                PORTS AGE
    ingress-2048 alb   *     k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com   80    3d4h

    몇 분 후에도 수신 리소스가 보이지 않으면 다음 명령을 실행하여 AWS Load Balancer Controller 로그를 확인하십시오.

    kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller

    로그에서 배포 문제를 진단하는 데 도움이 되는 오류 메시지를 확인하십시오.

  4. 애플리케이션을 보려면 브라우저를 연 다음 수신 리소스 명령 출력의 URL로 이동합니다.
    참고: 애플리케이션이 표시되지 않으면, 몇 분 정도 기다린 후 브라우저를 새로 고치십시오.

Network Load Balancer 생성

Network Load Balancer IP 주소 모드 서비스를 사용하여 애플리케이션을 배포하려면 다음 단계를 완료하십시오.

  1. Fargate 프로필을 생성하려면, 다음 명령을 실행합니다.

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048

    참고: your-cluster를 클러스터 이름으로 바꾸고 your-region-code를 클러스터의 리전으로 바꾸십시오.

  2. 2048 게임을 배포하기 위한 매니페스트를 가져오려면 다음 명령을 실행합니다.

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. 매니페스트에서 다음 Ingress 섹션을 삭제합니다.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. 다음 값을 사용하도록 Service 객체를 수정합니다.

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. 서비스 및 배포 매니페스트를 생성하려면, 다음 명령을 실행합니다.

    kubectl apply -f 2048-game.yaml
  6. 서비스 생성과 Network Load Balancer의 DNS 이름을 확인하려면, 다음 명령을 실행합니다.

    kubectl get svc -n game-2048

    출력 예시:

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:xxxxx/TCP   23m
  7. 로드 밸런서가 활성화될 때까지 몇 분 정도 기다리십시오. 배포에 액세스할 수 있는지 확인하려면 웹 브라우저를 엽니다. 그런 다음 EXTERNAL-IP 아래의 명령 출력에서 FQDN(Fully Qualified Domain Name, 전체 주소 도메인 이름)을 엽니다.

AWS Load Balancer Controller 문제 해결

AWS Load Balancer Controller를 설정할 때 문제가 발생하면 다음 명령을 실행하십시오.

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
kubectl get endpoints -n game-2048
kubectl get ingress/ingress-2048 -n game-2048

logs 명령의 출력에서 태그 또는 서브넷 관련 문제와 같은 오류 메시지를 확인합니다. 일반적인 오류에 대한 문제 해결 단계는 GitHub 웹사이트의 문제를 참조하십시오. 또한 AWS Load Balancer Controller를 사용하여 로드 밸런서를 생성할 때 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

get endpoints 명령은 백업된 배포 포드를 올바르게 등록했는지 여부를 보여 줍니다. **get ingress ** 명령은 수신 리소스가 배포되었는지 여부를 보여줍니다.

자세한 내용을 보려면 Kubernetes 웹사이트의 AWS Load Balancer Controller를 참조하십시오.

댓글 없음

관련 콘텐츠