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 라는 것인데
간단하게 설명하면 내가 외부에 연결할 수 있는 IP대역대가 있다면 metal lb에서 지정한 IP대역대에서 IP를 할당해 준다.
여기서 중요한 점은 외부와 연결할 수 있는 IP는 존재해야한다는 말이다.
또한 pod네트워크로 플란넬, 위브넷 등의 호환성이 다 다르기 때문에 위에 올린 공식 문서를 한 번 읽어보는 것을 추천한다.
위 그림은 내가 실험한 환경 구성이다.
외부에서 접근 가능한 공유기가 있고 해당 공유기는 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/
다음과 같은 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를 배포한다.
'DevOps > 쿠버네티스(Kubernetes)' 카테고리의 다른 글
[쿠버네티스 #7] Kubernetes ingress를 이용한 tls 적용 (let's encrypt) (0) | 2020.07.06 |
---|---|
[쿠버네티스 #tip4] 새로운 워커노드를 Join 시키거나 클러스터를 초기화할 때 (0) | 2020.05.20 |
[쿠버네티스 #5] Docker compose와 kubernetes의 차이 (0) | 2020.03.01 |
[쿠버네티스 #tip3] 컨테이너 안에서 쉘 스크립트를 사용할 때 경로지정 (1) | 2020.02.14 |
[쿠버네티스 #tip2] 파이썬으로 만든 컨테이너에서 print출력이 되지 않을 때 (0) | 2020.02.04 |