DevOps

Kubernetes - Service ( port, targetPort, NodePort )

Vince_rf 2024. 10. 26. 01:32

Kubernetes의 Service 리소스에서 port, targetPort, nodePort는 서비스가 요청을 받아서 파드로 전달하는 과정을 제어하는 주요 필드입니다. 각 필드는 다른 네트워크 계층에서의 포트 역할을 의미합니다.

1. port

  • 역할: 클러스터 내부에서 Service가 사용할 포트입니다.
  • 위치: 클러스터의 가상 IP(ClusterIP)에서 바인딩됩니다.
  • 설명:
    • 서비스가 트래픽을 받는 포트로, 클러스터 내의 다른 파드가 이 서비스에 접근할 때 사용하는 포트입니다.
    • 예를 들어, Service의 ClusterIP가 10.0.0.5이고 port가 80이라면, 10.0.0.5:80을 통해 서비스에 요청을 보낼 수 있습니다.

2. targetPort

  • 역할: Service가 연결할 파드 내 컨테이너의 포트입니다.
  • 위치: Service가 요청을 받아 전달할 때 사용하는 포트로, 파드의 컨테이너가 실제로 요청을 수신하는 포트입니다.
  • 설명:
    • targetPort는 보통 컨테이너 내에서 서비스가 실행 중인 포트 번호를 나타냅니다. 이를 통해 클러스터 외부 포트와 컨테이너 내부 포트를 다르게 설정할 수 있습니다.
    • 예를 들어, port가 80이고 targetPort가 8080이면, Service는 10.0.0.5:80으로 들어온 트래픽을 해당 파드의 8080 포트로 전달합니다.

3. nodePort

  • 역할: Service를 클러스터 외부에 노출하는 고정된 포트입니다.
  • 위치: 클러스터의 모든 노드에서 할당된 특정 포트 번호로 바인딩됩니다.
  • 설명:
    • type: NodePort로 설정된 서비스에서 사용됩니다. Kubernetes는 지정된 포트를 클러스터의 모든 노드에서 열어 클러스터 외부 트래픽을 받을 수 있게 합니다.
    • 이 경우 클라이언트는 <NodeIP>:<NodePort>로 서비스에 접근할 수 있습니다. NodePort는 보통 30000-32767 범위 내의 값으로 설정됩니다.
    • 예를 들어, nodePort가 30080으로 설정되면 클러스터의 모든 노드에서 30080 포트가 열리고, 이 포트를 통해 들어온 요청은 Service의 port로 라우팅됩니다.

예시

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
    - port: 80           # Service가 노출하는 포트
      targetPort: 8080    # 파드 내 컨테이너의 포트
      nodePort: 30080     # 클러스터 외부에서 접근 가능한 포트
  selector:
    app: my-app

이 예시에서는:

  • 클러스터 내부에서는 10.0.0.5:80을 통해 서비스에 접근할 수 있고,
  • 클러스터 외부에서는 <NodeIP>:30080으로 접근할 수 있습니다.
  • 요청은 최종적으로 파드의 8080 포트로 전달됩니다.

요약

  • port: 클러스터 내 Service 포트
  • targetPort: 파드 내 컨테이너 포트
  • nodePort: 클러스터 외부에 노출되는 고정 포트

각 포트 필드는 서로 다른 네트워크 계층에서 역할을 하며, 이를 통해 유연한 서비스 구성이 가능합니다.