CLOUD/Docker&Kubernetes

[Kubernetes] Service - LoadBalancer

alsruds 2023. 4. 25. 15:39

♡ 순서 ♡

1. 온프레미스 환경에서 로드밸런서 사용하기

2. 로드밸런서 타입의 서비스 생성해보기 (nginx)

 


 

[ 온프레미스 환경에서 로드밸런서 사용 설정 ]

참고 : https://mlops-for-all.github.io/docs/appendix/metallb/

 

2. bare-metal 클러스터용 load balancer metallb 설치

MetalLB란? # Kubernetes 사용 시 AWS, GCP, Azure 와 같은 클라우드 플랫폼에서는 자체적으로 로드 벨런서(Load Balancer)를 제공해 주지만, 온프레미스 클러스터에서는 로드 벨런싱 기능을 제공하는 모듈을

mlops-for-all.github.io

 

● ARP 모드 확인

kubectl get configmap kube-proxy -n kube-system -o yaml | grep strictARP

 

strictARP: true 출력 시 넘어가기

 

》 strictARP: false 출력 시

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

# 정상 수행 시 출력
Warning: resource configmaps/kube-proxy is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
configmap/kube-proxy configured

 

Manifest 설치

# MetalLB 설치
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml

# 설치 확인 - 모두 Running
kubectl get pod -n metallb-system

 

Layer 2 Configuration

# metallb_config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 200.200.200.10-200.200.200.50  # 가상머신 IP 대역폭
      
# 설정 적용
kubectl apply -f metallb_config.yaml

# 정상 배포 시 출력
configmap/config created

이제 쿠버네티스 대시보드에서 로드밸런서를 사용할 수 있습니다 ~ ㅎ^ㅎ

 

 

[ Kubernetes Dashboard : Service - LoadBalancer 실습 ]

Service

apiVersion: v1
kind: Service
metadata:
  name: lb-nginx-svc
spec:
  selector:
    type: front
  ports:
  - port: 88
    targetPort: 80
  type: LoadBalancer

 

Nginx-pod 1

apiVersion: v1
kind: Pod
metadata:
  name: lb-nginx1
  labels:
    type: front
spec:
  containers:
  - name: container
    image: nginx:latest

》 파드 접속 해서 /usr/share/nginx/html 수정해주기

 

Nginx-pod 2

apiVersion: v1
kind: Pod
metadata:
  name: lb-nginx2
  labels:
    type: front
spec:
  containers:
  - name: container
    image: nginx:latest

》 파드 접속 해서 /usr/share/nginx/html 수정해주기

 

파드 생성 ~

 

 확인하기

서비스의 외부 엔드 포인트로 접속하기

 

웹 브라우저로 확인하기

 

master node 에서 확인하기

 

☆ 로드 밸런싱 성공 ~ ★