kubernetes
kubernets Metal LB 설치하기
mingming_96
2023. 8. 30. 14:15
Metal LB
AWS, GCP , AZURE 등 Cloud 플랫폼에서 자체적인 로드밸런서를 제공해주지만 온프레미스 클러스터에선 로드밸런싱 기능을 제공하는 패키지 설치가 추가로 필요합니다.
Mode
Layer 2 (L2) 모드
클러스터 내부의 노드와 함께 작동하여 로드밸런서 IP 주소를 할당하는 방식입니다. 네트워크 스위치나 라우터의 MAC 주소 테이블을 사용하여 IP 주소를 할당합니다.
Border Gateway Protocol (BGP) 모드
외부 라우터와 연결하여 IP 주소 할당을 관리하는 방식입니다. 외부 라우터와 통신하고 IP 주소를 할당합니다.
설치환경
kubernets : v1.28.1
CNI : weavenet
Layer 2 Mode
사전 설정
IPVS 모드에서 Kube-proxy를 사용하는 경우 kubernets v1.14.2 버전 이후부터 ARP 모드를 활성화 해야 합니다.
kubectl edit configmap -n kube-system kube-proxy
다음과 같이 수정해 줍니다.
apiVersion: v1
data:
config.conf: |-
apiVersion: kubeproxy.config.k8s.io/v1alpha1
-------------------- 중략 --------------------
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: true ## 이부분을 수정해줍니다.
syncPeriod: 0s
tcpFinTimeout: 0s
tcpTimeout: 0s
udpTimeout: 0s
kind: KubeProxyConfiguration
Manifest 를 사용해 Metal LB 설치하기
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
다음 명령을 통해 Metal LB가 잘 설치되어있는지 확인해 줍니다.
kubectl get -n metallb-system pod
IP Address Pool 설정하기
metallb-network.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 10.1.4.160/28
- 10.1.4.176/28
- 10.1.4.192-10.1.4.200
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: my-network-l2
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
kubectl apply -f metallb-network.yaml
Example
예제 코드를 이용해 Metal LB가 정상 작동중인지 확인해봅니다.
nginx_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
nginx_service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-loadbalancer
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
externalTrafficPolicy: Local
kubectl apply -f nginx_deployment.yaml
kubectl apply -f nginx_service.yaml
배포 후 Metal LB 로드밸런서 주소를 확인합니다.
kubectl get svc -o wide
EXTERNAL-IP로 접속해 nginx 웹페이지가 응답하는지 확인합니다.
정상적으로 작동하는 것을 확인할 수 있습니다.