MetalLB와 Ingress Nginx

띠로리·2024년 7월 25일

데브옵스 개념 정리

목록 보기
12/13

MetalLB

MetalLB는 Kubernetes 클러스터에서 로드 밸런서를 제공하는 오픈소스 프로젝트이다. 기본적으로 클라우드 환경에서는 클라우드 제공자가 관리하는 로드 밸런서를 통해 Kubernetes 서비스가 외부 트래픽을 받을 수 있다. 그러나 베어메탈 환경이나 자체 데이터 센터에서 운영되는 Kubernetes 클러스터에서는 클라우드 제공자가 제공하는 로드 밸런서를 사용할 수 없다. MetalLB는 이러한 환경에서 Kubernetes에 로드 밸런싱 기능을 추가한다.

MetalLB의 주요 기능

1. 로드 밸런싱

MetalLB는 Kubernetes 클러스터 외부에서 접근 가능한 IP 주소를 할당학여 서비스에 외부 트래픽을 로드 밸런싱한다.

2. IP 주소 할당

MetalLB는 설정된 IP 풀에서 사용할 수 있는 IP 주소를 서비스에 할당한다. 이를 통해 서비스가 외부에서 접근 가능해진다.

3. 운영 모드

  • Layer2 모드 : 이 모드에서는 MetalLB가 동일 서브넷에 있는 다른 장치들에게 ARP(주소 해석 프로토콜) 응답을 보내 IP 주소를 서비스와 연관시킨다.
  • BGP 모드 : 이 모드에서는 MetalLB가 라우터와 BGP(경계 게이트웨이 프로토콜)를 사용해 IP 주소를 알린다. 이 모드는 더 복잡한 네트워크 설정에서 유용하다.

🚗 로드 밸런싱?

로드 밸런싱은 네트워크 트래픽을 여러 서버 또는 서비스로 분산시키는 기술을 말한다. 이를 통해 시스템의 가용성과 성능을 향상시키고, 특정 서버나 서비스에 과도한 부하가 걸리지 않도록 한다.

로드 밸런싱 알고리즘

  1. 라운드 로빈 (Round Robin)
    들어오는 요청을 순차적으로 각 서버에 분배한다. 모든 서버가 동일한 수의 요청을 처리하도록 한다.

  2. 가중 라운드 로빈 (Weighted Round Robin)
    각 서버에 가중치를 부여하여, 가중치에 비례하여 요청을 분배한다.

  3. 최소 연결 (Least Connection)
    현재 연결 수가 가장 적은 서버에 요청을 분배한다.

  4. IP 해싱 (IP Hash)
    클라이언트의 IP 주소를 해싱하여 특정 서버에 요청을 분배한다. 이를 통해 특정 클라이언트의 요청이 항상 동일한 서버로 라우팅된다.

  5. 랜덤 (Random)
    임의의 서버에 요청을 분배한다.

MetalLB 설치하기

kubenetes가 세팅된 환경이라고 생각하고 진행합니다. 🐟🐟

MetalLB를 설치한다.

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml

MetalLB가 사용할 IP 주소 범위를 정의하는 ippool.yaml 파일을 생성한다. 강사님이 주신 실습 파일의 내용은 다음과 같다.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 10.10.10.240-10.10.10.250
  autoAssign: true
# 파일 적용
kubectl apply -f ippool.yaml

다음은 Layer 2 설정 파일을 생성하고 적용해보자. 마찬가지로 강사님께서 주신 실습 코드이다!

---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: lb-pool
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool
# 파일 적용
kubectl apply -f l2.yaml

이렇게 설정하면 MetalLB가 클러스터 외부에서 접근 가능한 IP 주소를 Kubernetes 서비스에 할당할 수 있게 되어, 베어메탈 환경에서도 클라우드 환경과 유사한 로드 밸런싱 기능을 사용할 수 있다.

Ingress Nginx

Ingress Ngingx는 Kubernetes 클러스터에서 Ingress 리소스를 관리하고, HTTP 및 HTTPS 트래픽을 클러스터 내의 서비스로 라우팅하는 Ingress 컨트롤러다. Kubernetes Ingress는 외부 트래픽을 클러스터 내부의 특정 서비스로 라우팅하는 규칙을 정의하는 리소스이다.

Ingress Nginx의 주요 기능

  1. 트래픽 라우팅
    클러스터 외부에서 들어오는 HTTP 및 HTTPS 트래픽을 적절한 서비스로 라우팅한다.
  2. 로드 밸런싱
    여러 서비스에 걸쳐 트래픽을 분산시키고, 이를 통해 서비스의 가용성과 성능을 향상시킨다.
  3. TLS/SSL 종단
    HTTPS 트래픽을 처리하기 위해 SSL 인증서를 사용하여 TLS/SSL 종단을 제공한다.
  4. 가상 호스팅
    단일 IP 주소에서 여러 도메인 이름을 처리할 수 있다.
  5. 리버스 프록시
    클라이언트의 요청을 받아 적절한 백엔드 서비스로 전달하는 역할을 한다.

Ingress Nginx 설치

우선 Ingress Nginx 컨트롤러를 설치해보자.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml

nginx의 데모를 배포하고 서비스 노출시키면 끝 🐟

kubectl create deployment ingress-nginx-demo --image=nginx --port=80

kubectl expose deployment ingress-nginx-demo
profile
차곡 차곡 기록 쌓기

0개의 댓글