Fargate용 Amazon EKS 클러스터에 AWS Load Balancer Controller를 설치한 다음 2048 게임을 배포하려면 어떻게 해야 하나요?

5분 분량
0

AWS Fargate용 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 AWS Load Balancer Controller를 설치하려고 합니다. 그런 다음 2048 게임을 배포하고 싶습니다.

간단한 설명

기존 Application Load Balancer(ALB) Ingress Controller 배포 없이 AWS Load Balancer Controller를 설정할 수 있습니다.

새 Fargate 클러스터에 AWS Load Balancer Controller를 설정하기 전에 다음 작업을 완료하세요.

  • Kubernetes용 AWS ALB Ingress Controller를 제거하세요. AWS Load Balancer Controller가 AWS ALB Ingress Controller의 기능을 대체합니다.
  • eksctl 버전 0.109.0 이상을 사용하세요. 자세한 내용을 보려면 eksct 웹 사이트의 설치를 참조하세요.
  • 워크스테이션에 Helm을 설치하세요.
  • 코드 조각의 자리 표시자 값을 사용자 고유의 값으로 바꿉니다.

해결 방법

Amazon EKS 클러스터, 서비스 계정 정책과 역할 기반 액세스 제어(RBAC)정책 생성

클러스터와 정책을 생성하려면 다음을 수행하세요.

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

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

    참고: Fargate 포드(--fargate)만 사용하는 클러스터에 대해서는 Fargate 포드 실행 역할을 생성할 필요가 없습니다.

  2. 다음 명령으로 클러스터가 서비스 계정에 AWS ID and Access Management(IAM)를 사용하도록 하세요.

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

    참고: FargateExecutionRolekubeletkube-proxy가 Fargate 포드를 실행하는 데 사용되는 역할입니다. 그러나 Fargate 포드(즉, aws-load-balancer-controller)에 사용되는 역할은 아닙니다. Fargate 포드의 경우, 서비스 계정에 대해 IAM 역할을 사용해야 합니다. 자세한 내용을 보려면 서비스 계정에 대한 IAM 역할을 참조하세요.

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

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. 다운로드한 정책으로 IAM 정책을 생성하세요. 다음 명령을 사용하세요.

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. AWS Load Balancer Controller에 대한 kube-system 네임스페이스에 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
  6. 다음 명령 중 하나를 실행하여 새 서비스 역할이 생성되었는지 확인하세요.

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

    -또는-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Helm으로 AWS Load Balancer Controller 설치

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 차트를 설치합니다. 참고: clusterName, regionvpcId를 내 값으로 바꿉니다.

    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=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  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 또는 Network Load Balancer를 생성하세요. 이 중 하나를 사용하여 k8s 서비스를 생성합니다. Application Load Balancer Ingress를 사용하여 2048이라는 예시 앱을 배포하려면, 다음을 수행하세요.

  1. 게임 배포에 필요한 Fargate 프로필을 생성합니다. 다음 명령을 사용하세요.

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. 예제 게임을 배포하고 AWS Load Balancer Controller가 ALB Ingress 리소스를 생성하는지 확인하려면, 다음 명령을 실행하세요.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. 몇 분 후, 다음 명령으로 Ingress 리소스가 생성되었는지 확인하세요.

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

    다음과 같은 출력이 표시됩니다.

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    참고: 몇 분이 지나도 Ingress가 생성되지 않으면, 다음 명령을 실행하여 AWS Load Balancer Controller 로그를 확인하세요.

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

    로그에는 배포 관련 문제를 진단하는 데 도움이 되는 오류 메시지가 포함될 수 있습니다.

  4. 샘플 애플리케이션을 보려면 브라우저를 여세요. 그런 다음 이전 명령 출력에서 ADDRESS URL로 이동합니다.
    참고: 샘플 애플리케이션이 표시되지 않으면, 몇 분 정도 기다린 후 브라우저를 새로 고치세요.

예제 애플리케이션 배포

Network Load Balancer IP 주소 모드 서비스를 사용하여 예제 애플리케이션을 배포하려면 다음을 수행하세요.

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

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. 2048 게임을 배포하기 위한 매니페스트를 가져오려면 다음 명령어를 실행하세요.

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. 2단계의 매니페스트에서, 이 Ingress 섹션을 삭제하세요.

    apiVersion: networking.k8s.io/v1kind: 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. 서비스 객체를 수정하세요.

    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:30159/TCP   23m
  7. 로드 밸런서가 활성화될 때까지 몇 분 정도 기다리세요. 그런 다음 배포에 도달할 수 있는지 확인합니다. 웹 브라우저의 EXTERNAL-IP 섹션에서 참조하는 NLB의 정규화된 도메인 이름(FQDN)을 엽니다.

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 명령의 결과는 오류 메시지(예: 태그 또는 서브넷 포함)를 반환합니다. 이러한 오류 메시지는 Kubernetes GitHub 웹 사이트에서 설정한 일반적인 오류를 해결하는 데 도움이 될 수 있습니다. get endpoints 명령은 지원되는 배포 포드가 올바르게 등록되었는지 여부를 보여줍니다. get ingress 명령은 Ingress 리소스가 배포되었는지 여부를 보여줍니다. 자세한 내용을 보려면 Kubernetes 웹 사이트의 AWS Load Balancer Controller를 참조하세요.

AWS 공식
AWS 공식업데이트됨 2달 전