쿠버네티스로 MSA DevOps 환경 구축
4. 포트포워딩 없는 Minikube
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를 다시 설치할 필요는 없다. 설치되어 있지 않다면 다음을 참고해서 설치하도록 한다.
a. VirtualBox를 설치한다.
VirtualBox를 설치하고, VirtualBox를 쉽게 사용할 수 있는 Vagrant에 대해서는 아래 글에서 기록한 적이 있다.
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에 대해 알아보려면 아래 페이지를 참고하면 된다.
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로 확인해 보았다.
'윈도우 개발환경' 카테고리의 다른 글
쿠버네티스로 MSA DevOps 환경 구축; 6. Helm | Chart - 패키지 설치 (1) | 2024.08.29 |
---|---|
쿠버네티스로 MSA DevOps 환경 구축; 5. URL기반 Service - Ingress (0) | 2024.08.28 |
쿠버네티스로 MSA DevOps 환경 구축; 3. Pod, Service, Deployment (1) | 2024.08.18 |
시계열 데이터베이스 사용하기; 2. InfluxDB 이용한 모니터링 대시보드 (1) | 2024.03.26 |
쿠버네티스로 MSA DevOps 환경 구축; 2. 로컬 컨테이너 Registry (0) | 2024.02.23 |