DevOps/K8S

[Kubernetes] 프론트엔드, 백엔드 서비스 및 디플로이먼트 생성하기

IT록흐 2023. 10. 12. 19:13
반응형
 

[Kubernetes] Minikube 설치 및 인그레스 설치 및 설정하기

[Docker] Nginx - React - Nodejs - Mysql 연동 실습하기 이번 포스팅에서 구현할 시스템의 구성도는 위와 같다. Ngnix, React, NodeJS, MySQL을 도커 컨테이너로 띄어 간단한 시스템을 구현해보겠다. Docker 관련 포

lordofkangs.tistory.com

 

지난 포스팅에서 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서비스 및 파드를 생성해보겠다. 

 

 


 

 

참고자료

 

서비스

외부와 접하는 단일 엔드포인트 뒤에 있는 클러스터에서 실행되는 애플리케이션을 노출시키며, 이는 워크로드가 여러 백엔드로 나뉘어 있는 경우에도 가능하다.

kubernetes.io

 

파드

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

 

데브옵스(DevOps)를 위한 쿠버네티스 마스터 - 인프런 | 강의

컨테이너 기반 오픈 소스 가상화 프로젝트인 "쿠버네티스"를 이용한 컨테이너 환경의 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 활용하는 방법을 입문부터 활용까지 다룹니다., [

www.inflearn.com

 

반응형