Loadbalancer 기반 배포
update : 2025-01-25 / 2h
Loadbalancer 서비스 타입 소개.
Loadbalancer 기반의 서비스 타입은 현재 CLB (Classic Load Balancer)와 NLB(Network Load Balancer) 2가지 타입을 지원하고 있습니다. 모두 Port 기반의 LB를 제공하고 있으며, Kubernetes 의 Node와 Service 전면에서 서비스를 제공합니다.
CLB Loadbalancer 서비스 기반 구성
1.CLB 기반 ServiceType
Service Type 필드를 LoadBalancer로 설정하여 프로브저닝합니다. Cloud Service Provider의 기본 로드밸런서 타입을 사용하게 되며, AWS의 경우에는 CLB를 사용합니다. CLB는 내부 또는 외부 로드밸런서로 지정이 가능합니다.
2. CLB Service Type 트래픽 흐름
Traffic 흐름은 다음과 같습니다.
외부 사용자는 CLB DNS A Record:Port로 접근
CLB는 NodePort로 LB 처리 (NodePort는 임의로 할당 됩니다.)
NodePort는 ClusterIP로 Forwarding되고 IPTable에 의해 분산 처리 됩니다.

3. CLB Service 시험
CLB Loadbalance Service Type 을 시험하기 위해 아래와 같이 namespace와 pod,service를 배포합니다.
정상적으로 배포되었는지 아래 Command로 확인합니다.
정상적으로 배포되었는지 아래 Command로 확인합니다.
다음과 같은 결과를 얻을 수 있습니다
아래와 같이 구성됩니다 . nodeport는 별도의 지정이 없으면 생성할때 자동으로 지정됩니다.

아래와 같이 배포된 pod에 접속을 편리하게 하기 위해 IDE terminal Shell에 등록 합니다. (Option)
ClbTestPod01에 접속해서 아래와 같이 확인해 봅니다. K9s에서 접속해도 됩니다.
IDE Terminal에서 CLB External IP:8080 으로 접속합니다.
Node에서 iptable에 설정된 NAT Table, Loadbalancing 구성을 확인해 봅니다.
CLB에서는 아래와 같은 다양한 Annotation을 추가하여 CLB의 속성 또는 AWS 자원을 연결해서 사용할 수 있습니다
CLB Application 배포
다음과 같은 구성을 통해서 CLB 서비스를 구현해 봅니다.
namespace : clb-test
eksdemo-frontend service type : LoadbBlancer
eksdemo-crystal service type: Cluster-IP
eksdemo-nodejs service type: Cluster-IP

4. FrontEnd 어플리케이션 배포와 서비스 구성.
기본 Loadbalacer 구성을 위해 새로운 Namespace를 생성합니다.
어플리케이션을 배포하고, service를 구성합니다.
정상적으로 Pod가 배포되었는지 아래 명령을 통해서 확인해 봅니다.
Replica를 3개로 늘려서 LB가 FrontEnd에서 정상적으로 이뤄지는 지 확인합니다.
아래 출력되는 결과의 EXTERNAL-IP를 복사해서 브라우져 창에서 실행해 봅니다.
CLB 접속 URL 주소는 아래 결과로 출력할 수 있습니다.
출력결과 예시

앞서 설치해 둔 K9s 유틸리티를 통해서 , 현재 배포된 Pod들의 상태를 확인해 봅니다.
5. BackEnd 어플리케이션 배포
Backend 어플리케이션 Nodejs와 Crystal을 배포합니다. 이 2개의 어플리케이션들은 Private Subnet에 배포할 것입니다. 이 구성은 앞서 이미 Yaml 파일의 Deployment에서 nodeSelector로 지정하였습니다.
정상적으로 Pod가 배포되었는지 아래 명령을 통해서 확인해 봅니다.
Replica를 3개로 늘려서 Service Type이 없는 경우, BackEnd에서 정상적으로 이뤄지는 지 확인합니다.

k9s 를 통해 Pod의 구성을 확인합니다.

6. Loadbalancer 확인.
이제 서비스 타입을 확인하기 위해서 EC2 대시보드에서 Loadbalancer를 확인합니다.
CLB의 DNS Name을 복사해서 Web Browser에서 입력합니다.

아래 kubectl 명령을 통해 service type을 확인해 봅니다.
7. Super Mario 어플리케이션 배포하기
CLB 로드밸런서를 사용하는 간단한 게임 앱을 배포해 봅니다.
정상적으로 배포되었는지 확인해 봅니다.
아래와 같이 배포된 것을 확인 할 수 있습니다.
실제 deployment에 사용된 YAML 을 확인해 봅니다.
아래 명령을 통해서 게임앱 URL을 확인하고에 브라우저를 통해 접속해 봅니다.
3~4분 뒤에 웹 브라우저를 통해 위 명령에서 실행된 URL을 접속하면 , CLB를 통해서 아래와 같이 게임이 실행됩니다.

