Skip to content

Kubernetes:Service

About

Subicura.com_-k8s-guide-_pod-service.png

ClusterIP

ClusterIP는 클러스터 내부에 새로운 IP를 할당하고 여러 개의 Pod을 바라보는 로드밸런서 기능을 제공합니다. 그리고 서비스 이름을 내부 도메인 서버에 등록하여 Pod 간에 서비스 이름으로 통신할 수 있습니다.

NodePort

CluterIP는 클러스터 내부에서만 접근할 수 있습니다. 클러스터 외부(노드)에서 접근할 수 있도록 NodePort 서비스를 만들어봅니다.

Kubernetes-nodeport.png

Example

NginX를 사용하여 서비스 포트를 연결하는 예제로, 자세한 내용은 Kubectl:run#NodePort 로 서비스 연결 항목 참조.

ClusterIP vs NodePort

ClusterIP

NodePort

접근 범위

클러스터 내부만

클러스터 외부에서도 가능

접근 방법

svc-name:8080 또는 ClusterIP:8080

<노드IP>:31234

노드 포트

없음

30000-32767 범위에서 할당

용도

내부 마이크로서비스 간 통신

외부 노출 (개발/테스트용)

정리

  • ClusterIP — 클러스터 안의 다른 Pod들만 my-nginx-svc:8080으로 접근 가능
  • NodePort — 위 기능 + 클러스터 밖에서 <워커노드IP>:31234로 직접 접근 가능

프로덕션에서 외부 노출이 필요하면 보통 NodePort보다 LoadBalancer나 Ingress를 사용합니다.

LoadBalancer

NodePort의 단점은 노드가 사라졌을 때 자동으로 다른 노드를 통해 접근이 불가능하다는 점입니다. 예를 들어, 3개의 노드가 있다면 3개 중에 아무 노드로 접근해도 NodePort로 연결할 수 있지만 어떤 노드가 살아 있는지는 알 수가 없습니다.

자동으로 살아 있는 노드에 접근하기 위해 모든 노드를 바라보는 Load Balancer가 필요합니다. 브라우저는 NodePort에 직접 요청을 보내는 것이 아니라 Load Balancer에 요청하고 Load Balancer가 알아서 살아 있는 노드에 접근하면 NodePort의 단점을 없앨 수 있습니다.

LoadBalancer 와 NodePort

LoadBalancer는 NodePort의 기능을 기본으로 포함합니다.

네트워크 통신 시각화

See also