Post

[Kubernetes] 쿠버네티스 네트워킹 이해하기 (3) - 외부로 서비스 노출하기 (NodePort, LoadBalancer)

[Kubernetes] 쿠버네티스 네트워킹 이해하기 (3) - 외부로 서비스 노출하기 (NodePort, LoadBalancer)

🌐 쿠버네티스 네트워킹 기초 (3): 우리 앱을 세상 밖으로!

지난 시간에는 클러스터 내부에서만 통신할 수 있는 가상 IP인 ClusterIP를 알아봤습니다. 하지만 서비스는 결국 사용자가 접속해야 의미가 있죠. 🌍

오늘은 내부망에 갇혀있는 서비스를 외부로 꺼내는 두 가지 핵심 방법, NodePortLoadBalancer의 원리를 파헤쳐 보겠습니다.


🚪 1. 가장 단순한 외부 노출: NodePort

NodePort는 말 그대로 모든 노드(서버)의 특정 포트를 개방하여 내부 서비스로 연결하는 방식입니다.

💡 동작 원리

  1. 모든 노드의 동일한 포트(기본 범위: 30000-32767)를 엽니다.
  2. 사용자가 노드IP:포트로 접속하면, 해당 노드는 그 트래픽을 서비스(ClusterIP)로 전달합니다.
  3. 서비스는 다시 이를 파드(Pod)로 전달합니다.

✅ 특징

  • 장점: 별도의 외부 장비 없이 클러스터 자체 기능만으로 외부 접속이 가능합니다.
  • 단점: 노드의 실제 IP가 노출되며, 포트 관리가 번거롭습니다. 노드 IP가 변경되면 클라이언트 설정도 바꿔야 합니다.

⚖️ 2. 클라우드의 표준: LoadBalancer

대부분의 클라우드 환경(AWS, GCP, Azure 등)에서 사용하는 가장 대중적인 방식입니다.

💡 동작 원리

  1. Service를 생성하면 클라우드 공급자에게 로드밸런서 생성을 요청합니다.
  2. 클라우드 공급자는 외부 IP가 할당된 로드밸런서를 생성하고 클러스터의 NodePort와 연결합니다.
  3. 사용자는 클라우드사가 제공하는 고정된 외부 IPDNS를 통해 접속합니다.

✅ 특징

  • 장점: 노드의 IP를 숨길 수 있고, 고정된 엔드포인트를 제공하여 운영이 편리합니다.
  • 단점: 클라우드 서비스 비용이 발생하며, 온프레미스(자체 서버) 환경에서는 별도의 솔루션(예: MetalLB)이 없으면 사용하기 어렵습니다. 💸

⚡ 3. 성능 최적화의 핵심: externalTrafficPolicy

외부 트래픽이 들어올 때 매우 중요한 설정값이 하나 있습니다. 바로 externalTrafficPolicy입니다.

  • Cluster (기본값): 트래픽을 받은 노드에 파드가 없으면 다른 노드로 전달합니다. 이 과정에서 홉(Hop)이 발생하고 Client IP가 소실(SNAT)될 수 있습니다.
  • Local: 트래픽을 받은 노드에 파드가 있을 때만 처리합니다. 다른 노드로 전달하지 않으므로 성능이 빠르고 Client IP가 보존되지만, 특정 노드에 트래픽이 몰릴 수 있습니다. 🏎️

🔍 4. 핵심 요약: 어떤 것을 선택할까?

방식용도권장 환경
NodePort테스트, 내부 통신용온프레미스, 간단한 데모
LoadBalancer실서비스 운영용퍼블릭 클라우드, MetalLB 환경
IngressL7 영역 제어 (도메인 기반)여러 서비스를 하나의 IP로 묶을 때
This post is licensed under CC BY 4.0 by the author.