AWS Load Balancer Controller로 인터넷 트래픽 라우팅
AWS Load Balancer Controller로 인터넷 트래픽 라우팅
AWS Load Balancer Controller는 Kubernetes 클러스터용 AWS Elastic Load Balancer를 관리합니다. 컨트롤러를 사용해 클러스터 앱을 인터넷에 노출할 수 있습니다. 컨트롤러는 클러스터의 Service 또는 Ingress 리소스를 가리키는 AWS 로드 밸런서를 프로비저닝합니다. 즉, 컨트롤러는 클러스터의 여러 Pod를 가리키는 단일 IP 주소 또는 DNS 이름을 만듭니다.
컨트롤러는 Kubernetes Ingress 또는 Service 리소스를 감시합니다. 이에 응답하여 적절한 AWS Elastic Load Balancing 리소스를 만듭니다. Kubernetes 리소스에 주석(annotation)을 적용하여 로드 밸런서의 특정 동작을 구성할 수 있습니다. 예를 들어 주석을 사용해 AWS 보안 그룹을 로드 밸런서에 연결할 수 있습니다.
출처: 문서
본문
컨트롤러는 다음 리소스를 프로비저닝합니다.
Kubernetes Ingress
Kubernetes Ingress를 만들면 LBC가 AWS Application Load Balancer(ALB)를 만듭니다. Ingress 리소스에 적용할 수 있는 주석을 검토하세요.
LoadBalancer 유형의 Kubernetes 서비스
LoadBalancer 유형의 Kubernetes 서비스를 만들면 LBC가 AWS Network Load Balancer(NLB)를 만듭니다. Service 리소스에 적용할 수 있는 주석을 검토하세요.
과거에는 인스턴스 대상에는 Kubernetes 네트워크 로드 밸런서가, IP 대상에는 LBC가 사용되었습니다. AWS Load Balancer Controller 버전 2.3.0 이상에서는 두 대상 유형 모두로 NLB를 만들 수 있습니다. NLB 대상 유형에 대한 자세한 내용은 Network Load Balancers User Guide의 대상 유형(Target type)을 참조하세요.
컨트롤러는 GitHub에서 관리되는 오픈 소스 프로젝트입니다.
컨트롤러를 배포하기 전에 Application Load Balancers로 애플리케이션 및 HTTP 트래픽 라우팅과 Network Load Balancers로 TCP 및 UDP 트래픽 라우팅의 사전 요구 사항과 고려 사항을 검토할 것을 권장합니다. 해당 주제에서는 AWS 로드 밸런서를 포함한 샘플 앱을 배포합니다.
Kubernetes Gateway API
AWS Load Balancer Controller 버전 2.14.0 이상에서는 Kubernetes Gateway를 만들면 LBC가 AWS Application Load Balancer(ALB)를 만듭니다. Kubernetes Gateway는 Ingress보다 더 많은 구성을 표준화하며, Ingress는 많은 일반 옵션에 사용자 지정 주석이 필요했습니다. Gateway 리소스에 적용할 수 있는 구성을 검토하세요. Gateway API에 대한 자세한 내용은 Kubernetes 문서의 Gateway API를 참조하세요.
컨트롤러 설치
다음 절차 중 하나로 AWS Load Balancer Controller를 설치할 수 있습니다.
- Amazon EKS를 처음 사용한다면 Helm으로 설치할 것을 권장합니다. AWS Load Balancer Controller 설치를 단순화하기 때문입니다. 자세한 내용은 Helm으로 AWS Load Balancer Controller 설치를 참조하세요.
- 퍼블릭 컨테이너 레지스트리에 대한 네트워크 액세스가 제한된 클러스터 같은 고급 구성에는 Kubernetes 매니페스트를 사용합니다. 자세한 내용은 매니페스트로 AWS Load Balancer Controller 설치를 참조하세요.
지원 중단된 컨트롤러 버전에서 마이그레이션
지원 중단된 버전의 AWS Load Balancer Controller가 설치되어 있다면 지원 중단된 ALB Ingress Controller에서 앱 마이그레이션을 참조하세요.
지원 중단된 버전은 업그레이드할 수 없습니다. 제거한 뒤 현재 버전의 AWS Load Balancer Controller를 설치해야 합니다.
지원 중단된 버전에는 다음이 포함됩니다.
- AWS Load Balancer Controller의 전신인 AWS ALB Ingress Controller for Kubernetes("Ingress Controller")
- AWS Load Balancer Controller의
0.1.x버전
레거시 클라우드 공급자
Kubernetes에는 AWS용 레거시 클라우드 공급자가 포함되어 있습니다. 레거시 클라우드 공급자는 AWS Load Balancer Controller와 유사하게 AWS 로드 밸런서를 프로비저닝할 수 있습니다. 레거시 클라우드 공급자는 Classic Load Balancer를 만듭니다. AWS Load Balancer Controller를 설치하지 않으면 Kubernetes는 기본적으로 레거시 클라우드 공급자를 사용합니다. AWS Load Balancer Controller를 설치하고 레거시 클라우드 공급자 사용을 피해야 합니다.
중요
버전 2.5 이상에서 AWS Load Balancer Controller는
type: LoadBalancer인 Kubernetes 서비스 리소스의 기본 컨트롤러가 되며 각 서비스에 대해 AWS Network Load Balancer(NLB)를 만듭니다. 이는 서비스에 대한 mutating webhook을 만들어type: LoadBalancer인 새 서비스의spec.loadBalancerClass필드를service.k8s.aws/nlb로 설정함으로써 수행됩니다. helm 차트 값enableServiceMutatorWebhook을false로 설정하면 이 기능을 끄고 기본 컨트롤러로 레거시 Cloud Provider 사용으로 되돌릴 수 있습니다. 이 기능을 끄지 않으면 클러스터는 서비스에 대해 새 Classic Load Balancer를 프로비저닝하지 않습니다. 기존 Classic Load Balancer는 계속 동작합니다.