본문 바로가기

윈도우 개발환경

쿠버네티스로 MSA DevOps 환경 구축; 4. 포트포워딩 없는 Minikube

쿠버네티스로 MSA DevOps 환경 구축

1. 로컬 쿠버네티스설치

2. 로컬 컨테이너 Registry

3. Pod, Service, Deployment

4. 포트포워딩 없는 Minikube

5. URL기반 Service - Ingress

6. Helm | Chart - 패키지 설치

7. Helm | Chart - 패키지 만들기

8. ArgoCD - GitOps

5. 윈도우 WSL2기반 쿠버네티스의 제약

윈도우 운영체제 컴퓨터나 노트북에 쿠버네티스 클러스터를 설치해 사용해 보면, 인터넷에서 검색해서 찾은 방법이 안 되는 경우가 종종 있다고 느꼈을 것이다. 대표적인 것이 외부 네트워크로 서비스를 노출(expose)할 때 일 것이다. 어떤 곳은 NodePort만 사용하면 외부에서 접속이 가능하다고 하는데, 어떤 곳은 그렇게 하면 안 된다고 한다.

 

윈도우에 쿠버네티스 클러스터를 설치하는 방법은, 윈도우10에 WSL2을 사용해서 우분투를 설치할 수 있게 되고 나서,  Docker desktop이 Settings에서 Enable kubernetes를 선택하기만 하면 간단히 쿠버네티스 클러스터를 설치하고 실행할 수 있는 방법을 제공하게 되었다. 이 방법은 설치가 쉬운 대신, 외부에서 쿠버네티스 서비스로 연결하기 위해서는 Docker처럼 포트포워딩을 해야 하는 단점이 있다. Minikube도 간편하게 구성하기 위해 요즘은 Docker desktop을 기반으로 동작하도록 기본설정이 되어 있어 같은 제약에 묶이게 된다.

 

이런 제약에서 벗어나는 방법은 무엇일까?

 

이전에는 윈도우에 minikube를 실행할 때 VirtualBox를 사용했다. VirtualBox를 사용하면, 우분투에서 minikube를 실행할 때와 동일하게 네트워크를 설정할 수 있었다.

 

그래서, 다시 예전처럼 minikube를 VirtualBox를 사용해서 실행한다.

6. VirtualBox기반 Minikube

이미 minikube는 설치되어 있기 때문에 minikube를 다시 설치할 필요는 없다. 설치되어 있지 않다면 다음을 참고해서 설치하도록 한다.

 

쿠버네티스 MSA 기반 CI/CD, DevOps; 1. 로컬 쿠버네티스 설치

쿠버네티스 MSA 기반 CI/CD, DevOps1. 로컬 쿠버네티스설치2. 로컬 컨테이너 Registry3. Pod, Service, Deployment4. 포트포워딩 없는 Minikube 0. 쿠버네티스가 왜 필요할까?지금까지 내가 기록한 내용을 보면, Dock

front-it.tistory.com

a. VirtualBox를 설치한다.

VirtualBox를 설치하고, VirtualBox를 쉽게 사용할 수 있는 Vagrant에 대해서는 아래 글에서 기록한 적이 있다.

 

VirtualBox와 Vagrant로 윈도우에 우분투와 Docker설치하기

0. WSL 우분투 distro의 한계앞에서 설명한 바와 같이 윈도우에는 WSL(Windows Subsystem for Linux)이 있으며, 그 위에 공식적으로 우분투 distro를 제공하고 있다. Docker엔진과 docker-desktop distro 또한 WSL위에서

front-it.tistory.com

b. "가상머쉰 플랫폼"기능을 끈다.

Docker Desktop을 쓰고 있다면 먼저 Win+R을 누른 다음 "appwiz.cpl"을 입력해서 "프로그램 및 기능"화면을 열고, 왼쪽에 "Windows 기능 켜기/끄기"를 선택해서 "가성머쉰 플랫폼"기능을 끈다.  "Hyper-V"기능이 켜져 있다면 "Hyper-V"도 끈다.

 

c. minikube가 VirtualBox VM을 사용하도록 실행한다.

윈도우에서 minikube를 실행하면 docker를 이용하도록 기본설정이 되어 있다. 그래서 VirtualBox를 사용하게 하려면 minikube를 실행할 때 driver를 지정해 줘야 한다.

 

minikube start --driver=virtualbox

 

Minikube에서 지원하는 driver에 대해 알아보려면 아래 페이지를 참고하면 된다.

 

Drivers

Configuring various minikube drivers

minikube.sigs.k8s.io

virtualbox driver를 default로 하려면 아래 명령을 실행하면 된다.

 

minikube config set driver virtualbox

d. minikube registry를 addon으로 enable 한다.

minikube addons enable registry

 

minikube registry는 minikube로 동작하는 쿠너네티스 클러스터에서는 자유롭게 접근이 가능하다. 하지만, Dockerfile로 만든 image를 push 하려면 아래와 같이 포트포워딩을 해줘야 한다.

 

kubectl port-forward --namespace kube-system service/registry 5000:80

 

정상적으로 registry가 동작한다면, 쿠버네티스가 Pod를 생성할 때 이미지를 가져오는 작업에 대해 "Handling connection for 5000"이라는 메시지를 보여줄 것이다.

 

e. 윈도우 터미널에서 docker명령을 사용할 수 있게 아래 명령을 사용해서 minikube환경을 설정한다.

@FOR /f "tokens=*" %i IN ('minikube -p minikube docker-env --shell cmd') DO @%i

 

이 명령은 "minikube docker-env"명령을 사용하면 알려주는 내용으로 만일 .BAT파일에 저장해서 사용하려면, 아래와 같이 변경해서 파일로 저장하면 된다.

 

@echo off
FOR /f "tokens=*" %%i IN ('minikube -p minikube docker-env --shell cmd') DO %%i

 

f. NodePort로 정의된 Service를 만들어 연결이 되는지 테스트해 본다.

docker build로 이미지를 만들고 registry로 push 하고,

 

docker buildx build -t localhost:5000/microservice-a .
docker image push localhost:5000/microservice-a

 

pod를 만들고, NodePort로 서비스를 만들어서 접근할 수 있는지 확인해 본다

 

kubectl.exe apply -f poda.yml
kubectl.exe apply -f servicea.yml

 

NodePort로 선언된 Service로 네트워크가 통과하는지 알기 위해 먼저 minikube의 ip를 확인하고,

 

minikube ip

 

쿠버네티스에 만들어진 Service의 정보를 확인해서 나온 포트 맵핑정보 "80:30632/TCP"를 조합하여

 

kubectl get service

 

"<minikube ip>:<mapping port>" URL을 만들어 curl로 확인해 보았다.

 

`