■ MetalLB

MetalLB는 표준 라우팅 프로토콜을 사용하여, 베어 메탈에 Kubernetes 클러스터에 대한 외부 로드 밸런서의 구현을 제공한다.


Kubernetes는 베어 메탈 클러스터를 위한 네트워크 로드 밸런서 (LoadBalancer 유형의 서비스) 구현을 제공하지 않는다.

(Kubernetes가 제공하는 Network LB의 구현은 다양한 IaaS 플랫폼 (GCP, AWS, Azure ...)을 호출하는 모든 코드임, 즉 default Cloud환경에서만 지원)

따라서, 베어 메탈 환경에서도, Cloud와 같이 안전하고 빠른 LoadBalancer 기능을 지원하기 위해, MetalLB 프로젝트가 시작되었다.


<설치>

Installation With Kubernetes Manifests


> kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.7.3/manifests/metallb.yaml


(yaml 파일의 버전은 metallb 홈페이지의 installation을 참고하여 적용하도록 한다.)



Installation With Helm


> helm install --name metallb stable/metallb
  • helm의 경우 stable 저장소에 업데이트 되는 interval이 존재한다. 


<설정>

ConfigMap yaml 정의


apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 180.70.98.66-180.70.98.71

이젠, On-Premise 환경에서도 LoadBalancer Type의 서비스 정의 가능 및 Ingress Resource 정의 및 사용 가능 하다!

■ Service External IP Flag VS LoadBalancer Type

ExternalIps는 단지, 서비스에(all Type) Cluster내 특정 Node의 IP를 Attatch하여, 이 IP를 통해 외부로 해당 서비스를 노출하는 것 뿐이다.

Kubernetes는 이 External Ip의 존재를 알지 못하며, 관리하지도 않는다. 따라서 사용자(어드민)가 프로비저닝하고 관리한다.


LoadBalancer Type의 서비스는 L7 네트워크 로드밸런스, 즉 보안, 암호화 설정 등 추가적인 네트워크 스펙 구현이 가능하다.

(소프트웨어 L7 Switch 이며, On-Premise 환경에서는 외부 로드 밸런서(MetalLB)에 의해 부여된 IP의 노드가 물리적 스위치 장비 역활을 하는 것이다.)

또한, Kubernetes에 의해 자동으로 프로비저닝되고 관리된다.

■ Kubernetes API Gateway Service Expose 시나리오

1) On-Premise 환경에서의 외부 로드 밸런서 구현 → MetalLB project 이용. (설치 및 설정은 위 내용 참고)

2) 노출 domain은 /path로 구분하되, Ingress Resource가 아닌, Zuul Gateway에서 처리한다.

   - Ingress Resource에서의 multi domain은, 구현된 외부 로드밸런서가 DNS와 연계된 최초 진입점이어야 한다.

3) Zuul Gateway를 LoadBalancer Type의 서비스로 등록한다. → MetalLB가 외부 IP 제공 (IP 영역을 MetalLB Config로 관리 - 위 내용 참고)

   - TLS 종단 처리(Https)를 Zuul Gateway LoadBalancer 서비스에서 처리

4) Zuul Gateway 서비스를 여러개로 등록하고, 해당 IP를 별도의 도메인으로 묶어, L7 스위치 장비 뒤에 위치 시킨다.

   - 로드 밸런서 뒤에 다시 복수 로드밸런서가 위치하는 모양새 → On-Premise 환경에서의 일반 노드 장비 안정성에 대한 대비

5) 기타 어드민 관련 서비스는 Ingress를 이용하여 별도의 외부 IP를 부여받고, /path로 구분 → /admin/kube-dashbord, /admin/eureka, /admin/grafana 등등

   또는, metalLB에서 제공하는 IP address sharing 옵션 적용 (metallb.universe.tf/allow-shared-ip 어노테이션 적용 또는 서비스에 spec.LoadBalancerIP 설정 적용)

   - https://github.com/google/metallb/commit/7d35a52cfbb61ad6e1cc5f375b6384e4a92c7aff


  • No labels
Write a comment…