kubernetes

[MetalLB]MetalLB 설치

easysheep 2023. 11. 1. 10:50

0. 목적

온 프레미스  환경에서 LoadBalancer를 사용을 위해 설치

1. 사전 설치

helm으로 설치할 예정이므로 helm과 쿠버네티스가 설치되어 있어야 한다.

2. 설치

더보기

If you’re using kube-proxy in IPVS mode, since Kubernetes v1.14.2 you have to enable strict ARP mode.

Note, you don’t need this if you’re using kube-router as service-proxy because it is enabling strict ARP by default.

You can achieve this by editing kube-proxy config in current cluster:

위는 공식 문서의 문항인데 요약하면 쿠버네틱스 1.14.2 버전 부터는 strict ARP mode를 True로 해주어야 한다라는 뜻이다.

다음 2가지 방법중 하나를 사용하자.

# 여기에 들어가서
kubectl edit configmap -n kube-system kube-proxy
# 다음을 추가해도 되고
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

OR

# 해당 명령어만 입력하면 된다.
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

설정을 제대로 했는지 확인 할려면 다음 명령어를 입력해보자.

# 이 명령어를 입력하면 strictARP:True가 나와야 한다.
kubectl get configmap kube-proxy -n kube- system -o yaml | grep strictARP

다음을 입력하여 설치하자.

그럼 default namespace인 metallb-system namespace를 생성하고 해당 네임 스페이스에서 실행될 것이다.

helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb

 

metallb 설정

# yaml형식의 파일을 생성해 주고 다음과 같이 편집한다.
vim my-config.yaml
---
# 사용 apiversion
apiVersion: metallb.io/v1beta1 
kind: IPAddressPool
metadata:
  #해당 IPAddressPool 명과 사용하는 namespace
  name: ip-pool
  namespace: metallb-system
spec:
  addresses:
  # 사용할 ip address pool
  - 172.31.46.220-172.31.46.230 
  autoAssign: true

--- 

apiVersion: metallb.io/v1beta1 
# metalib의 l2모드를 사용한다.
kind: L2Advertisement 
metadata:
  name: l2-network
  # L2Advertisement이 사용할 namespace명
  namespace: metallb-system
spec:
   # 사용할 ipAddressPools을 추가해주는 데 위에 정의한 ipAddressPools을 사용하도록 한다.
  ipAddressPools:
    - ip-pool

위 의 설정을 적용하기 위해 기존 설정을 지우고 다시 설정해준다.

# 설정 확인
kubectl get validatingwebhookconfigurations
# 지우기
kubectl delete validatingwebhookconfigurations  metallb-webhook-configuration
# no resourceㄴ found가 나와야 한다.
kubectl get validatingwebhookconfigurations
# 설정 적용
kubectl apply -f my-config.yaml 
# 최종 확인
kubectl describe ipaddresspool.metallb.io --namespace metallb-system

최종적으로 다음과 같이 나오면 성공 한것이다. 

Name:         ip-pool
Namespace:    metallb-system
Labels:       <none>
Annotations:  <none>
API Version:  metallb.io/v1beta1
Kind:         IPAddressPool
Metadata:
  Creation Timestamp:  2023-10-31T06:32:52Z
  -- 중략
Spec:
  Addresses:
    172.31.46.220-172.31.46.230
  Auto Assign:       true
  Avoid Buggy I Ps:  false
Events:              <none>