쿠버네티스 교육/강의 내용 정리

220627_3_k8s_연결 서비스_MetalLB

kimhope 2022. 6. 27. 10:49
728x90

MetalLB


MetalLB란

온프레미스에서 로드밸런서를 제공하는 MetalLB

  • 온프레미스에서 로드밸런서를 사용하기 위해 내부에 로드밸런서 서비스를 받도록 구성하는데 필요함
  • 특별한 네트워크 설정이나 구성이 필요하지 않으며 기존의 L2(ARP/NDP), L3(BGP) 네트워크로 로드밸런서를 구현함

 

MetalLB 오브젝트

  • 컨트롤러: 작동 방식(프로토콜)을 정의하고 EXTERNAL-IP를 부여해 관리함
  • 스피커: 정해진 작동 방식(L2/ARP, L3/BGP)에 따라 경로를 만들 수 있도록 네트워크 정보를 광고하고 수집하여 각 파드의 경로를 제공함

 


 

MetalLB 설치

addon을 이용한 설치

  • addons.yml 파일 수정
vagrant@kube-master1:~/kubespray$ vi inventory/mycluster/group_vars/k8s-cluster/addons.yml

metrics_server_enabled: true
ingress_nginx_enabled: true
metallb_enabled: true
metallb_ip_range: "192.168.56.200-192.168.56.299"
metallb_protocol: "layer2"

 

 

  • k8s-cluster.yml 파일 수정
vagrant@kube-master1:~/kubespray$ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
kube_proxy_strict_arp: true

 

  • 플레이북 실행
ansible-playbook -i inventory/mycluster/inventory.ini -v --become --become-user=root cluster.yml

 

설치 완료

  • metallb-system 네임스페이스 확인
vagrant@kube-master1:~/kubespray$ kubectl get namespace
NAME              STATUS   AGE
default           Active   6d19h
ingress-nginx     Active   6d19h
kube-node-lease   Active   6d19h
kube-public       Active   6d19h
kube-system       Active   6d19h
metallb-system    Active   42s

 

  • metallb-system의 오브젝트 정보 확인
vagrant@kube-master1:~/kubespray$ kubectl get all -n metallb-system

 

로드밸런서 EXTERNAL-IP의 Pending 상태

  • 외부 IP를 부여받지 못함

 

 


 

MetalLB 재설치

설치된 MetalLB 삭제

  • 설치된 최신 버전을 삭제하고 v0.9.3으로 재설치
vagrant@kube-master1:~/test$ kubectl delete secret/memberlist  -n metallb-system
secret "memberlist" deleted

vagrant@kube-master1:~/test$ kubectl delete configmap/config -n metallb-system
configmap "config" deleted

vagrant@kube-master1:~/test$ kubectl delete -f  https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml

vagrant@kube-master1:~/test$ kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
namespace "metallb-system" deleted

 

MetalLB v0.9.3 설치

  • false > true 수정
vagrant@kube-master1:~/kubespray$ kubectl edit configmap -n kube-system kube-proxy
configmap/kube-proxy edited

strictARP: true

 

  • MetalLB 네임스페이스 생성
vagrant@kube-master1:~/kubespray$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
namespace/metallb-system created

 

  • MetalLB Components 생성
vagrant@kube-master1:~/kubespray$ kubectl apply -f  https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml

 

 

  • Secret 생성
vagrant@kube-master1:~/kubespray$ kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
secret/memberlist created

 

  • 라우팅 처리를 위한 ConfigMap 생성
vagrant@kube-master1:~/kubespray$ cat << EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.56.200-192.168.56.229
> EOF
configmap/config created

 

  • 시스템 재부팅
vagrant@kube-master1:~/kubespray$ sudo shutdown -r now

 

  • metallb-system 네임스페이스 확인
vagrant@kube-master1:~$ kubectl get namespace

 

  • metallb-system 네임스페이스 정보 확인
  • 모든 오브젝트가 READY 상태인지 확인
vagrant@kube-master1:~$ kubectl get all -o wide -n metallb-system

 

  • 로드밸런서에 외부 IP가 부여된 것을 확인할 수 있음
vagrant@kube-master1:~$ kubectl get all -o wide

 

  • 웹 브라우저에서 192.168.56.200 으로 접속하여 확인

 

 

728x90