Amazon EKS의 Kubernetes 서비스 컨트롤러에서 생성한 로드 밸런서의 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS)에서 로드 밸런서가 지원하는 Kubernetes 서비스를 만들 수 없습니다.

간략한 설명

Amazon EKS는 두 컨트롤러 중 하나를 사용하여 로드 밸런서를 관리합니다: AWS 로드 밸런서 컨트롤러 또는 Kubernetes 서비스 컨트롤러입니다. 다음 문제 해결 단계는 Kubernetes 서비스 컨트롤러에서 관리하는 로드 밸런서에만 적용됩니다. 자세한 내용은 Kubenetes AWS 클라우드 공급자 웹사이트의 서비스 컨트롤러 및 Kubernetes 웹사이트의 로드밸런서 유형을 참조하세요.

서비스 로드 밸런서 문제를 해결하려면 다음과 같은 구성이 있는지 확인하세요:

  • Amazon Virtual Private Cloud(Amazon VPC) 서브넷에 대한 올바른 태그
  • 클러스터의 IAM 역할에 필요한 AWS ID 및 액세스 관리 (IAM) 권한
  • 유효한 Kubernetes 서비스 정의
  • 계정 한도 내에서 유지되는 로드 밸런서
  • 서브넷에 충분한 여유 IP 주소
  • 연결 시간 초과 문제를 방지하기 위해 올바르게 구성된 로드 밸런서
  • 정상 로드 밸런서 대상

앞의 모든 항목을 확인한 후에도 여전히 문제가 있는 경우 추가 문제 해결 단계 시도 섹션의 단계를 따르세요.

해결 방법

다음 단계는 클래식 로드 밸런서 및 네트워크 로드 밸런서에 적용됩니다. 애플리케이션 로드 밸런서의 경우 Amazon EKS의 애플리케이션 로드 밸런싱을 참조하세요.

**참고:**AWS CLI(명령줄 인터페이스) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

Amazon VPC 서브넷에 맞는 태그를 사용

1.    아마존 VPC 콘솔을 엽니다.

2.    탐색 창에서 서브넷을 선택합니다.

3.각 서브넷의 태그 탭을 선택한 다음 태그가 존재하는지 확인합니다. 예:

Key: kubernetes.io/cluster/yourEKSClusterName  
Value: shared

참고: 이 경우 공유 또는 소유일 수 있습니다.

기본적으로 컨트롤러는 서브넷을 자동으로 검색합니다. 가용성 영역당 서브넷이 여러 개 있는 경우 컨트롤러는 다음 순서로 서브넷의 우선 순위를 지정합니다:

  • 올바른 역할 태그가 있는 서브넷: 퍼블릭 서브넷의 경우 kubernetes.io/role/elb, 프라이빗 서브넷의 경우 kubernetes.io/role/internal-elb입니다.

  • 클러스터 태그가 있는 서브넷: kubernetes.io/cluster/CLUSTER_NAME

  • 사전적 순서로 첫 번째 서브넷

4.    퍼블릭 서브넷의 경우, 다음 태그가 존재하는지 확인합니다:

Key: kubernetes.io/role/elb  
Value: 1

참고: 서브넷이 공용 서브넷인지 확인하려면 해당 서브넷과 연결된 라우트 테이블을 확인하세요. 공용 서브넷에는 인터넷 게이트웨이에 대한 경로가 있습니다(igw-xxxxxxxxx). 프라이빗 서브넷에는 NAT 게이트웨이 또는 NAT 인스턴스를 통해 인터넷으로 연결되는 경로가 있거나 인터넷으로 연결되는 경로가 전혀 없습니다.

**중요:**인터넷 연결 로드 밸런서 서비스를 만들려면 4단계의 태그가 있어야 합니다. 인터넷 연결 로드 밸런서는 클라이언트의 요청을 인터넷을 통해 대상에 라우팅합니다.

5.    프라이빗 서브넷의 경우 다음 태그가 있는지 확인합니다:

Key: kubernetes.io/role/internal-elb  
Value: 1

**중요:**내부 로드 밸런서 서비스를 만들려면 5단계에서 태그가 있어야 합니다. 내부 로드 밸런서는 프라이빗 IP 주소를 사용하여 요청을 대상으로 라우팅합니다.

클러스터의 IAM 역할에 필요한 AWS ID 및 액세스 관리 (IAM) 권한을 설정

1.    아마존 EKS 콘솔을 엽니다.

2.    탐색 창에서** 클러스터**를 선택합니다.

3.    클러스터를 선택한 다음 클러스터 IAM 역할 ARN을 기록해 둡니다.

  1. IAM 콘솔을 엽니다.

5.    탐색 창에서 역할을 선택합니다.

6.    3단계에서 식별한 클러스터 IAM 역할 ARN과 일치하는 역할을 선택합니다.

