WSL에서 kind로 쿠버네티스 멀티 노드 클러스터 생성하기
✅ 1. kind 멀티 노드 클러스터 생성하기: 기본적으로 kind create cluster를 실행하면 싱글 노드 클러스터(마스터 노드 1개)만 생성된다. 멀티 노드 클러스터를 만들려면 별도의 yaml 파일이 필요하다.
jooya39.tistory.com
지난번에 kind로 쿠버네티스 멀티 노드 클러스터를 생성하는 포스팅을 했었다. 오늘은 쿠버네티스 클러스터에서 Nginx 서비스를 생성해서 내 로컬 PC에서 브라우저로 직접 접속해보는 내용에 대해 기록하려고 한다.
✅ 1. Kubernetes에서 Nginx 배포
우선, Nginx를 Pod로 배포(=쿠버네티스에서 Nginx 컨테이너가 실행되는 Pod를 만들고)하고, Kubernetes Service를 만들어보자.
🔹 1.1. Nginx 배포
kubectl create deployment nginx --image=nginx
✔ nginx 이미지를 사용해서 배포(Deployment)를 생성
🔹 1.2. Pod 정상 실행 여부 확인
kubectl get pods
✔ Running 상태면 정상 배포된 것
✅ 2. 서비스(Service) 생성 (NodePort 방식)
외부에서 접근할 수 있도록 서비스를 만든다.
🔹 2.1. 서비스 생성
kubectl expose deployment nginx --type=NodePort --port=80
✔ --type=NodePort: 외부에서 접근할 수 있도록 NodePort 서비스 생성
✔ --port=80: Nginx 컨테이너의 기본 포트(80) 사용
🔹 2.2. 서비스 확인
kubectl get svc

✔ nginx 서비스의 **NodePort(32550)**을 확인
✔ 여기서 332550 포트는 다를 수도 있음
노드 포트 확인
kubectl get svc nginx -o=jsonpath='{.spec.ports[0].nodePort}'
✔ 32550 같은 값이 나오면 이 포트로 브라우저에서 접속 가능
✅ 3. 브라우저에서 서비스 접근
kind는 WSL2의 네트워크 환경에서 동작하므로, WSL2의 네트워크 ip를 확인해야 한다.
🔹 3.1. WSL2 네트워크 IP 확인
ip a | grep eth0
// 출력 화면
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 172.20.250.80/20 brd 172.20.255.255 scope global eth0
✔ inet 다음의 ip 주소(위에서 172.20.250.80)가 WSL2의 ip 주소이다.
🔹 3.2. 브라우저에서 접속
// 예제
http://<WSL2-IP>:<NodePort>
// 필자의 사설 ip를 기준으로 접속하는 명령어
http://172.20.250.80:32550
: Nginx 기본 페이지가 보이면 성공인데, 필자는 아래처럼 '사이트에 연결할 수 없음'이 뜨면서 Nginx 서비스 페이지가 보이지 않았음. 이유는 포트포워딩 때문..! WSL2은 Windows와 별도의 네트워크 인터페이스를 가지기 때문에 WSL2의 eth0 인터페이스를 Windows 에서는 인식하지 못한다. 그래서 Windows 로컬 브라우저에서 WSL2의 인터페이스로 접근이 가능하도록 포트포워딩이 필요하다.
✅ 4. WSL2에서 NodePort 서비스(nginx) 포트포워딩 설정 방법
🔹 4.1. Windows PowerShell(관리자 권한)에서 실행
netsh interface portproxy add v4tov4 listenport=32550 listenaddress=0.0.0.0 connectport=32550 connectaddress=172.20.250.80
netsh advfirewall firewall add rule name="K8s-NodePort-32550" dir=in action=allow protocol=TCP localport=32550
- netsh interface portproxy add v4tov4 ...
→ Windows에서 localhost:32550로 들어온 요청을 WSL2의 172.20.250.80:32550으로 전달 - netsh advfirewall firewall add rule ...
→ Windows 방화벽에서 32550 포트 허용
🔹 4.2. iptables 설치 후 iptables 규칙 추가(포트 허용)
sudo iptables -L -n -v | grep 32550
sudo iptables -A INPUT -p tcp --dport 32550 -j ACCEPT
근데 나는 포트포워딩 해도 접속이 안돼서 WSL2 내부에서 curl 을 이용해 호출해보니 아래와 같이 연결 실패 에러가 떴다.
root:~# curl http://172.20.250.80:32550
curl: (7) Failed to connect to 172.20.250.80 port 32550 after 0 ms: Couldn't connect to server
그 외 nginx 서비스를 다시 지웠다 생성도 해보고, 이것저것 설정을 해줬는데도 Pod 내부 서비스는 정상이지만 내 윈도우 PC에서 nodeport로 접근하지 못하는 문제가 계속 발생했다. 아직 해결을 못해서 해결하면 다시 포스팅해야겠다 ;ㅅ;ㅅ;
'Opensource > k8s' 카테고리의 다른 글
WSL에서 kind로 쿠버네티스 멀티 노드 클러스터 생성하기 (2) | 2025.02.12 |
---|---|
Windows WSL 환경에서 kind로 쿠버네티스(Kubernates) 생성하기 (0) | 2025.02.12 |
테라폼(Terraform)으로 VM 생성 후 쿠버네티스(Kubernates) 환경 구축하기 (1) (0) | 2025.02.10 |