개발 창고/Server

네트워킹 - Part3: 서비스 타입 알아보기

로이제로 2025. 7. 28. 22:00
반응형

들어가며: 서비스 타입의 필요성

Kubernetes에서 Service는 Pod에 대한 안정적인 네트워크 접근을 제공하지만, 서비스를 외부로 노출하거나 클러스터 내부에서만 사용하도록 조정하기 위해 다양한 타입이 존재합니다.
이번 글에서는 ClusterIP, NodePort, LoadBalancer, ExternalName 등 주요 서비스 타입의 특징과 활용 방법을 살펴봅니다.


목차 (Table of Contents)

  1. 서비스 타입이란?
  2. ClusterIP: 내부 통신 전용
  3. NodePort: 노드 포트를 통한 외부 접근
  4. LoadBalancer: 클라우드 로드밸런서
  5. ExternalName: 외부 서비스 DNS 연결
  6. 서비스 타입 비교표
  7. YAML 예시로 살펴보기
  8. FAQ (Answer Engine Optimization)
  9. 핵심 요약
  10. 마무리

1. 서비스 타입이란?

서비스 타입(Service Type)은 Service가 트래픽을 어떤 방식으로 노출할지 결정하는 속성입니다.
spec.type 필드에 값을 설정해 지정할 수 있습니다.


2. ClusterIP: 내부 통신 전용

  • 기본값으로 설정되는 타입
  • 클러스터 내부에서만 접근 가능
  • 마이크로서비스 간 통신에 적합
type: ClusterIP

접근 예: curl http://my-service


3. NodePort: 노드 포트를 통한 외부 접근

  • 모든 Node의 30000~32767 포트에서 접근 가능
  • 개발/테스트 환경에서 많이 사용
  • http://<NodeIP>:<NodePort> 방식으로 외부 접근 가능
type: NodePort
ports:
  - port: 80
    targetPort: 8080
    nodePort: 30080

4. LoadBalancer: 클라우드 로드밸런서

  • **클라우드 환경(AWS, GCP, Azure)**에서 사용 시 외부 로드밸런서 자동 생성
  • 운영 환경에서 주로 사용
  • NodePort를 내부적으로 포함
type: LoadBalancer
ports:
  - port: 80
    targetPort: 8080

5. ExternalName: 외부 서비스 DNS 연결

  • 외부 DNS 이름을 Service 이름으로 매핑
  • 클러스터 내부 Pod에서 외부 도메인을 Service처럼 호출 가능
type: ExternalName
externalName: example.com

6. 서비스 타입 비교표

타입 접근 범위 주요 사용 사례
ClusterIP 클러스터 내부 마이크로서비스 통신
NodePort 외부 접근 가능 테스트/개발 환경
LoadBalancer 외부 접근 가능 운영 환경
ExternalName 외부 DNS 매핑 외부 API 연계

7. YAML 예시로 살펴보기

아래는 Deployment + LoadBalancer 서비스 예시입니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
  type: LoadBalancer

8. FAQ (Answer Engine Optimization)

Q1. NodePort와 LoadBalancer의 차이는?
A. NodePort는 노드의 포트를 직접 노출하고, LoadBalancer는 클라우드 로드밸런서를 통해 외부 접근을 관리합니다.

Q2. ClusterIP는 외부에서 접근할 수 없나요?
A. 기본적으로 불가능하지만 kubectl port-forward나 Ingress를 사용하면 가능합니다.

Q3. ExternalName은 언제 사용하나요?
A. 외부 API 서버를 내부 서비스처럼 접근하고 싶을 때 사용합니다.


9. 핵심 요약

타입 특징
ClusterIP 클러스터 내부 접근 전용
NodePort 고정 포트를 통한 외부 접근
LoadBalancer 클라우드 로드밸런서 활용
ExternalName 외부 도메인 매핑

10. 마무리

서비스 타입을 이해하면 Kubernetes 네트워크 설계가 훨씬 유연해집니다.


반응형