[MacOS 환경 #8] 로컬에서 nginx 파드 접속하기 — 포트포워딩 & NodePort 실습

도람·2025년 11월 13일

포트포워딩

쿠버네티스에서 포트포워딩이란, 로컬 PC의 포트를 클러스터 내부 파든의 포트로 직접 연결해주는 기능이다.

즉, 클러스터 안에 있는 파드에 직접 접근할 수 있도록 해주는 것이다.

ex) nginx 파드가 내부에서 80포트를 사용중이라면, 내 PC의 8080 포트를 파드의 80포트로 연결할 수 있다.


예시 코드

파드 생성

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

vim nginx-pod.yaml 로 파일을 생성한다.


파드 배포

kubectl apply -f nginx-pod.yaml


파드 포트포워딩 실행

kubectl port-forward pod/nginx-pod 8080:80

다음 명령어를 사용해서 포트포워딩을 실행할 수 있다. 위의 명령어의 의미는

로컬포트 8080 → 파드 내부 포트 80 으로 트래픽 전달
브라우저에서 http://localhost:8080 접속하면 nginx 파드 페이지 확인 ㅇ

이 상태를 유지하면서,
http://localhost:8080 으로 접속하면 웹 브라우저에서 확인할 수 있다.

포워딩 중지

ctrl + c로 종료하면 연결이 끊기며, 파드가 재시작되거나 삭제될 경우 포트포워딩도 자동으로 끊어진다.

노드포트(NodePort)란

노드포트란 쿠버네티스 서비스 타입 중 하나로, 클러스터 외부에서 "직접" 접근 가능한 고정 포트를 노드에 개방한다.

즉, 포트포워딩이 일시적인 통로라면 노드포트는 항상 열려 있는 외부 진입점이다.

ex) nginx파드를 노드포트 30080에 연결하면, 브라우저에서 http://<노드IP>:30080으로 접근 가능하다.


예시 코드 - 서비스 만들기

apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80          # 서비스 내부 포트
    targetPort: 80    # 파드의 컨테이너 포트
    nodePort: 30080   # 외부에서 접근할 포트 (30000~32767 사이)

vim nginx-nodeport.yaml 하여 해당 yaml파일을 생성해준다.


서비스 적용

kubectl apply -f nginx-nodeport.yaml

apply 하여 서비스를 배포해준다.


서비스 확인

kubectl get svc

해당 명령어를 쳐서 (svc는 service의 약자)

해당 서비스를 확인한다.


서비스 테스트를 위한 파드 생성

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

vim nginx-pod.yaml로 해당 yaml 파일을 만들어준다.


파드 배포하기

kubectl apply -f nginx-pod.yaml

파드 확인하기

kubectl get pods -o wide


만든 nginx-pod가 running상태이므로 잘 배포된 것을 확인할 수 있다.


접근 테스트

curl http://<.podIP>:30080

또는, http:///<.pod IP>:30080를 입력하여 기본 페이지를 확인한다.

Mac(Docker Desktop) 환경에서 NodePort 접속이 안 되는 이유

curl http://<.podIP>:30080

또는, http:///<.pod IP>:30080
를 하여 직접 접속을 시도해봤는데 접속이 안됐다. 그래서 찾아보니 다음 이유라는 것을 확인할 수 있었다.

Docker Desktop의 쿠버네티스는 실제 리눅스 서버가 아니라,
Mac 내부에서 돌아가는 가상 머신(192.168.65.x 대역) 안에 쿠버네티스를 구동하는 구조이다.

즉,

NodePort 포트(예: 30080)는 Docker 내부 네트워크에서만 열려 있고,

Mac 호스트(로컬 브라우저)에서는 직접 접근이 불가능하다.

그래서 http://localhost:30080 또는 http://192.168.65.3:30080 로 접속해도 연결이 실패한다.


### 해결 방법 — 포트포워딩으로 테스트하기

일시적으로 Mac ↔ 파드 직접 통신 경로를 열어주는 방법이다.

kubectl port-forward pod/nginx-pod 8080:80

그다음 브라우저에서
"http://localhost:8080"
으로 접속하면 nginx 기본 페이지(Welcome to nginx!)가 정상 표시된다.


profile
정도를 걷는 엔지니어

0개의 댓글