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

5분 분량
0

AWS Load Balancer Controller를 사용하여 Network Load Balancer 또는 Application Load Balancer를 생성할 수 없습니다. 또는 서비스 또는 수신 개체를 생성한 후 로드 밸런서가 생성되지 않습니다.

간략한 설명

로드 밸런서 생성 문제를 해결하려면 다음 단계를 완료하세요.

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

AWS Load Balancer Controller는 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 Elastic Load Balancing을 관리합니다. 컨트롤러는 다음 리소스를 프로비저닝합니다.

  • Kubernetes 수신 생성 시 Application Load Balancer.
  • LoadBalancer 유형의 Kubernetes 서비스를 생성할 때 Network Load Balancer.
    **참고:**AWS Load Balancer Controller 버전 2.3.0 이상에서는 인스턴스 또는 IP 대상 유형으로 Network Load Balancer를 생성할 수 있습니다.

해결 방법

모든 사전 요건을 충족하는지 확인

Application Load Balancer 사전 요구 사항 목록은 Amazon EKS의 애플리케이션 로드 밸런싱을 참조하세요. Network Load Balancer 사전 요구 사항 목록은 Amazon EKS의 네트워크 로드 밸런싱을 참조하세요.

1.AWS Load Balancer Controller를 성공적으로 프로비저닝했는지 확인합니다. 버전 2.4.4 이상을 사용하는 것이 가장 좋습니다.

2.서브넷 수를 확인합니다. Application Load Balancer에는 서로 다른 가용 영역에 2개 이상의 서브넷이 있어야 합니다. Network Load Balancer에는 하나 이상의 서브넷이 있어야 합니다. 서브넷에는 사용 가능한 IP 주소가 8개 이상 있어야 합니다. 자세한 내용은 Virtual Private Cloud(VPC) 생성을 참조하세요.

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 Command Line Interface(AWS CLI)를 사용하여 태그를 추가하는 방법에 대한 자세한 내용은 명령줄을 사용하여 태그 작업을 참조하세요.

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

4.서브넷 ID가 서비스 개체 또는 수신 개체에 주석으로 명백하게 지정되지 않는 한 서브넷에 다음과 같은 태그가 있는지 확인합니다. 이러한 태그가 없으면 서브넷 자동 검색(GitHub 웹 사이트)이 작동하지 않습니다.

프라이빗 서브넷 태그:

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

퍼블릭 서브넷 태그:

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

수신 또는 서비스 개체의 주석 확인

서비스 개체의 주석 또는 수신 개체의 주석을 확인합니다.

**참고:**다른 주석에는 기본값이 사용됩니다. 애플리케이션 로드 밸런싱용 AWS Load Balancer Controller에서 지원하는 사용 가능한 모든 주석 목록은 GitHub의 수신 주석을 참조하세요. 네트워크 로드 밸런싱용 AWS Load Balancer Controller에서 지원하는 사용 가능한 모든 주석 목록은 GitHub의 서비스 주석을 참조하세요.

Application Load Balancer

  • kubernetes.io/ingress.class: alb: IngressClassParams는 AWS Load Balancer Controller에만 적용되는 사용자 지정 리소스 정의(CRD)입니다. 이 CRD를 IngressClass 파라미터 필드(Kubernetes 웹 사이트 내)와 함께 사용할 수 있습니다. 이 파라미터를 사용하여 수신 세트에 대한 설정을 적용할 수 있습니다.

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

문제가 있는 경우 조정자 오류가 표시됩니다. 수신 개체 또는 로드 밸런서 서비스가 생성이나 업데이트에 실패한 이유를 설명하는 자세한 오류 메시지도 표시됩니다. 이 오류는 다음과 같은 이유로 발생할 수 있습니다.

  • 컨트롤러가 AWS API 호출을 시도할 때 오류가 발생하는 경우에는 권한 또는 연결 문제와 관련이 있습니다. 컨트롤러의 AWS Identity and Access Management(IAM) 권한을 검토하세요. 그런 다음, 보안 그룹 또는 네트워크 액세스 제어 목록(네트워크 ACL)이 아웃바운드 연결을 명시적으로 거부하지 않는지 확인합니다.
  • 개체 구성에서 오류가 발생하면 수신 또는 서비스 사양의 형식이 잘못되었거나 주석이 올바르지 않을 수 있습니다. GitHub의 Application Load Balancer 또는 Network Load Balancer에 대한 주석을 검토하세요.

컨트롤러 포드 중 어느 것도 로그를 표시하지 않는 경우 컨트롤러 포드가 실행 중인지 확인합니다.

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

수신 또는 서비스 개체가 있는 네임스페이스에 대해 Fargate 프로파일이 생성되었는지 확인합니다.

대상 포드가 Fargate에서 실행되는 경우 IP 대상 유형을 포함해야 합니다. 수신 또는 서비스 개체가 있는 네임스페이스에 대한 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

해결되지 않은 종속성 확인

Amazon EKS는 노드의 보안 그룹에 다음 규칙을 추가합니다.

  • 클라이언트 트래픽에 대한 인바운드 규칙.
  • 생성한 Network Load Balancer마다 VPC의 각 로드 밸런서 서브넷에 대한 인바운드 규칙(상태 확인용).

Amazon EKS가 보안 그룹의 최대 규칙 수를 초과하는 규칙을 생성하려고 하면 로드 밸런서 배포가 실패할 수 있습니다.

모든 종속성을 충족하는지 확인하려면 관련 문서를 검토하세요. Application Load Balancer의 경우 Amazon EKS의 애플리케이션 로드 밸런싱을 참조하세요. Network Load Balancer에 대해서는 Amazon EKS의 네트워크 로드 밸런싱을 참조하세요. 예를 들어 Application Load Balancer를 사용하는 경우 서비스 개체NodePort 또는 LoadBalancer를 지정하여 인스턴스 트래픽 모드를 사용해야 합니다.

AWS 공식
AWS 공식업데이트됨 10달 전
댓글 없음

관련 콘텐츠