Metallb 설치하기
쿠버네티스(Kubernetes) 의 서비스(Service) 에 타입에는 Loadbalancer, NodePort 등을 지원한다. 문제는 Loadbalancer 는 클라우드(Cloud) 서비스 사업자를 위한 것으로 AWS, GCP, Azure 에서 제공하는 Loadbalancer 를 위한 것이다.
그런데, 많은 쿠버네티스의 사례를 살펴보면 Loadbalancer 를 사용한 사례가 아주 많다. 그래서 굳이 클라우드 서비스 사업자가 아니라고 하더라도 Loadbalancer 를 사용할 수 있도록 해보자해서 만들어진게 바로 Metallb 이다.
필자는 KVM 리눅스 가상화에 쿠버네티스를 설치했다. KVM 가상 시스템의 게스트 OS 들은 브릿지 네트워크 모드로 이기 때문에 필자의 공유기에서 자동으로 아이피를 할당 받거나, 공유기의 대역에 IP를 고정으로 사용하기도 한다. 필자의 공유기는 192.168.96.0/20 대역폭을 사용하도록 세팅을 해놨기 때문에 할당 가능한 IP는 차고도 넘친다.
Metalb 는 이렇게 외부에서 접속이 가능한 아이피 대역을 할당해 사용한다.
설치
설치를 위해서 필요한게 있는데, CNI 가 먼저 있어야 한다. Flannel, Calico 와 같은 CNI 가 설치가 먼저 되어 있어야 한다. 설치는 설치를 위한 메니페스토 파일을 이용한다.
1 2 |
]$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml ]$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml |
namespace.yaml 은 그냥 네임스페이스를 만들도록 되어 있어서 명령어로도 가능하다.
이렇게 하면 설치는 되지만 아직 동작하지는 않는데, Metallb 에서 사용할 외부 아이피나 운영 모드등을 설정해줘야 하는데, 이는 ConfigMap 를 이용해 다음과 같이 설정해 줘야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 addresses: - 192.168.111.2-192.168.111.100 |
위와같이 Metal Loadbalancer 에서 사용할 외부 주소 IP 주소 대역을 할당해 준다.
또, 이제 Metallb 의 컴포넌트의 통신을 보호하기 위해서 Secret 를 다음과 같이 생성해 준다.
1 2 |
]$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" -o yaml --dry-run=client > metallb-secret.yaml ]$ kubectl apply -f metallb-secret.yaml |
Ingress-nginx 설치
테스트를 위해서 Ingress-nginx 를 설치해 본다. Ingress-nginx 를 설치하게되면 서비스에 Loadbalancer 타입으로 설치가 되는데, EXTERNAL-IP 가 Metallb 에서 할당해준 IP가 할당이 된다.
1 2 3 4 |
$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-nginx-ingress LoadBalancer 10.32.0.46 192.168.111.2 80:32558/TCP,443:30684/TCP 22h kubernetes ClusterIP 10.32.0.1 <none> 443/TCP 96d |
EXTERNAL-IP 에 할당한 IP 로 웹 접속을 하게되면 nginx 가 나오게 된다.