[클라우드/K8S 기본(5) - MetalLB 구성하기]

SooYeon Yeon·2022년 9월 13일
0

클라우드 K8S

목록 보기
7/18

실습환경 구성

MetalLB 구성하기

  1. metallb 구성하기

퍼블릭 환경에서는 pod와 외부 사용자간 연결을 위해 손쉽게 LB를 이용할 수 있다. 하지만 on-premise 환경에서는 LB 서비스를 사용할 수 없다. 이를 해결하기 위해 metallb를 이용하면 LB 이용이 가능하다.

  • 네임스페이스 생성
root@manager:~# kubectl create ns metallb-system
kubectl get ns
  • controller, speaker 구성을 위한 매니페스트 파일
kubectl apply -f \
https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
  • MetalLB ConfigMap 적용
mkdir k8slab ; cd k8slab
touch metallb.yaml
vi metallb.yaml
  • yaml 파일 작성하기
  1. 확장자는 yaml, yml로 작성

  2. tab은 기본적으로 인정하지 않는다. space bar 사용해야 함

  3. 주석을 사용하고 싶다면 json은 기본적으로 주석을 허용하지 않는다. 하지만 yaml은 #로 제공

  4. 두가지 이상의 작업을 하나의 파일에 작성하고 싶다면 --- 를 이용하여 구분한다.

  5. 리스트 사용 가능하다.

    1. [ , , ]

  6. 기본적으로 yaml은 string이다.

    abc

    def

    출력 → abcdef

  7. 여러 줄로 작성된 내용을 사진찍듯이 그대로 옮기고 싶다면 | 를 이용할 수 있다.

    |뒤에 - 를 붙이면 마지막 라인이 비워져 있어도 이를 지워준다.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 211.183.3.201-211.183.3.211
      - 211.183.3.231-211.183.3.239

config에 | 가 없다면 default protocol: layer2처럼 달라붙는 현상이 일어날 수 있다.

기본적으로 한 줄 뒤에는 \n이 생략되어 있다. 만약, |아래에 한줄을 비웠다면 이 역시 그대로 한줄 비우기가 전달된다.

생성된 객체 metlab에 어떠한 공인주소를 LB Pod를 통해 전달할 것인지를 결정할 ConfigMap을

  • 배포하기
root@manager:~/k8slab# kubectl apply -f metallb.yaml
configmap/config created

deployment 이용해 포드 배포

touch nginx-deploy-svc.yaml
vi nginx-deploy-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec: # 아래는 ReplicaSet 설정
  replicas: 3
  selector: # 아래의 라벨 개수를 확인해 관리
    matchLabels:
      app: webserver
  template: # 아래는 pod 구성
    metadata:
      name: my-webserver
      labels:
        app: webserver
    spec: # 아래 부분은 포드안에 들어가는 컨테이너 구성내용
      containers:
      - name: my-webserver
        image: nginx
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-lb
spec:
  ports:
  - name: web-port
    port: 80
  selector:
    app: webserver
  type: LoadBalancer
  • 배포
root@manager:~/k8slab# kubectl apply -f nginx-deploy-svc.yaml
kubectl get pod,svc
  • nginx2-deploy-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2-deploy
spec: # 아래는 ReplicaSet 설정
  replicas: 3
  selector: # 아래의 라벨 개수를 확인해 관리
    matchLabels:
      app: webserver2
  template: # 아래는 pod 구성
    metadata:
      name: my-webserver2
      labels:
        app: webserver2
    spec: # 아래 부분은 포드안에 들어가는 컨테이너 구성내용
      containers:
      - name: my-webserver2
        image: nginx
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx2-lb
spec:
  ports:
  - name: web2-port
    port: 80
  selector:
    app: webserver2
  type: LoadBalancer
  • 배포
root@manager:~/k8slab# kubectl apply -f nginx2-deploy-svc.yaml
deployment.apps/nginx2-deploy created
root@manager:~/k8slab# kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>          443/TCP        40m
nginx-lb     LoadBalancer   10.97.153.247   211.183.3.201   80:31442/TCP   5m24s
nginx2-lb    LoadBalancer   10.106.23.245   211.183.3.202   80:32163/TCP   11s

201, 202번으로 접속

  • 두번째 만든 파일 삭제
root@manager:~/k8slab# kubectl delete -f nginx2-deploy-svc.yaml
deployment.apps "nginx2-deploy" deleted
service "nginx2-lb" deleted

0개의 댓글