"s" - 게임시작
방향키로 각 스테이지 이동
"s" - 점프
방향키 - 마리오 이동
NLB Loadbalancer 서비스 기반 구성
8. NLB 기반 Service Type
Service Type 필드를 LoadBalancer로 설정하여 프로브저닝합니다. CLB와 다르게 반드시 annotation을 통해 NLB를 지정해야 합니다. NLB도 내부 또는 외부 로드밸런서로 지정이 가능합니다. 또한 NLB는 외부의 IP를 PoD까지 그대로 전달 할 수 있습니다
NLB Annotation
9.NLB Service Type 트래픽 흐름
Traffic 흐름은 다음과 같습니다.
외부 사용자는 NLB DNS A Record:Port로 접근합니다.
NLB는 NodePort로 LB 처리 (NodePort는 임의로 할당 됩니다.)
NodePort는 ClusterIP로 Forwarding되고 IPTable에 의해 분산 처리 됩니다.

10. NLB Service 시험
NLB Loadbalance Service Type 을 시험하기 위해 아래와 같이 namespace와 pod,service를 배포합니다.
정상적으로 배포되었는지 아래 명령어로 확인합니다.
다음과 같은 결과를 얻을 수 있습니다.
아래와 같이 구성됩니다 . nodeport는 별도의 지정이 없으면 생성할때 자동으로 지정됩니다.

아래와 같이 배포된 pod에 접속을 편리하게 하기 위해 IDE terminal Shell에 등록 합니다.
NlbTestPod01에 접속해서 아래와 같이 확인해 봅니다.
IDE Terminal에서 NLB External IP:8080 으로 접속합니다.
Node에서 iptable에 설정된 NAT Table, Loadbalancing 구성을 확인해 봅니다.
NLB는 "externalTrafficPolicy: Local"을 지원합니다. 외부의 소스 IP를 그대로 보존하여, Node로 유입된 Traffic을 Node 내의 PoD로 전달합니다.


아래와 같이 새롭게 서비스와 PoD를 배포하고 확인해 봅니다.
아래와 같이 pod에 접속을 편리하게 하기 위해 IDE terminal Shell에 등록합니다.
NlbTestPod에 접속해서 외부의 Client IP가 보이는지 확인해 봅니다.
Node에서 iptable에 설정된 NAT Table, Loadbalancing 구성을 확인해 봅니다.
NLB기반 Loadbalancer 배포
다음과 같은 구성을 통해서 NLB 서비스를 구현해 봅니다.

namespace : nlb-test
ecsdemo-frontend service type : nlb (external)
ecsdemo-crystal service type: nlb(internal)
ecsdemo-nodejs service type: nlb(internal)
10.FrontEnd 어플리케이션 배포
어플리케이션을 배포하고, service를 구성합니다.
정상적으로 Pod가 배포되었는지 아래 명령을 통해서 확인해 봅니다.
Replica를 3개로 늘려서 LB가 FrontEnd에서 정상적으로 이뤄지는 지 확인합니다.
참조 - 외부 로드밸런서를 위한 Public subnet 태그
키
값
kubernetes.io/role/elb
1
내부 로드밸런서를 위한 Private subnet 태그
키
값
kubernetes.io/role/internal-elb
1
아래 출력되는 결과의 EXTERNAL-IP를 복사해서 브라우져 창에서 실행해 봅니다.

앞서 설치해 둔 K9s 유틸리티를 통해서 , 현재 배포된 Pod들의 상태를 확인해 봅니다.
12.BackEnd 어플리케이션 배포
Backend 어플리케이션 Nodejs와 Crystal을 배포합니다. 이 2개의 어플리케이션들은 Private Subnet에 배포할 것입니다. 이 구성은 앞서 이미 Yaml 파일의 Deployment에서 nodeSelector로 지정하였습니다.
정상적으로 Pod가 배포되었는지 아래 명령을 통해서 확인해 봅니다.
Replica를 3개로 늘려서 Service Type이 없는 경우, BackEnd에서 정상적으로 이뤄지는 지 확인합니다.

k9s 를 통해 Pod의 구성을 확인합니다.

13. Tetris 어플리케이션 배포
NLB 로드밸런서를 사용하는 간단한 게임 앱을 배포해 봅니다.
정상적으로 배포되었는지 확인해 봅니다.
아래와 같이 배포된 것을 확인 할 수 있습니다.
실제 deployment에 사용된 YAML 을 확인해 봅니다.
아래 명령을 통해서 게임앱 URL을 확인하고에 브라우저를 통해 접속해 봅니다.
브라우저를 통해 접속하면 아래와 같이 게임이 실행됩니다.
NLB는 배포시간이 5분 정도 소요 됩니다.

Last updated
Was this helpful?