Skip to content

서비스·네트워킹 (Services)

Pod 은 언제든 교체되므로 IP 가 고정되지 않습니다. 쿠버네티스의 Service 는 Pod 집합에 안정적인 접근 경로(단일 DNS/IP)를 제공하고 로드밸런싱합니다. 데이터스케쳐스 실무 관점에서 정리합니다.

Service 란

  • Service 는 라벨 셀렉터로 Pod 집합을 묶고, 그 집합에 클러스터 내부 안정 주소 (<svc>.<namespace>.svc DNS) 와 로드밸런싱을 제공합니다.
  • 각 엔드포인트로 트래픽을 분산시키므로, Pod 이 죽고 새로 떠도 클라이언트는 같은 주소로 접근하면 됩니다.
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector:
    app: api
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP

Service 타입 (type)

  • ClusterIP (기본): 클러스터 내부 전용 IP. 내부 서비스·DB 등 외부 노출이 필요 없는 것에 사용. 인그레스(Ingress)를 통해 공개 가능.
  • NodePort: 각 노드 IP 의 고정 포트로 외부에 노출. 개발/테스트용.
  • LoadBalancer: 클라우드 로드밸런서를 프로비저닝해 외부 IP 제공.
  • ExternalName: externalName 필드로 외부 호스트명에 매핑.

  • 웹 트래픽은 보통 ClusterIP + Ingress(TLS 종료, 호스트 라우팅) 조합이 가장 비용 효율적입니다.

인그레스(Ingress)와의 관계

  • Ingress 는 서비스 앞에서 HTTP 라우팅·TLS 를 처리합니다. 서비스 자체는 ClusterIP 로 두고, Ingress 가 요청을 서비스로 전달합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
    - host: app.data-sketchers.dev
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: api
                port:
                  number: 80

데이터스케쳐스 실무 관점

  • 내부 API/DB: ClusterIP 로 두어 외부에서 직접 접근 못 하게 하고, 웹만 Ingress 로 공개합니다 (공격면 축소).
  • 개발 웹훅/테스트: 외부에서 콜백이 필요한 경우만 NodePort 나 cloudflared 터널로 노출합니다.

확인 필요

  • Service 의 DNS 동작·세션 어피니티·헤드리스 서비스 등 세부는 kube-proxy 모드와 버전에 따라 다르므로 공식 문서를 재확인하세요. (확인 필요)

더 알아보기