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는 EKS 클러스터의 Elastic Load Balancing을 관리합니다. 컨트롤러는 다음과 같은 리소스를 프로비저닝합니다.
- 쿠버네티스 인그레스를 생성할 때 사용하는 Application Load Balancer.
- 로드밸런서 유형의 쿠버네티스 서비스를 생성할 때 사용하는 Network Load Balancer. 이전에는 쿠버네티스 Network Load Balancer가 인스턴스 대상으로 사용되었고 AWS Load Balancer Controller가 IP 대상으로 사용되었습니다. AWS Load Balancer Controller 버전 2.3.0 이상에서는 대상 유형 중 하나를 사용하여 Network Load Balancer를 생성할 수 있습니다. 자세한 내용은 대상 유형을 참조하세요.
해결 방법
모든 사전 조건이 충족되었는지 확인합니다.
Application Load Balancer 사전 요구 사항 목록은 Amazon EKS의 애플리케이션 로드밸런싱을 참조하세요. Network Load Balancer 사전 요구 사항 목록은 Amazon EKS의 Network Load Balancing을 참조하세요.
1. AWS Load Balancer Controller가 성공적으로 프로비저닝되었는지 확인합니다. 모범 사례는 버전 2.4.4 이상을 사용하는 것입니다.
2. 서브넷 수를 확인합니다. Application Load Balancer는 서로 다른 가용 영역에 2개 이상의 서브넷이 있어야 합니다. Network Load Balancer에는 하나 이상의 서브넷이 필요합니다. 서브넷에는 사용 가능한 IP 주소가 8개 이상 있어야 합니다. 자세한 내용은 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.FSP 서브넷 ID가 서비스 객체 또는 인그레스 객체에서 어노테이션으로 명시적으로 지정되지 않는 한, 서브넷에 다음 태그가 있어야 합니다. 이러한 태그가 없으면 서브넷 자동 검색이 작동하지 않습니다.
프라이빗 서브넷 태그:
- 키: "kubernetes.io/role/internal-elb"
- 값: "1"
퍼블릭 서브넷 태그:
- 키: "kubernetes.io/role/elb"
- 값: "1"
인그레스 또는 서비스 객체의 어노테이션을 확인합니다.
서비스 객체의 어노테이션 또는 인그레스 객체의 어노테이션을 확인합니다. 로드 밸런서를 구성하는 데 필요한 주석은 다음과 같습니다.
참고: 다른 어노테이션은 기본값을 사용합니다. 애플리케이션 로드 밸런싱을 위한 AWS Load Balancer Controller에서 지원하는 사용 가능한 모든 어노테이션 목록은 GitHub의 인그레스 어노테이션를 참조하세요. Network Load Balancing을 위해 AWS Load Balancer Controller에서 지원하는 모든 사용 가능한 어노테이션 목록은 GitHub의 서비스 어노테이션을 참조하세요.
Application Load Balancer
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-NAME 및 NAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.
kubectl describe service <SERVICE-NAME> -n <NAMESPACE>
kubectl describe ingress <INGRESS-NAME> -n <NAMESPACE>
다음 명령 중 하나를 실행하여 서비스 또는 인그레스 객체를 편집합니다. 다음 예에서는 SERVICE-NAME/INGRESS-NAME 및 NAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.
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에서 대상 포드를 실행할 때는 IP 대상 유형이 필요합니다. 다음 명령을 실행하여 인그레스 또는 서비스 객체가 상주하는 네임스페이스에 대해 생성된 Fargate 프로파일이 있는지 확인합니다. 다음 예에서는 CLUSTER-NAME을 클러스터 이름으로 바꿉니다.
eksctl get fargateprofile --cluster <CLUSTER-NAME> -o yaml
Fargate 프로파일을 생성하려면 다음 명령을 실행합니다. 다음 예제에서는 CLUSTER-NAME, REGION, FARGATE-PROFILE-NAME 및 NAMESPACE를 사용 사례에 맞는 올바른 값으로 바꿉니다.
eksctl create fargateprofile --cluster <CLUSTER-NAME> --region <REGION> --name <FARGATE-PROFILE-NAME> --namespace <NAMESPACE>
해결되지 않은 종속성 확인
Amazon EKS는 노드의 보안 그룹에 다음 규칙을 추가합니다.
- 클라이언트 트래픽에 대한 인바운드 규칙
- 생성한 각 Network Load Balancer에 대한 VPC의 각 로드 밸런서 서브넷에 대한 인바운드 규칙(상태 확인용).
Amazon EKS가 보안 그룹에 허용되는 최대 규칙 수에 대한 할당량을 초과하는 규칙을 생성하려고 하면 LoadBalancer 유형의 서비스 배포가 실패할 수 있습니다.
문서를 검토하여 모든 종속성이 충족되는지 확인합니다. Application Load Balancer에 대해서는 Amazon EKS의 애플리케이션 로드 밸런싱을 참조하세요. Network Load Balancer에 대해서는 Amazon EKS의 Network Load Balancing을 참조하세요. 예를 들어 Application Load Balancer를 사용하는 경우 서비스 객체는 인스턴스 트래픽 모드를 사용하려면 NodePort 또는 LoadBalancer를 지정해야 합니다.