LoadBalancer Type Service 

EKS에서 LoadBalancer 타입의 Service를 생성하면 Elastic Load Balancer가 생성된다. 

클러스터의 엔드포인트 옵션과 Worker Node의 종류에 따라 생성 가능한 LB의 종류와 생성 위치가 달라진다. 

 

Cluster Endpoint Option에 따른 LB

Private Only: Private Subnet에 모든 자원이 생성되며, Internet-facing LB 생성이 불가능하다. 

Public Only: Worker Node를 포함한 모든 자원이 Public Subnet에 생성된다. 

Private and Public: 외부 엔드포인트가 생기지만 내부 API 요청은 내부 네트워크를 통해 이루어진다. 

 

Worker Node 타입에 따른 LB

EC2: NLB와 CLB를 지원하며, Default로 CLB가 생성된다. 

Fargate: NLB와 CLB 생성이 불가능하며, ALB Ingress Controller만 생성 가능하다. 

 

VPC/Subnet Tagging 적용

EKS의 Kubernetes Control Plane이 LB를 생성할 서브넷을 발견하기 위해서 반드시 태깅이 필요하다. 

Resource Interface Key Value
VPC Private/Public kubernetes.io/cluster/<CLUSTER_NAME> shared
Subnet Private/Public kubernetes.io/cluster/<CLUSTER_NAME> shared
Subnet Private kubernetes.io/role/internal-elb 1
Subnet Public kubernetes.io/role/elb 1

 

NLB 로 서비스 생성하기

서비스 매니페스트에 별도의 annotation을 적용하지 않으면 LB가 CLB로 생성된다. NLB 타입의 LB를 생성하기 위해 매니페스트에 다음 애노테이션을 추가한다. 

service.beta.kubernetes.io/aws-load-balancer-type: nlb

 

Internal LB 적용하기

Public 또는 Public/Private 엔드포인트를 갖는 클러스터를 생성 한 경우 별도의 애노테이션을 적용하지 않으면 Internet-facing LB가 생성되므로 Internal LB를 생성하기 위해 다음 애노테이션을 서비스 매니페스트에 적용한다. 

service.beta.kubernetes.io/aws-load-balancer-internal: "true"

 

ALB Ingress Controller

ALB Ingress Controller를 생성하면, EKS에서 Ingress를 생성할 때 외부에서 ALB를 생성하게 된다. Ingress Controller를 생성하기 위해 다음 애노테이션을 인그레스 매니페스트에 추가한다. 

kubernetes.io/ingress.class: alb