DevOps/K8S

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

IT록흐 2023. 10. 12. 00:12
반응형

 

 

[Docker] Nginx - React - Nodejs - Mysql 연동 실습하기

이번 포스팅에서 구현할 시스템의 구성도는 위와 같다. Ngnix, React, NodeJS, MySQL을 도커 컨테이너로 띄어 간단한 시스템을 구현해보겠다. Docker 관련 포스팅이니 React, Nodejs, MySQL 관련 소스는 블로그

lordofkangs.tistory.com

 

 

지난 포스팅에서 도커 환경에서 도커 컴포즈로 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 설치 및 사용 방법

이번 시간은 빠르게 설치할 수 있는 경량화된 쿠버네티스인 Minikube를 설치하고 사용하는 방법에 대해 다...

blog.naver.com

 

Minikube 설치는 위 포스팅에 잘 설명되어 있으니 참고바란다. 

 

 

2. Ingress 생성 및 설정하기 

 

 

[Kubernetes] 인그레스(Ingress)란 무엇인가?

인그레스(Ingress)란? 쿠버네티스 인그레스의 정의는 아래와 같다. A Kubernetes Ingress is an API object that shows how traffic from the internet should reach internal Kubernetes cluster Services that send requests to groups of Pods. The

lordofkangs.tistory.com

 

인그레스에 대한 설명은 위 포스팅에 정리해놓았다. 인그레스를 사용하려면 세 가지를 작업을 해야한다.

 

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를 서비스와 파드를 띄어보자. 이는 다음 포스팅에서 진행하도록 하겠다. 

 

 


 

참고자료

 

실습1-20. 쿠버네티스 - 인그레스를 통한 내부 접속

다음은 쿠버네티스 스터디 자료를 참고해  정리한 내용입니다. 쿠버네티스-도메인 없이 kops로 aws쿠버설치 https://brunch.co.kr/@topasvga/1681 <1>  인그레스를 통한 내부 접속 흐름 <2> 인그레스  상세

brunch.co.kr

 

인그레스(Ingress)

URI, 호스트네임, 경로 등과 같은 웹 개념을 이해하는 프로토콜-인지형(protocol-aware configuration) 설정 메커니즘을 이용하여 HTTP (혹은 HTTPS) 네트워크 서비스를 사용 가능하게 한다. 인그레스 개념은

kubernetes.io

 

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

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

www.inflearn.com

 

반응형