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
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220628_2_k8s_headless 서비스 (0) | 2022.06.28 |
---|---|
220628_1_k8s_프로브-readinessProbe (0) | 2022.06.28 |
220624_2_k8s_연결 서비스_NodePort (0) | 2022.06.25 |
220624_1_k8s_클러스터 내부 서비스-Cluster IP (0) | 2022.06.24 |
220623_2_k8s_컨트롤러-Job Controller (0) | 2022.06.23 |