Amazon EKS의 서비스 로드 밸런서 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 24일

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

간략한 설명

서비스 로드 밸런서 문제를 해결하려면 다음 항목이 있는지 확인합니다.

  • Amazon Virtual Private Cloud(Amazon VPC) 서브넷에 대한 올바른 태그
  • 클러스터의 IAM 역할에 필요한 AWS Identity and Access Management(IAM) 권한
  • 유효한 Kubernetes 서비스 정의
  • 계정 한도 내에 유지되는 로드 밸런서
  • 서브넷에 사용 가능한 IP 주소

위의 모든 항목을 확인한 후에도 문제가 계속 발생하면 추가 문제 해결 단계 시도 섹션의 단계를 따릅니다.

해결 방법

참고: 다음 단계는 Classic Load Balancer 및 Network Load Balancer에 적용됩니다. Application Load Balancer에 대해서는 Amazon EKS의 애플리케이션 로드 밸런싱을 참조하세요.

Amazon VPC 서브넷에 대한 올바른 태그 사용

1.    AWS VPC 콘솔을 엽니다.

2.    탐색 창에서 [Subnets(서브넷)]을 선택합니다.

3.    각 서브넷에 대한 [태그(Tags)] 탭을 선택한 다음 태그가 있는지 확인합니다. 예를 들면 다음과 같습니다.

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

4.    퍼블릭 서브넷의 경우 다음 태그가 있는지 확인합니다.

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

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

중요: 인터넷 연결 로드 밸런서 서비스를 생성하려면 4단계의 태그가 있어야 합니다.

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

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

중요: 인터넷 연결 로드 밸런서 서비스를 생성하려면 5단계의 태그가 있어야 합니다.

클러스터의 IAM 역할에 필요한 IAM 권한 설정

1.    Amazon EKS 콘솔을 엽니다.

2.    탐색 창에서 [Clusters(클러스터)]를 선택합니다.

3.    클러스터를 선택한 후 Cluster IAM Role ARN(클러스터 IAM 역할 ARN)을 적어 둡니다.

4.    IAM 콘솔을 엽니다.

5.    탐색 창에서 [Roles(역할)]을 선택합니다.

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

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

참고: Amazon EKS 제어 플레인은 위의 IAM 역할을 맡아 서비스에 대한 로드 밸런서를 생성합니다.

유효한 Kubernetes 서비스 정의 사용

1.    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 지원을 참조하세요. AWS 로드 밸런서 컨트롤러를 사용하여 네트워크 로드 밸런서를 관리하는 경우, 주석이 Kubernetes 서비스에 대한 정의를 충족해야 합니다. 자세한 내용은 Amazon EKS의 네트워크 로드 밸런싱을 참조하세요.

로드 밸런서가 계정 한도 내에 있는지 확인합니다.

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

사용 중인 로드 밸런서의 수를 확인하려면 Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다. 그런 다음 탐색 창에서 [로드 밸런서(Load Balancers)]를 선택합니다.

최대 로드 밸런서 수에 도달한 경우 [Service Quotas(서비스 할당량)]을 사용하여 증가를 신청할 수 있습니다.

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

로드 밸런서를 생성하려면 해당 로드 밸런서의 각 서브넷에 최소 8개의 사용 가능한 IP 주소가 있어야 합니다. Classic Load Balancer와 Network Load Balancer에 모두 필요합니다.

추가 문제 해결 단계 시도

Kubernetes 서비스에서 문제 해결에 도움이 되는 오류 메시지를 확인하려면 다음 명령을 실행합니다.

$ 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

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

오류 메시지에 대한 자세한 내용을 보려면 다음을 수행할 수 있습니다.


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


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