노드포트 타입 서비스는 외부 클라이언트에서 접속했을 때 특정 도메인이 아닌 특정 노드가 실제로 사용하는 IP 주소를 지정해서 접속한다.

하지만 노드 IP는 변경될 수 있고, 80, 443 등 기본 포트가 아닌 특수 포트 30000 ~ 32767 중 하나의 포트를 사용해야 하므로 실제 서비스에 적응하기는 어렵다.

이를 해결하기 위해 쿠버네티스는 부하분산이 가능한 로드밸런서 타입의 서비스를 제공한다.

 

  • NodePort: 100.2.3.4:30000 접속
  • Load-Balancer: http(s)://www.myweb.com 접속

 

*퍼블릭 클라우드에서는 로드밸런서를 사용하면 추가 비용이 발생하기 때문에 주로 Ingress를 사용해 비용을 절감한다.

 

대표적인 LB 솔루션은 MetalLB와 Porter가 있다. (둘 다 CNCF 프로젝트)

MetalLB는 쿠버네티스 자체 솔루션에 포함되지 않은 외부 솔루션이다.


1.헬름을 이용한 MetalLB 설치

https://metallb.universe.tf

 

1. 로드밸런서에 할당할 외부에서 접속 가능한 IP 대역을 지정한다..

2. 헬름을 이용해 MetalLB를 설치한다.

3. 테스트 용도의 데모 'voting-app' 어플리케이션을 설치한다. 프론트엔드 웹에서 사용하는 서비스 타입(vote)을 로드밸런서로 지정한다.
각 파드에 정상적으로 부하분산이 되는지 확인한다.


 

'Kubernetes > 샘플' 카테고리의 다른 글

쿠버네티스 서비스(service) 사용하기 (1)  (0) 2024.02.22
Helm 헬름 활용(3)  (0) 2024.02.19
Helm 헬름 활용(2)  (0) 2024.02.19
Helm 헬름 활용(1)  (0) 2024.02.19
잘못된 pod 생성 트러블 슈팅  (0) 2024.02.15

모든 쿠버네티스 서비스는 기본 설정으로 부하분산을 지원한다.

 

쿠버네티스의 모든 노드에서 실행 중인 kube-proxy 파드는 노드 내에서 실행 중인 모든 파드의 네트워크 트래픽을 처리한다.

 

kube-proxy는 쿠버네티스 서비스와 연동해서 파드의 모든 인그레스(Ingress), 이그레스(egress) 통신을 처리한다.

 

kube-proxy는 기본 설정으로 IPVS(IP Virtual Server) 모드로 동작한다.

kube-proxy 모드 관련 설정은 kube-proxy 설정 파일인 컨피그맵에서 확인 가능하다.


kubectl describe cm -n kube-system kube-proxy

...
mode: ipvs
...

그림1. kube-proxy의 부하분산 아키텍처

 

#파드의 수량을 5개로

k scale deployment nginx-hello --replicas 5

 

 

kube-proxy IPVS모드에서 내부적으로 처리하는 라우팅 규칙 조회 ipvsadm 명령어

# 클러스터 노드 접속 후 명령어 호출 Cluster-IP 기입

sudo ipvsadm -Ln | grep -A5 -E '{cluster-ip}'

 

# 동일하게  노트포트 30080포트에 대해 라우팅 테이블을 확인

sudo ipvsadm -Ln | grep -A5 30080

 

 

 

노드포트 몇 가지 한계

1. 웹서비스에서 사용하는 80, 443 등 well-known 포트의 사용이 불가능하다는 것 (30000 ~32767 포트 중 하나를 사용 가능)

2. 노드의 ip 중 하나를 지정해야 하므로 서비스 안정성 및 부하분산 문제가 있다는 것
    (현업에서는 별도의 물리 L4 스위치를 사용해 부하분산 기능을 사용하기도 함. 물리 L4 스위치의 vip에 할당하는 Real IP에
     전체 클러스터 노드의 IP를 각각 등록함)

 

3. 노드 ip 주소가 변경되면 외부 접속용 ip 주소도 함께 변경해야 하는 문제가 있음

 => 이를 해결할 수 있는 LB 타입 서비스가 있음


그림1출처: https://rtfm.co.ua/en/kubernetes-service-load-balancing-kube-proxy-and-iptables/

'Kubernetes > 이론' 카테고리의 다른 글

쿠버네티스 스토리지  (0) 2024.02.26
쿠버네티스 DNS 기능 이해  (0) 2024.02.22

https://www.samsungsds.com/kr/insights/gitops.html

'DevOps' 카테고리의 다른 글

APM, JAVA Agent  (0) 2024.03.06

+ Recent posts