AWS 로드 밸런서 컨트롤러가 Amazon EKS에서 내 서브넷을 찾을 수 없는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 10월 6일

AWS 로드 밸런서 컨트롤러가 Amazon Elastic Kubernetes Service(Amazon EKS) 에서 내 서브넷을 찾을 수 없습니다.

간략한 설명

AWS 로드 밸런서 컨트롤러가 Amazon EKS에서 서브넷을 찾을 수 없는 경우 오류가 발생합니다.

다음 오류가 표시되면 AWS 로드 밸런서 컨트롤러에 대한 서비스 계정의 AWS Identity and Access Management(IAM) 역할에 필요한 권한이 없는 것입니다.

{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}

위의 오류를 해결하려면 권한 거부 오류 해결 섹션의 단계를 완료하십시오.

또는

다음 오류가 발생하는 경우에는 AWS 로드 밸런서 컨트롤러가 하나 이상의 서브넷을 검색할 수 없습니다.

{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to discover at least one subnet"}

위의 오류를 해결하려면 단일 서브넷 검색 오류 해결 섹션의 단계를 완료하십시오.

또는

다음 오류 중 하나가 발생하면 AWS 로드 밸런서 컨트롤러가 둘 이상의 적격 서브넷을 검색할 수 없습니다.

"msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to failed to resolve 2 qualified subnet with at least 8 free IP Addresses for ALB
{"level":"error","ts":1606329481.2930484,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"reciter-ing","namespace":"reciter","error":"InvalidSubnet: Not enough IP space available in subnet-xxxxxxxxxxxxxx. ELB requires at least 8 free IP addresses in each subnet.\n\tstatus code: 400, request id: 2a37780c-f411-xxxxx-xxxxx-xxxxxxxxx"}

위의 오류를 해결하려면 다중 서브넷 검색 오류 해결 섹션의 단계를 완료하십시오.

해결 방법

권한 거부 오류 해결

1.    서비스 계정이 AWS 로드 밸런서 컨트롤러와 연결되어 있는지 확인합니다.

$ kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccount

출력:

serviceAccount: aws-load-balancer-controller
serviceAccountName: aws-load-balancer-controller

참고: 배포가 다른 네임스페이스에 배포된 경우 -n kube-system을 적절한 네임스페이스로 바꿉니다.

2.    AWS 로드 밸런서 컨트롤러와 연결된 서비스 계정에 어떤 IAM 역할이 연결되어 있는지 확인합니다.

$ kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arn

출력:

annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxxx:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-xxxxxxxxxxxxx

3.    2단계에서 식별한 IAM 역할에 대해 ec2:DescribeAvailabilityZones 권한을 부여합니다.

단일 서브넷 검색 오류 해결

1.    서브넷에 적절한 태그를 추가하면 AWS 로드 밸런서 수신 컨트롤러가 자동 검색을 사용하여 로드 밸런서를 생성할 수 있습니다.

프라이빗 서브넷 태그의 예:

kubernetes.io/role/internal-elb                Set to 1 or empty tag value for internal load balancers

퍼블릭 서브넷 태그의 예:

kubernetes.io/role/elb                         Set to 1 or empty tag value for internet-facing load balancers

참고: alb.ingress.kubernetes.io/subnets 주석을 사용하여 로드 밸런서에 서브넷을 수동으로 할당할 수 있습니다. 자세한 내용은 AWS 로드 밸런서 컨트롤러 웹 사이트에서 수신 주석을 참조하십시오.

내부 로드 밸런서가 있는 클러스터에 대해 올바른 태그가 지정된 서브넷의 예(프라이빗 서브넷):

kubernetes.io/role/internal-elb          1

퍼블릭 로드 밸런서가 있는 클러스터에 올바른 태그가 지정된 서브넷의 예(퍼블릭 서브넷):

kubernetes.io/role/elb

2.    서브넷에 적절한 형식으로 태그를 지정합니다.

키: kubernetes.io/cluster/your-cluster-name

값: 공유 또는 소유

중요: AWS 로드 밸런서 컨트롤러 버전 2.1.1 이하를 사용하는 경우 서브넷에 기존 형식으로 태그를 지정해야 합니다. 버전 2.1.2 이상에서는 태그 지정이 선택 사항입니다. 다음 중 하나에 해당하는 경우에는 서브넷에 태그를 지정하는 것이 좋습니다.

  • 동일한 VPC에서 실행되는 클러스터가 여러 개 있는 경우.
  • VPC에서 서브넷을 공유하는 여러 AWS 서비스가 있는 경우.
  • 각 클러스터에 대해 로드 밸런서가 프로비저닝되는 위치를 보다 세밀하게 제어하려는 경우.

다중 서브넷 검색 오류 해결

1.    두 개의 서로 다른 가용 영역에 서브넷이 두 개 이상 있어 Application Load Balancer를 생성하기 위한 요구 사항을 충족하는지 확인합니다.

참고: 단일 서브넷으로 네트워크 로드 밸런서를 생성할 수 있습니다.

2.    각 서브넷에 대해 최소 /27 비트마스크(예: 10.0.0.0/27)와 8개 이상의 사용 가능한 IP 주소가 있는 CIDR 블록을 지정합니다.

3.    서브넷의 태그 형식이 올바른지 확인합니다. 예를 들어, 태그의 앞과 뒤에는 공백이 없어야 합니다.


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


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