AWS Load Balancer Controller를 사용하여 로드 밸런서를 생성할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 29일

AWS Load Balancer Controller(이전에는 ALB Ingress Controller라고 함)를 사용하여 Network Load Balancer(NLB) 또는 Application Load Balancer(ALB)를 생성할 수 없습니다. 또는 서비스나 수신 객체를 만든 후에 로드 밸런서가 생성되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

간략한 설명

로드 밸런서 생성 문제를 해결하려면 다음을 수행합니다.

  • 모든 사전 조건이 충족되었는지 확인합니다.
  • 수신(ALB) 또는 서비스(NLB) 객체의 주석을 확인합니다.
  • 자세한 내용은 AWS Load Balancer Controller 포드의 로그를 검토하세요.
  • 클러스터가 AWS Fargate에서 실행되는 경우 수신 또는 서비스 객체가 상주하는 네임스페이스에 대해 생성된 Fargate 프로파일이 있는지 확인합니다.
  • 주소가 지정되지 않은 종속성이 있는지 확인합니다.

해결 방법

모든 사전 조건이 충족되었는지 확인합니다.

ALB 사전 요구 사항 목록은 Amazon Elastic Kubernetes Service(Amazon EKS)의 애플리케이션 로드 밸런싱을 참조하세요. NLB 사전 요구 사항 목록은 Amazon EKS의 네트워크 로드 밸런싱을 참조하세요.

1.    AWS Load Balancer Controller가 성공적으로 프로비저닝되었는지 확인합니다.

2.    서브넷 수를 확인합니다. ALB에는 두 개 이상의 서브넷이 필요하며 NLB에는 하나 이상의 서브넷이 필요합니다. 자세한 내용은 서브넷 보기를 참조하세요.

3.    특정 시나리오에서는 다음 태그를 사용해야 합니다.

  • 키: "kubernetes.io/cluster/cluster-name"
  • 값: "shared" 또는 "owned"

Application Load Balancer를 사용하는 경우

다음 시나리오에서는 정확히 하나의 보안 그룹에 태그를 지정해야 합니다.

  • 작업자 노드에 연결된 여러 보안 그룹을 사용하고 있습니다.
  • AWS Load Balancer Controller 버전 v2.1.1 이하를 사용하고 있습니다.

Network Load Balancer를 사용하는 경우

AWS Load Balancer Controller 버전 v2.1.1 이하를 사용하는 경우 서브넷에 태그를 지정해야 합니다.

Amazon EC2 콘솔에서 태그를 추가하는 방법에 대한 자세한 내용은 콘솔을 사용한 태그 작업을 참조하세요. AWS 명령줄 인터페이스를 사용하여 태그를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용한 태그 작업을 참조하세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

4.    서브넷 ID가 서비스 객체 또는 수신 객체에서 주석에 명시적으로 지정되지 않는 한, 서브넷에 다음 태그가 있어야 합니다. 이러한 태그가 없으면 서브넷 자동 검색이 작동하지 않습니다.

프라이빗 서브넷 태그:

  • 키: "kubernetes.io/role/internal-elb"
  • 값: "1"

퍼블릭 서브넷 태그:

  • 키: "kubernetes.io/role/elb"
  • 값: "1"

수신(ALB) 또는 서비스(NLB) 객체의 주석을 확인합니다.

서비스 객체의 주석 또는 수신 객체의 주석을 확인합니다. 로드 밸런서를 구성하는 데 필요한 주석은 다음과 같습니다.

참고: 다른 주석은 기본값을 사용합니다.

Application Load Balancer

  • kubernetes.io/ingress.class: alb(수신 객체가 AWS Load Balancer Controller를 사용하도록 보장)

Network Load Balancer

  • IP 타겟 사용: service.beta.kubernetes.io/aws-load-balancer-type: “external” 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-nlb-target-type: “instance”

다음 명령 중 하나를 실행하여 서비스 또는 수신 객체를 봅니다. 다음 예에서는 SERVICE-NAME/INGRESS-NAMENAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.

kubectl describe service <SERVICE-NAME> -n <NAMESPACE>
kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>

다음 명령 중 하나를 실행하여 서비스 또는 수신 객체를 편집합니다. 다음 예에서는 SERVICE-NAME/INGRESS-NAMENAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.

kubectl edit service <SERVICE-NAME> -n <NAMESPACE>
kubectl edit ingress <INGRESS-NAME> -n <NAMESPACE>

자세한 내용은 AWS Load Balancer Controller 포드의 로그를 검토하세요.

AWS Load Balancer Controller 로그를 검토하려면 다음 명령을 실행합니다.

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

컨트롤러 포드가 로그를 표시하지 않으면 컨트롤러 포드가 실행 중인지 확인합니다.

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

클러스터가 Fargate에서 실행되는 경우 수신 또는 서비스 객체가 상주하는 네임스페이스에 대해 생성된 Fargate 프로파일이 있는지 확인합니다.

다음 명령을 실행하여 수신 또는 서비스 객체가 상주하는 네임스페이스에 대해 생성된 Fargate 프로파일이 있는지 확인합니다. 다음 예에서는 CLUSTER-NAME을 클러스터 이름으로 바꿉니다.

eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml

Fargate 프로파일을 생성하려면 다음 명령을 실행합니다. 다음 예제에서는 CLUSTER-NAME, REGION, FARGATE-PROFILE-NAMENAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.

eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>

주소가 지정되지 않은 종속성이 있는지 확인

문서를 검토하여 모든 종속성이 충족되는지 확인합니다. ALB의 경우 EKS의 애플리케이션 로드 밸런싱을 참조하세요. NLB의 경우 Amazon EKS의 네트워크 로드 밸런싱을 참조하세요.

예를 들어 ALB를 사용하는 경우 서비스 객체는 인스턴스 트래픽 모드를 사용하려면 NodePort 또는LoadBalancer를 지정해야 합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?