1 분 소요

새로운 플랫폼이나 오픈 소스를 도입할 때 흔히 공식 문서를 참고하는데요. 하지만 사용하려는 기술의 벤더가 제공하는 공식 문서대로 따라했는데 원하는 방식대로 동작하지 않았던 경험을 다들 한번쯤 겪어보셨을 수도 있습니다.

저는 AWS EKS 클러스터를 공부하던 중 Load Balancer를 배포하기 위해 관련 AWS Documentation들을 참고하여 sample 실습을 해봤는데요. CSP가 직접 제공하는 매뉴얼이라서 순서대로 따라하기만 하면 될 줄 알았지만 결과는 그렇지 않았습니다. NLB를 배포하기 위해 Load Balancer Controller를 설치하고 로드밸런서 서비스 매니페스트를 적용했는데, 서비스와 NLB 자체는 생성됐지만 고유의 external-ip 주소를 가져야 할 서비스에 주소가 mapping되지 않았고 대상 그룹에 sample 디플로이먼트 내 파드들 또한 추가되지 않았습니다. 당연히 외부에서 서비스에 접근할 수도 없었고요.

스크린샷 2024-11-18 133938.png

스크린샷 2024-11-18 134433.png

AWS Load Balancer Controller

EKS 클러스터 내 LoadBalancer 서비스를 생성하면 AWS API를 통해 ELB를 생성하고 통합할 수 있도록 지원하는 컨트롤러입니다. 정의된 LoadBalancer 매니페스트 내 Annotations 값을 참조하여 ELB를 생성하는 역할을 합니다.

Network Load Balancer

외부 요청을 L4 기반으로 각 타겟에 분산하는 로드밸런서로 주로 게임 혹은 미디어 스트리밍 서비스에 사용되고 있습니다. 고정 IP를 갖고 특정한 형식의 도메인과 mapping할 수 있습니다.

원인 분석

공식적으로 제공된 문서를 따라했는데 오류가 발생하였다는 점이 당황스러웠지만 차근차근 원인을 분석해보기로 했습니다. 설치한 Load Balancer Controller 파드 로그와 로드밸런서 서비스를 describe했을 때 출력되는 이벤트를 확인한 결과 다음과 같은 메시지를 공통적으로 출력하는 것을 확인할 수 있었습니다.

kubectl logs -n nlb-sample-app [Load Balancer Controller 파드명]
kubectl describe svc -n nlb-sample-app nlb-sample-service

“is not authorized to perform: elasticloadbalancing:DescribeListenerAttributes because no identity-based policy allows the elasticloadbalancing:DescribeListenerAttributes action”

Load Balancer Controller를 설치할 때 첫번째로 NLB를 배포하기 위한 IAM 역할(ServiceAccount)을 생성하게 됩니다. 이 역할에 연결하기 위한 정책을 공식 문서에 명시된 레포지토리에서 JSON 파일을 다운로드 받은 다음 생성하게 되는데,

정책 파일에 ‘elasticloadbalancing:DescribeListenerAttributes’ 액션이 허용되어 있지 않아 리스너의 정보를 읽어올 수 없다는 메시지를 확인할 수 있었습니다.

해결

20241109_AWSLoadBalancerControllerIAMPolicy_수정.png

AWS 콘솔에서 직접 연결된 IAM 정책에 해당 액션을 추가해주니 정상적으로 external-ip가 mapping되고 리스너가 트래픽을 전달하는 대상 그룹에 sample 파드가 추가되는 것을 확인할 수 있었습니다.

loading-ag-237

스크린샷 2024-11-18 135602.png

결론

때로는 공식 문서가 정답이 아닌 경우가 생길 수 있습니다. 가장 신뢰할 만한 지침서가 되지만 기술 벤더의 사정에 따라 Deprecate된 기능의 문서를 여전히 지원하기도 하고 완전한 표준이 될 만한 문서 또한 개인 환경에 따라 정상적으로 적용되지 않기도 합니다. 각자 프로젝트를 진행하는 환경에서 매뉴얼을 정확하게 따라했음에도 불구하고 오류가 발생한다면 그럼에도 불구하고 이를 해결할 수 있는 방법은 스스로 아는 관련 배경 지식이나 공식 문서 상의 다른 페이지, 다른 팀원과의 토의로 충분히 해결하고 적용해보면 좋은 경험치가 될 수 있습니다.

공식 문서

AWS Load Balancer Controller

Network Load Balancing

 

댓글남기기