VirtualBox, VIR, On-Primise에서 Kubernetes를 설치할 경우 Loadbalancer가 문제가된다.
서비스를 오픈해야하는데, nodeport를 오픈하기에는 부담스럽다.
이럴 때 대체안으로 MetalLB로 대안으로 설치할 수 있다.

MetalLB는 현재 최신 버전은 v0.13.3을 기준으로 설치한다
  - https://metallb.universe.tf/installation/

 

1. metaLB 설치 전 kube-proxy 설정 변경

아래 내용과 같이 "strictARP: false"를 "strictARP: true"로 변경한다.

# kubectl edit configmap -n kube-system kube-proxy
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

strictARP: false -> true

 

2. metaLB 배포

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

문서에 정리된 위 명령어로 metalLB 관련 프로그램을 설치한다.

 

3. metaLB관련 IP AddressPool 등록

  - https://metallb.universe.tf/configuration/

아래와 같이 metalLB-addresspool.yaml 파일을 생성한다.

# vi metalLB-addresspool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.122.100-192.168.122.200

만들어진 파일을 kubernetes에 적용한다.

# kubectl apply -f metalLB-addresspool.yaml

 

4. 테스트용 배포앱 배포

아래와 같이 deployment, service를 설정한 deploy-nginx.yaml 파일을 배포해서 LB가 정상적으로 생성되는지 확인한다.

deploy-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: nginx
  type: LoadBalancer

 

# kubectl apply -f deploy-nginx.yaml

 

5. 정상 배포 확인

root@ubuntu2004-001:~# kubectl get deployment,service
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           24m

NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
service/kubernetes   ClusterIP      10.96.0.1       <none>            443/TCP        3h22m
service/my-nginx     LoadBalancer   10.110.240.62   192.168.122.100   80:30295/TCP   24m

위와 같이 Service에 LoadBalancer Type으로 정상적으로 생성되면 metalLB가 정상적으로 설치된 것이다.

 

 - On-Primise Kubernets 1.21 구축(VirtualBox or VIRT) - 01. 구성 환경
 - On-Primise Kubernets 1.21 구축(VirtualBox or VIRT) - 02. 시스템 설정
 - On-Primise Kubernets 1.21 구축(VirtualBox or VIRT) - 03. cluster 구성