서론

 

쿠버네티스 클러스터에 존재하는 Pod 서비스를 외부로 노출시키기 위한 가장 원시적인 방법은 NodePort를 이용하는 것입니다. 하지만 NodePort는 인스턴스의 IP가 변경되면 해당 서비스에도 이를 반영해야합니다. 따라서 Cloud 벤더에서는 LoadBalancer나 Ingress 타입을 통해 서비스를 노출할 수 있도록 지원합니다.

 

이번 포스팅에서는 온 프레미스 환경에서 LoadBalancer 타입을 지원하기 위한 MetalLB를 설치하는 방법을 다루고자 합니다.

 


문제 상황

 

1. nginx Deployment를 하나 생성합니다. (kubectl create deploy nginx --image=nginx)

 

 

 

 

2. 생성한 Deployment를 LoadBalancer 타입으로 서비스를 노출시킵니다.

( kubectl expose deploy nginx --port 80 --type LoadBalancer)

 

 

 

 

3.  서비스의 상태를 모니터링합니다. (watch kubectl get svc)

 

 

 

 

아무리 기다려도 해당 Service 오브젝트의 External-IP는 Pending 상태입니다. 이는 LoadBalancer가 존재하지 않기 때문입니다.

 

 

4.  Service와 Deployment 오브젝트를 제거합니다.

 - kubectl delete svc nginx

 - kubectl delete depoly nginx

 

 

 

 


Metal LB 설치

 

MetalLB 공식 홈페이지 설치 가이드대로 차근차근 설치하겠습니다.

 

1. MetalLB를 위한 네임스페이스를 생성합니다.

(kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml)

 

 

 

 

2. MetalLB Components를 생성합니다.

(kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml)

 

 

 

 

3. Secret을 생성합니다.

(kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)")

 

 

 

 

4. 라우팅 처리를 위한 ConfigMap을 생성합니다.

 

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

 

 

 

 

5. 기존과 마찬가지로 nginx를 Deploy한 다음 LoadBalancer 타입으로 노출시킨 결과 이전과는 다르게 nginx Service 오브젝트의 External IP가 할당된 것을 확인할 수 있습니다.

 

 

 

 

+ Recent posts