퍼블릭 환경에서는 pod와 외부 사용자간 연결을 위해 손쉽게 LB를 이용할 수 있다. 하지만 on-premise 환경에서는 LB 서비스를 사용할 수 없다. 이를 해결하기 위해 metallb를 이용하면 LB 이용이 가능하다.
root@manager:~# kubectl create ns metallb-system
kubectl get ns
kubectl apply -f \
https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
mkdir k8slab ; cd k8slab
touch metallb.yaml
vi metallb.yaml
확장자는 yaml, yml로 작성
tab은 기본적으로 인정하지 않는다. space bar 사용해야 함
주석을 사용하고 싶다면 json은 기본적으로 주석을 허용하지 않는다. 하지만 yaml은 #로 제공
두가지 이상의 작업을 하나의 파일에 작성하고 싶다면 --- 를 이용하여 구분한다.
리스트 사용 가능하다.
[ , , ]
기본적으로 yaml은 string이다.
‘
abc
def
‘
출력 → abcdef
여러 줄로 작성된 내용을 사진찍듯이 그대로 옮기고 싶다면 | 를 이용할 수 있다.
|뒤에 - 를 붙이면 마지막 라인이 비워져 있어도 이를 지워준다.
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
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
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