지난 포스팅에서 도커 환경에서 도커 컴포즈로 Ngnix-React-NodeJS-MySQL 시스템을 개발환경용으로 구현해보았다. 이번 포스팅에서는 쿠버네티스 환경에서 Ngnix-React-NodeJS-MySQL 시스템을 구현해보려고 한다.
1. MiniKube 설치하기
나는 쿠버네티스 환경을 MiniKube로 구성하였다. 원래 목적은 VM환경에 클러스터를 구성하려고 했으나 몇가지 제약사항이 있었다. AWS는 너무 비쌌다. GCP는 Nginx 인그레스 컨트롤러를 사용하지 않는다. 그럼 로컬환경에 VM을 구성해야 하는데, 내가 가지고 있는 맥북은 M1칩(ARM64) 환경이라 VM 구성이 어려웠다. 집에 우분투 리눅스가 깔린 노트북 한 대가 있어서 VM환경을 구성해보았으나 사양이 낮아 가상머신 운영이 어려웠다.
그래서 가상머신을 없애고 우분투 리눅스 터미널에 MiniKube를 설치하였다. MiniKube를 설치하면 여러 대의 노드를 VM으로 생성하지 않아도 된다. 단순한 기초적인 실습이니 MiniKube로도 충분하다.
Minikube 설치는 위 포스팅에 잘 설명되어 있으니 참고바란다.
2. Ingress 생성 및 설정하기
인그레스에 대한 설명은 위 포스팅에 정리해놓았다. 인그레스를 사용하려면 세 가지를 작업을 해야한다.
1) 인그레스 컨트롤러 배포
minikube addons enable ingress
위 명령어를 수행하면 minikube에서 사용가능한 Nginix Ingress Controller를 생성하고 배포한다. Ingress Controller는 ingress-nginx 네임스페이스 영역에 POD로 배포되고 Ingress Controller Service도 NodePort로 생성되어 외부접근이 가능해진다. NodePort는 외부접속이 가능한 30000-32767 포트를 의미한다. 80포트는 외부에서 접속이 불가능하다고 해보자. NodePort 서비스는 30000-32767 사이의 포트로 외부트래픽을 받은 다음, 내부에서 80포트로 트래픽을 라우팅하는 것이다. 그럼 외부에 오픈되어 있지 않은 80포트로 외부트래픽이 접근할 수 있다.
kubectl get all -n ingress-nginx
빨간박스를 보면 NodePort 서비스에 의해 노드의 30085 포트가 Ingress Controller 파드의 80포트와 포트포워딩 된 것을 확인할 수 있다. 30085포트로 들어온 외부트래픽이 내부에서 80포트로 다시 포워딩 되는 것이다.
kubectl get ing
kubectl get nodes -o wide
ingress 정보를 보면 주소가 192.168.49.2로 설정되어 있다. 이는 마스터 노드(컨트롤-플레인)의 ip와 일치한다. minikube는 노드가 하나 존재하는데, 그것이 마스터 노드이다. 마스터노드의 ip가 곧 인그레스의 ip이다.
그러므로 외부에서 192.168.49.2:30085로 접근하면 인그레스 컨트롤러 POD로 접근이 가능하다.
2) 인그레스 리소스 생성
인그레스 컨트롤러 생성이 완료되었으니 어떤 방식으로 동작할지 라우팅룰을 정해야 한다.
ingress-resource.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: practice-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: react-frontend
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: nodejs-backend
port:
number: 8080
호스트는 하나이고 path 경로만 다른 경우이다. '/' 로 시작하는 요청은 frontend 서비스가 바라보는 80 포트로 트래픽을 라우팅한다. '/api'로 시작하는 요청은 backend 서비스가 바라보는 포트인 8080 포트로 트래픽을 라우팅한다.
그럼 인그레스 리소스에 적힌 라우팅룰을 인그레스 컨트롤러에 적용해보자.
3) 인그레스 리소스를 인그레스 컨트롤러에 적용
kubectl apply -f ingress-resource.yaml
적용이 완료되면 kubectl describe 명령어로 ingress가 잘 설정되어 있는지 확인한다.
kubectl describe ing
path에 서비스명과 포트번호가 잘 설정되어 있음을 확인할 수 있다. 뒤에 적힌 (10.244.0.10:3000,10.244.0.9:3000)은 서비스에 의해 노출된 POD의 주소이다. 나는 front-end와 back-end POD를 올리고 서비스로 노출시켜 놓은 상태이기에 Ingress가 노출된 정보를 읽은 것이다. 아직 frontend와 backend를 띄어놓지 않은 상태이기에, 아무것도 뜨지 않아야 정상이다.
인그레스 설정이 완료되었으므로 frontend와 backend를 서비스와 파드를 띄어보자. 이는 다음 포스팅에서 진행하도록 하겠다.
참고자료
'DevOps > K8S' 카테고리의 다른 글
[Kubernetes] MySQL 서비스 및 디플로이먼트 생성하기 (3) | 2023.10.13 |
---|---|
[Kubernetes] 프론트엔드, 백엔드 서비스 및 디플로이먼트 생성하기 (0) | 2023.10.12 |
[Kubernetes] 인그레스(Ingress)란 무엇인가? (0) | 2023.10.11 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(4) - 마스터노드, 워커노드 구성하기 (0) | 2023.09.26 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(3) - 넷필터 브릿지 (0) | 2023.09.25 |