로드밸런서 서비스를 이용하기 위해서는 다른 오픈소스를 이용해야 하는데
그 중 MetalLB 를 이용해서 구성
1. MetalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml
다른 버전을 받으려면 v0.11.0 대신 다른 버전 입력. (현재 v0.14.3)
metallb 공식 홈페이지나 github 참고
설치 후에 controller 와 speaker POD 가 정상기동되었는지 확인
[k8s-master@k8s-master loadbalancer]$ k get po -n metallb-system NAME READY STATUS RESTARTS AGE controller-7dcc8764f4-t5q6m 1/1 Running 0 178m speaker-689sc 1/1 Running 0 178m speaker-c2b8c 1/1 Running 0 178m speaker-dzx8x 1/1 Running 0 178m speaker-gjzt9 1/1 Running 0 178m
pod 마다 한개씩 speaker 가 뜨고 controller 하나 설치 확인
설치가 잘 안되면 kubectl logs 나 kubectl describe 명령어를 이용하여 확인
configmap 을 다음과같이 등록
[k8s-master@k8s-master loadbalancer]$ cat metallb-config.yaml apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.133.240-192.168.133.250 #원하는 IP대역대 등록 [k8s-master@k8s-master loadbalancer]$ kubectl apply -f metallb-config.yaml [k8s-master@k8s-master loadbalancer]$ k get cm -n metallb-system NAME DATA AGE config 1 3h kube-root-ca.crt 1 3h36m [k8s-master@k8s-master loadbalancer]$
이후 서비스 등록되었는지 확인
아직 잘 모르니 추가설정은 하지않고 기본값으로만 적용
[k8s-master@k8s-master loadbalancer]$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hpa-target-service LoadBalancer 10.233.20.107 192.168.133.240 80:31356/TCP 18m kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 39d
서비스 등록 확인하였다.
정상 등록되었는지 테스트
kubectl create deploy nginx --image=nginx kubectl expose deploy nginx --port 80 --type LoadBalancer
nginx 이미지를 이용해 pod를 생성하고, 로드밸런서로 외부에 노출
[k8s-master@k8s-master loadbalancer]$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hpa-target-service LoadBalancer 10.233.20.107 192.168.133.240 80:31356/TCP 20m kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 39d nginx LoadBalancer 10.233.2.50 192.168.133.241 80:30238/TCP 2s
192.168.133.241 이라는 외부 IP가 생긴것을 확인 후에 접속해본다.

이미지를 nginx 가 아니라 nginxdemos/hello 로 하면 IP가 나오는데
레플리카를 여러개 해놓고 호출을 보내면 로드밸런싱이 잘 되는 모습을 볼 수 있음.