쿠버네티스에서 포트포워딩이란, 로컬 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로 종료하면 연결이 끊기며, 파드가 재시작되거나 삭제될 경우 포트포워딩도 자동으로 끊어진다.
노드포트란 쿠버네티스 서비스 타입 중 하나로, 클러스터 외부에서 "직접" 접근 가능한 고정 포트를 노드에 개방한다.
즉, 포트포워딩이 일시적인 통로라면 노드포트는 항상 열려 있는 외부 진입점이다.
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를 입력하여 기본 페이지를 확인한다.
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!)가 정상 표시된다.