지난 포스팅에서 Minikube를 설치하고 인그레스를 생성해보았다.
인그레스는 '/' 경로로 들어온 요청은 프론트엔드 서비스로, '/api' 경로로 들어온 요청은 백엔드 서비스로 트래픽을 라우팅한다. 그럼 프론트엔드와 백엔드서비스를 생성하고 디플로이먼트도 생성하여 파드를 배포해보자.
프론트엔드 서비스 와 디플로이먼트 생성 및 배포하기
react-frontend.yaml
apiVersion: v1
kind: Service
metadata:
name: react-frontend
spec:
selector:
app: react-frontend
ports:
- protocol: TCP
port: 80
targetPort: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: react-frontend
spec:
replicas: 2
selector:
matchLabels:
app: react-frontend
template:
metadata:
labels:
app: react-frontend
spec:
containers:
- name: react-frontend
image: lordofkangs/react_frontend:latest
ports:
- containerPort: 3000
Service는 디폴트인 ClusterIP 서비스로 생성한다. 인그레스 서비스가 NodePort로 생성되어 외부에서 접근이 가능하므로 프론트엔드 서비스는 외부에서 접근할 필요하가 없다. 클러스터 내부에서 인그레스가 라우팅한 트래픽을 받으면 되므로 ClusterIP 타입으로 서비스를 생성한다. 인그레스가 바라보는 프론트엔드 서비스는 80포트이므로 80포트를 파드 포트로 전달해야 트래픽을 파드로 전달할 수 있다. 리액트 컨테이너는 3000번을 열어놓으므로 targetPort로 3000 포트를 설정한다.
Deployment는 replicas는 2로 설정하여 파드를 2개 배포하도록 하였다. 서비스에서 80포트와 3000번 포트를 포워딩 설정을 했으므로, 컨테너의 3000번 포트를 열어준다. 이미지는 도커허브에 올려놓은 이미지를 가져와 컨테이너를 띄운다.
백엔드 서비스 와 디플로이먼트 생성 및 배포하기
nodejs-backend.yaml
apiVersion: v1
kind: Service
metadata:
name: nodejs-backend
spec:
selector:
app: nodejs-backend
ports:
- protocol: TCP
port: 8080
targetPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-backend
spec:
replicas: 2
selector:
matchLabels:
app: nodejs-backend
template:
metadata:
labels:
app: nodejs-backend
spec:
containers:
- name: nodejs-backend
image: lordofkangs/nodejs_backend:latest
ports:
- containerPort: 5000
Service는 프론트엔드와 마찬가지로 ClusterIP 서비스로 생성한다. 인그레스 컨트롤러가 바라보는 백엔드 서비스의 포트가 8080이므로 8080 포트를 파드 포트에 포워딩해야 트래픽을 파드로 전달할 수 있다. 디플로이먼트도 2개의 파드를 생성하여 배포하고 컨테이너 포트는 5000번을 열어놓는다.
테스트 해보기
kubectl get svc
kubectl get pods
url : 192.168.49.2:30261
192.168.49.2는 미니큐브IP이고 30261은 인그레스 서비스가 오픈한 노드포트이다. 위 url로 접근하면 경로가 "/"이므로 프론트엔드 서비스로 접근한다. 프론트엔드서비스는 화면페이지를 클라이언트에게 응답한다.
프론트엔드 서비스는 화면을 그릴때, /api/values 경로로 백엔드에 요청하여 DB데이터를 조회한다. 그런데 아직 DB 서비스가 생성되어 있지 않으니 데이터를 가져오지 못한다. 그럼 다음 포스팅에서는 MySQL로 DB서비스 및 파드를 생성해보겠다.
참고자료
'DevOps > K8S' 카테고리의 다른 글
[Kubernetes] ClusterIP, NodePort, LoadBalancer의 차이 (0) | 2023.10.13 |
---|---|
[Kubernetes] MySQL 서비스 및 디플로이먼트 생성하기 (3) | 2023.10.13 |
[Kubernetes] Minikube 설치 및 인그레스 설치 및 설정하기 (0) | 2023.10.12 |
[Kubernetes] 인그레스(Ingress)란 무엇인가? (0) | 2023.10.11 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(4) - 마스터노드, 워커노드 구성하기 (0) | 2023.09.26 |