728x90
목차
LoadBalancer가 무엇일까?
로드밸런서는 클라이언트 요청을 여러 대상 서버로 분산시켜 서버의 부하를 분산하고 서비스의 가용성을 높이는 역할을 한다. Kubernetes에서는 클러스터 내의 애플리케이션을 외부로 노출시키기 위해 로드밸런서를 사용한다.
로드밸런서의 전단계인 nodePort를 사용할 수 있지만 이것엔 단점이 존재한다. 단점은 다음과 같다.
1. 보안 이슈: 노드 포트를 사용하면 모든 노드에서 서비스에 접근할 수 있다. 이는 보안상의 이슈로 이어질 수 있으며, 필요 이상으로 네트워크에 노출될 수 있다.
2. 포트 충돌: 노드 포트는 각 노드에서 고유한 포트를 사용한다. 만약 다른 서비스가 이미 사용 중인 포트를 선택하면 충돌이 발생하여 서비스가 제대로 동작하지 않을 수 있다.
3. 한정된 포트 범위: 노드 포트의 포트 범위는 30000-32767이다. 이 범위 내에서만 노드 포트를 사용할 수 있으며, 포트가 부족한 경우 서비스를 제대로 배포할 수 없는 경우가 발생할 수 있다.
4.노드 의존성: 노드 포트를 사용하면 클러스터 내에서 노드의 구성이 변경되거나 새로운 노드가 추가되었을 때 서비스를 업데이트해야 한다. 이는 유연성을 제한하고 관리 비용을 증가시킬 수 있다.
nodePort의 위와 같은 단점을 극복하기 때문에 로드밸런서를 사용을 하는 것이다.
LoadBalancer(metalLB) 설치 전 환경에 따라 버전 호환이 안될 수 있다.
그렇기 때문에 환경 스펙을 비교해보고 설치하자
kubernetes : 1.28.2
OS : centOS 7
containerd : 1.6.28
MetalLB : 0.11.0
LoadBalancer(metalLB)를 설치 해보자!
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/superset LoadBalancer 11.123.141.182 <pending> 8088:30364/TCP 149m
LoadBalancer(metalLB)를 설치하지 않은 경우 EXTERNAL-IP의 상태가 pending 일 것이다. 이것을 IP가 할당되게 변경해보자.
MetalLB를 구분하여 저장하기 위해 namespace를 생성한다.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml
[root@docker04 ingress]# kubectl get ns
NAME STATUS AGE
metallb-system Active 153m
namespace를 조회하면 다음과 같이 metallb-system이 생성되었다.
MetalLB를 설치하기
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml
[root@docker04 ingress]# kubectl get all -n metallb-system
NAME READY STATUS RESTARTS AGE
pod/controller-7b57f7dbdc-ct9x9 1/1 Running 0 156m
pod/speaker-5nbn4 1/1 Running 0 156m
pod/speaker-7jw2q 1/1 Running 0 156m
pod/speaker-95rx9 1/1 Running 0 156m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/speaker 3 3 3 3 3 kubernetes.io/os=linux 156m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/controller 1/1 1 1 156m
NAME DESIRED CURRENT READY AGE
replicaset.apps/controller-7b57f7dbdc 1 1 1 156m
Secret 생성하기
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
[root@docker04 ingress]# kubectl get secret -n metallb-system
NAME TYPE DATA AGE
memberlist Opaque 1 157m
ConfigMap 생성 및 실행하기
# 파일명 : metallb_config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 11.123.50.246-11.123.50.250
kubectl apply -f metallb_config.yaml
[root@docker04 metallb]# kubectl get configmap -n metallb-system
NAME DATA AGE
config 1 159m
설치 후 정상동작 확인하기
[root@docker04 metallb]# kubectl get svc -n superset-ns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/superset LoadBalancer 11.123.141.182 11.123.50.250 8088:30364/TCP 149m
728x90
'Infrastructure > Docker & Kubernetes' 카테고리의 다른 글
[kubernetes] docker, containerd https -> http 접근 설정하기 (1) | 2024.03.30 |
---|---|
[kubernetes] helm install로 superset 완벽하게 설치하기 (2) | 2024.03.16 |
[kubernetes] CentOS에서 rook-ceph 설치 및 삭제하기 (5) | 2024.03.09 |
[kubernetes] rook-ceph Error: clock skew detected on mon.b, mon.d (0) | 2024.03.09 |
[kubernetes] rook-ceph Error: mon d is low on available space (1) | 2024.03.09 |