본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[쿠버네티스 #6] Kubernetes metallb를 사용한 로드밸런서 타입 서비스 배포

728x90

 

20. 07. 16 추가 내용

-----------------------------

인그레스 컨트롤러에 대한 내용이 없는거 같아 간략하게 나마 추가합니다.

 

 

인그레스 컨트롤러 설치 명령어 입니다. 해당 파일을 배포하면 새로운 namespace가 생깁니다.

namespace안에 요소들을 보면 인그레스 컨트롤러가 있습니다.

kubectl apply -f http://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml

-----------------------------

 

 

 

쿠버네티스 서비스에 대한 글을 올렸을 때 3가지 종류의 타입이 있다고 말했다.

 

1. Cluster IP

2. Node Port

3. Load Balancer

 

다음과 같이 세 가지에 대해 설명했고 이 중 로드 밸런서 타입은 GCP같은 클라우드 플랫폼에서는 제공해 주지만 쿠버네티스 자체에서는 제공해주지 않는다고 하였다. 

 

즉, 온프레미스 환경에서는 로드밸런서 타입을 이용할 수 없다고 하였는데 온프레미스 환경에서도 로드밸런서 타입의 서비스를 배포할 수 있게 해주는 도구가 있다.

 

그건 바로 Metal LB 라는 것인데

 

https://metallb.universe.tf/

 

MetalLB, bare metal load-balancer for Kubernetes

MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. MetalLB is a young project. You should treat it as a beta system. The project maturity page explains what that implies. Why? Kubernetes does not

metallb.universe.tf

 

간단하게 설명하면 내가 외부에 연결할 수 있는 IP대역대가 있다면 metal lb에서 지정한 IP대역대에서 IP를 할당해 준다.

 

여기서 중요한 점은 외부와 연결할 수 있는 IP는 존재해야한다는 말이다. 

또한 pod네트워크로 플란넬, 위브넷 등의 호환성이 다 다르기 때문에 위에 올린 공식 문서를 한 번 읽어보는 것을 추천한다.

 

metallb를 실험해보기위한 환경

위 그림은 내가 실험한 환경 구성이다.

 

외부에서 접근 가능한 공유기가 있고 해당 공유기는 125.x.x.x 로 접근이 가능하며 내부에서 동적으로 할당 가능한 IP범위는 192.168.0.10 ~ 200까지 가능하다. 

 

그 중 쿠버네티스를 설치해 놓은 PC는 98번에 할당되어 있으며 포트 포워딩 되어있다.

 

실험을 위해서 단일 노드를 활용한 minikube를 사용하였고 metallb를 설치하고 IP대역대를 설정해 주면 서비스를 배포할 때 로드밸런서 타입으로 정해진 IP대역대에서 배포를 해준다. 

 

마지막으로 공유기에서 서비스의 IP로 포트포워딩을 해주면 된다.

---------------

 

설치 방법은 다음과 같다.

 

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml

 

설치를 하게 되면 namespace에 metallb가 추가된다.

kubectl get namespace

 

 

그 다음 이제 ConfigMap을 배포해야한다.

 

metallb는 여러가지의 구성이 있다고 하는데 그 중에 제일 기본적인 layer2를 이용해보려한다.(나머지는 솔직히 잘 모르겠다 ㅜ)

 

https://metallb.universe.tf/configuration/

 

MetalLB, bare metal load-balancer for Kubernetes

Configuration MetalLB remains idle until configured. This is accomplished by creating and deploying a configmap into the same namespace (metallb-system) as the deployment. There is an example configmap in manifests/example-config.yaml, annotated with expla

metallb.universe.tf

다음과 같은 ConfigMap 예제가 있다.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250

해당 예제에서 마지막 addresses 부분을 자신이 외부로 노출할 수 있는 IP 범위를 적어주면된다.

나 같은 경우 192.168.0.10 - 192.168.0.20 정도로 설정해 놨었다.

 

kubectl apply -f config.yaml

만든 파일을 배포해주고 로드밸런서 타입의 서비스를 배포해주면 확인이 가능하다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

다음처럼 nginx에 대한 pod와 이를 연결하는 로드밸런서 타입의 Service를 배포한다.

반응형