MetalLB를 설치하고 설정하여 Kubernetes 클러스터에서 LoadBalancer 서비스를 테스트하는 방법
MetalLB를 설치하고 설정한 후 실제로 LoadBalancer 서비스를 배포하여 MetalLB가 제대로 작동하는지 확인하는 방법입니다.
테스트 환경
kubectl get nodes -o custom-columns="NAME:.metadata.name,STATUS:.status.conditions[-1].type,ROLES:.metadata.labels['kubernetes\.io/role'],AGE:.metadata.creationTimestamp,VERSION:.status.nodeInfo.kubeletVersion,INTERNAL-IP:.status.addresses[0].address,EXTERNAL-IP:.status.addresses[1].address"
control-plane Ready <none> 2024-08-21T00:20:43Z v1.30.4 192.168.0.131 control-plane
k8s-worker1 Ready <none> 2024-08-21T00:46:43Z v1.30.4 192.168.0.112 k8s-worker1
k8s-worker2 Ready <none> 2024-08-21T02:08:25Z v1.30.4 192.168.0.121 k8s-worker2
k8s-worker3 Ready <none> 2024-08-27T05:47:12Z v1.30.4 192.168.0.141 k8s-worker3
ARP 모드 활성화
kube-proxy 구성 편집
- ipvs.strictARP : true(false -> true)
kubectl edit configmap -n kube-system kube-proxy
mode: ""
...
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: false
mode: "ipvs"
...
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: true
ARP(strictARP) 모드 확인
kubectl get configmap kube-proxy -n kube-system -o yaml | grep strictARP
MetalLB 설치
기존 CRD 삭제
kubectl delete crd bfdprofiles.metallb.io
1. 매니페스트를 사용한 MetalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml
2. IP 주소 풀 설정
MetalLB가 사용할 IP 주소 풀을 설정하기 위해 ConfigMap을 생성합니다. 이 ConfigMap은 MetalLB가 클러스터의 노드에서 사용할 IP 주소 범위를 정의합니다.
192.168.0.241-192.168.0.250 범위는 MetalLB가 LoadBalancer 서비스에 할당할 IP 주소를 정의합니다. 이 범위는 클러스터 네트워크와 일치해야 합니다.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default-pool
protocol: layer2
addresses:
- 192.168.0.241-192.168.0.250
EOF
3. L2Advertisement 설정
MetalLB가 Layer 2 모드에서 IP 주소를 광고하도록 L2Advertisement를 설정합니다.
cat <<EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example-l2advertisement
namespace: metallb-system
spec:
ipAddressPools:
- default-pool
EOF
4. LoadBalancer 서비스 배포 및 테스트
LoadBalancer 타입의 서비스를 배포하여 MetalLB의 동작을 테스트할 수 있습니다.
nginx Deployment와 nginx-loadbalancer 서비스를 배포합니다. nginx-loadbalancer 서비스는 LoadBalancer 타입으로 설정되어 MetalLB가 지정된 IP 주소 범위에서 IP를 할당합니다.
Service 배포
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: nginx-loadbalancer
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
EOF
Deployment 배포
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF
5. 서비스 상태 확인
서비스가 생성된 후 MetalLB가 외부 IP를 할당한 것을 확인할 수 있습니다.
출력된 결과에서 EXTERNAL-IP 필드에 192.168.0.x와 같은 IP 주소가 할당되어 있는지 확인하세요. 이 IP 주소로 접속하여 nginx 서비스가 제대로 동작하는지 테스트할 수 있습니다.
kubectl get services nginx-loadbalancer
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service-metallb1 LoadBalancer 10.98.45.72 192.168.0.201 80:32393/TCP 6m46s
4. 테스트
브라우저에서 또는 curl 명령어를 사용하여 할당된 IP 주소로 NGINX 웹 서버에 접근합니다.
curl http://<EXTERNAL-IP>
MetalLB 리소스 삭제
MetalLB 네임스페이스 확인
kubectl get namespace
kubectl get pods -n metallb-system
MetalLB 리소스 삭제
kubectl delete all --all -n metallb-system
네임스페이스 삭제
kubectl delete namespace metallb-system
Helm으로 설치한 경우
helm uninstall metallb --namespace metallb-system
ConfigMap 및 기타 설정 삭제
kubectl delete configmap -n metallb-system
클러스터 상태 확인
kubectl get all --all-namespaces
참고URL
- MetalLB : Installation
'리눅스' 카테고리의 다른 글
[draft] Ceph를 설치하는 방법 (0) | 2024.09.03 |
---|---|
[draft] 우분투에서 NFS서버와 클라이언트를 설정하는 방법 (0) | 2024.09.03 |
[draft] Kubernetes 구성 파일 설정 (0) | 2024.08.29 |
[draft] Kubernetes Dashboard 설치 (0) | 2024.08.29 |
[draft] 우분투에서 Unison을 설치하고 사용하는 방법 (0) | 2024.08.28 |