7.    AWS 관리형 정책 AmazonEKSClusterPolicy가 역할에 연결되어 있는지 확인합니다.

**참고:**Amazon EKS 컨트롤 플레인은 이전 IAM 역할을 맡아 서비스를 위한 로드 밸런서를 생성합니다.

유효한 Kubernetes 서비스 정의 사용

Kubernetes 서비스에 대한 YAML 파일에서 spec.typeLoadBalancer로 설정되어 있는지 확인합니다.

로드 밸런서에 의해 지원되는 Kubernetes 서비스의 다음 예시를 참조하세요:

apiVersion: v1  
kind: Service  
metadata:  
  annotations:  
    # This annotation is only required if you are creating an internal facing ELB. Remove this annotation to create public facing ELB.  
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"  
  name: nginx-elb  
  labels:  
    app: nginx  
spec:  
  type: LoadBalancer  
  ports:  
  - name: "http"  
    port: 80  
    targetPort: 80  
  selector:  
    app: nginx

참고: 다른 어노테이션으로 서비스를 커스터마이징하려면, 쿠버네티스 웹사이트에서 내부 로드 밸런서AWS의 TLS 지원을 참조합니다.

기본적으로 Kubernetes 기본 제공 서비스 컨트롤러는 클래식 로드 밸런서를 생성합니다. 네트워크 로드 밸런서 프로비저닝의 경우, 서비스는 service.beta.kubernetes.io/aws-load-balancer-type: "nlb" 어노테이션이 있어야 합니다. 자세한 내용은 Kubernetes 웹사이트에서 AWS의 네트워크 로드 밸런서 지원을 참조하십시오.

로드 밸런서가 계정 한도 내에 있는지 확인하세요.

기본적으로 AWS 계정에는 AWS 리전당 최대 20개의 로드 밸런서가 있습니다.

보유하고 있는 로드 밸런서 개수를 확인하려면 Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다. 그런 다음 탐색 창에서 로드 밸런서를 선택합니다.

최대 로드 밸런서 수에 도달하면 서비스 쿼터로 증가를 신청할 수 있습니다.

서브넷에 사용 가능한 IP 주소가 충분한지 확인하기

로드 밸런서를 만들려면 해당 로드 밸런서의 각 서브넷에 최소 8개의 사용 가능한 IP 주소가 있어야 합니다. 이는 클래식 로드 밸런서와 네트워크 로드 밸런서 모두에 필요합니다.

연결 시간 초과 문제

로드 밸런서에 간헐적으로 또는 지속적으로 시간 초과 문제가 발생하는 경우 로드 밸런서 구성에 문제가 있는 것일 수 있습니다. 백엔드 서비스가 들어오는 트래픽을 처리할 수 없거나 부하 분산 장치에 너무 많은 요청이 전송될 때 이러한 문제가 발생할 수 있습니다. 자세한 내용은 Elastic Load Balancing "연결 시간이 초과되었습니다" 오류를 해결하려면 어떻게 하나요?를 참조하세요.

로드 밸런서 상태 확인

엔드포인트를 올바르게 구성하지 않았거나 백엔드 서비스가 상태 확인 요청에 응답하지 않는 경우, 부하 분산 장치 상태 확인 문제가 발생합니다.

로드 밸런서가 올바른 엔드포인트를 가리키고 있는지 확인하려면 AWS CLI 명령 describe-target-health를 실행합니다:

aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

대상 그룹의 상태 확인 구성을 확인하려면 AWS CLI 명령 describe-target-groups를 실행합니다:

aws elbv2 describe-target-groups --target-group-arns arn:aws:elasticloadbalancing:us-west-2:1234567890:targetgroup/my-targets/6d0ecf831eec9f09

자세한 내용은 대상 그룹의 상태 확인을 참조하세요.

추가 문제 해결 단계 시도

문제 해결에 도움이 될 수 있는 오류 메시지가 있는지 Kubernetes 서비스에서 확인하려면 다음 describe-service 명령을 실행합니다:

$ kubectl describe service my-elb-service

서비스가 성공적으로 생성되면 다음 예제와 유사한 출력이 표시됩니다:

...  
...  
Events:  
  Type    Reason                Age   From                Message  
  ----    ------                ----  ----                -------  
  Normal  EnsuringLoadBalancer  47s   service-controller  Ensuring load balancer  
  Normal  EnsuredLoadBalancer   44s   service-controller  Ensured load balancer

서비스가 성공적으로 만들어지지 않으면 오류 메시지가 표시됩니다.

오류 메시지에 대한 자세한 내용은 다음 리소스를 확인하세요:

관련 정보

내 VPC의 로드 밸런서가 사용 중인 서브넷에 IP 주소가 부족한 이유는 무엇인가요?

아마존 EKS 문제 해결

애플리케이션 로드 밸런서 문제 해결

클래식 로드 밸런서 문제 해결

AWS 공식
AWS 공식업데이트됨 일 년 전