Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
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

...

이젠, 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