Fargate용 Amazon EKS 클러스터에 AWS Load Balancer Controller를 설정하고 2048 게임을 배포하려면 어떻게 해야 합니까?
AWS Fargate용 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 AWS Load Balancer Controller를 설정하려고 합니다. 그런 다음 2048 게임을 배포하고 싶습니다.
간략한 설명
기존 ALB(Application Load Balancer) 인그레스 컨트롤러 배포 없이 AWS 로드 밸런서 컨트롤러를 설정할 수 있습니다.
새 Fargate 클러스터에서 AWS 로드 밸런서 컨트롤러를 설정하기 전에 다음 사항을 고려합니다.
- AWS ALB Ingress Controller for Kubernetes를 제거합니다. AWS Load Balancer Controller는 AWS ALB Ingress Controller의 기능을 대체합니다.
- eksctl 버전 0.109.0 이상을 사용합니다.
- 워크스테이션에 Helm을 설치합니다.
- --region 변수가 명령에 항상 사용되는 것은 아닙니다. AWS 리전의 기본값이 사용되기 때문입니다. 기본값을 확인하려면 aws configure 명령을 실행합니다. AWS 리전을 변경하려면 --region 플래그를 사용합니다.
- Fargate 기반 Amazon EKS는 AWS GovCloud(미국 동부) 및 AWS GovCloud(미국 서부)를 제외한 모든 AWS 리전에서 사용할 수 있습니다.
- 코드 조각의 자리 표시자 값을 사용자 고유의 값으로 바꿉니다.
해결 방법
Amazon EKS 클러스터, 서비스 계정 정책 및 역할 기반 액세스 제어(RBAC) 정책 생성
1. eksctl을 사용하여 Amazon EKS Cluster를 생성하려면 다음 명령을 실행합니다.
eksctl create cluster --name YOUR_CLUSTER_NAME --version 1.23 --fargate
참고: Fargate 포드(--fargate)만 사용하는 클러스터에 대해서는 Fargate 포드 실행 역할을 생성할 필요가 없습니다.
2. 다음 명령을 실행하여 클러스터가 서비스 계정에 AWS Identity and Access Management(IAM)를 사용하도록 허용합니다.
eksctl utils associate-iam-oidc-provider --cluster YOUR_CLUSTER_NAME --approve
참고: FargateExecutionRole은 kubelet 및 kube-proxy가 Fargate Pod를 실행하기 위해 사용하는 역할입니다. 그러나 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.4.4/docs/install/iam_policy.json
4. 3단계에서 다운로드한 정책을 사용하여 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 설치
중요: 자세한 내용은 Jetstack GitHub 웹사이트의 cert-manager 및 Kubernetes GitHub 웹사이트의 토론 주제 Fargate와 관련된 cert-manager 문제를 참조하세요.
1. Helm에 Amazon EKS 차트 리포지토리를 추가하려면 다음 명령을 실행합니다.
helm repo add eks https://aws.github.io/eks-charts
2. TargetGroupBinding 사용자 지정 리소스 정의(CRD)를 설치하려면 다음 명령을 실행합니다.
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master"
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=<VPC_ID> \ --set serviceAccount.name=aws-load-balancer-controller \ -n kube-system
AWS Load Balancer Controller 테스트
AWS Load Balancer Controller를 사용하여 Ingress용 Application Load Balancer 또는 k8s 서비스 생성용 Network Load Balancer를 생성할 수 있습니다. 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.4.4/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-east-2.elb.amazonaws.com 80 2m32s
참고: 몇 분 후에 Ingress가 생성되지 않으면 다음 명령을 실행하여 AWS Load Balancer Controller 로그를 확인합니다.
kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
참고: 로그에는 배포 문제를 진단하는 데 도움이 되는 오류 메시지가 포함될 수 있습니다.
4. 브라우저를 열고 이전 명령 출력의 ADDRESS URL로 이동하여 샘플 애플리케이션을 확인합니다.
참고: 샘플 애플리케이션이 표시되지 않으면 몇 분 정도 기다린 후 브라우저를 새로 고칩니다.
Network Load Balancer IP 주소 모드 서비스를 사용하여 샘플 애플리케이션을 배포합니다.
Network Load Balancer IP 주소 모드를 사용하려면 클러스터에서 Kubernetes v1.16 이상을 실행해야 합니다.
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.4.4/docs/examples/2048/2048_full.yaml
3. 2단계의 매니페스트에서 다음 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. 서비스 객체를 수정합니다.
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 리소스가 배포되었는지 보여줍니다.

관련 콘텐츠
- 질문됨 5년 전lg...
- 질문됨 25일 전lg...
- 질문됨 2달 전lg...
- 질문됨 4달 전lg...