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

최종 업데이트 날짜: 2020년 1월 24일

Amazon Elastic Kubernetes(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의 ALB 수신 컨트롤러를 참조하십시오.

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 계정에는 기본적으로 AWS 리전당 최대 20개의 로드 밸런서가 있습니다.

보유한 로드 밸런서 수를 확인하려면 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

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

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


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?