쿠버네티스

MetalLB 사용해서 외부로 노출 시키기

황동리 2024. 4. 15. 10:36
반응형

바닐라 쿠버네티스에서 서비스를 외부로 노출시키는 방법으로 LoadBalancer 타입이 존재하는데,
일반적인 바닐라 쿠버네티스에서는 LoadBalancer 서비스를 사용할 수 없습니다.

때문에, MetalLB를 설치하여 외부로 서비스를 노출 시켜보도록 하겠습니다.


MetalLB를 설치하는 방법은 크게 두 가지가 있습니다.

1) Kubernetes 매니페스트 파일 사용
2) Helm 패키지를 사용하여 설치

이번엔 1번 방법을 사용하여 설치를 해보도록 하겠습니다.


MetalLB 설치

MetalLB 설치 방법은 공식 홈페이지에 모두 나와있습니다.
(https://metallb.universe.tf/installation/)

우선 kube-proxy 설정을 변경 해줍니다.

# kubectl edit configmap -n kube-system kube-proxy
=> strictARP: false -> true로 변경

이제 매니페스트 파일 적용을 하도록 하겠습니다.

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

 

apply 이후에 설치가 완료되었는지 확인, 아래 사진과 같은 결과가 나오면 정상적으로 설치가 완료된 것 입니다.

# kubectl get all -n metallb-system


L2 모드를 사용하여 서비스 외부 노출

우선 External IP로 사용될 IP-Pool을 정의 해줍니다.

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 10.10.91.100-10.10.91.110
  autoAssign: true		# autoAssign 옵션을 true 해두면 로드밸런서 타입으로 서비스를 생성하면 자동으로 위의 IP 대역에서 IP를 할당한다.

 

그리고 L2Advertisement를 정의해주면 됩니다.

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  namespace: metallb-system
  name: example
spec:
  ipAddressPools:
  - first-pool		# 앞서 정의한 IP-Pool 이름을 넣어준다.
  nodeSelectors:	# first-pool IP를 통해서 들어오는 노드 선택
  - matchLabels:
      kubernetes.io/hostname: worker1		
  - matchLabels:
      kubernetes.io/hostname: worker2

 

서비스에 할당된 External-IP 로 접속

 

nginx 파드에서 index.html 내용을 변경해서 확인을 해보면 아래와 같이 로드밸런싱 된다.

 

이상 입니다.

반응형