
현재 테넌트 서버에 접속 가능한 포트는 SSH 접속을 위한 포트뿐입니다. 테넌트 서버에 백엔드 서비스 혹은 모니터링 대시보드 등을 띄웠을 경우 외부 접속 포트가 없고, SSH 접속을 위한 포트로 접속 시 브라우저(HTTP)가 기대하는 응답 웹 프로토콜과 실제 응답으로 나가는 SSH 프로토콜이 충돌하는 상황 발생.

ports:
- port: 2222 # 서비스 자체의 포트
targetPort: 2222 # 파드 내부 컨테이너 포트
nodePort: $NODEPORT # 외부에서 노드로 들어오는 포트
📌 port, targetPort, nodePort 란?
port - 서비스 자체의 포트
- 역할: 쿠버네티스 클러스터 내부에서 서비스 객체가 노출하는 포트
- 설명: 클러스터 안의 다른 파드들이 이 서비스를 호출할 때 사용하는 포트. 즉, 서비스의 DNS 이름이나 ClusterIP를 통해 통신할 때 기준이 됨
targetPort - 파드 내부 컨테이너 포트
- 역할: 트래픽이 최종적으로 도달하는 파드(애플리케이션) 내부의 포트
- 설명: 실제 애플리케이션 코드가 수신 대기(Listen)하고 있는 포트 번호와 일치해야 함.
selector를 통해 연결된 파드로 트래픽을 전달하는 최종 목적지nodePort - 외부에서 노드로 들어오는 포트
- 역할: 클러스터 외부에서 각 워커 노드의 IP를 통해 접근할 때 사용하는 포트
- 설명: 클러스터 외부의 사용자가
노드IP:nodePort로 접속하면 트래픽이 쿠버네티스 내부로 유입- 범위: 기본적으로
30000~32767사이의 포트번호 사용 (지정하지 않으면 범위 내에서 랜덤하게 할당됨)
SSH_NODEPORT 와 WEB_EXTERNAL_PORT 를 관리spec:
type: NodePort
selector:
app: <app 이름>
ports:
# SSH 접속 관련
- name: ssh-access
port: 2222
targetPort: 2222
nodePort: $SSH_NODEPORT # SSH 접속용 NodePort
# 웹 접속 관련
- name: web
port: $WEB_EXTERNAL_PORT
targetPort: $WEB_EXTERNAL_PORT
nodePort: $WEB_NODEPORT
같은 스펙을 가진 테스트용 테넌트 서버에 간단한 nc 명령어로 접속 테스트
echo -e "Welcome to Test Tenant Server!" | nc -l -p <테넌트 서버의 웹 서비스용 포트>
http://<Public IP>:<웹 서비스용 포트> 로 접속

하나의 테넌트 서버에 용도가 다른 두 포트를 개방하며, 외부에서 트래픽이 들어왔을 때 내부에서 그 흐름을 파악할 수 있게 된 리팩토링이었던 것 같습니다. 네트워크 흐름에 대한 정리는 다음 포스팅에서 간단한 아키텍처와 함께 정리해보겠습니다.