[Kubernetes] 서비스(Service): 포드를 연결하고 외부에 노출

연수·2021년 11월 9일
0

kubernetes

목록 보기
8/15

여러 개의 디플로이먼트를 하나의 완벽한 애플리케이션으로 연동하려면 포드 IP가 아닌, 서로를 발견(Discovery)할 수 있는 다른 방법이 필요하다.

도커 컨테이너는 -p(publish) 옵션으로 손쉽게 컨테이너를 외부로 노출할 수 있다. 그러나 쿠버네티스에서는 포드에 접근하도록 정의하는 방법이 도커와 다르다. 디플로이먼트의 YAML 파일에는 포드의 애플리케이션이 사용할 내부 포트만 정의한다. 이는 포드가 외부로 노출되게 하지는 않는다.

포트를 외부로 노출해 사용자들이 접근하거나, 다른 디플로이먼트의 포드들이 내부적으로 접근하려면 서비스(Service)라고 부르는 별도의 쿠버네티스 오브젝트를 생성해야 한다.

🌟 핵심 기능

  • 여러 개의 포드에 쉽게 접근할 수 있도록 고유한 도메인 이름을 부여
  • 여러 개의 포드에 접근할 때, 요청을 분산하는 로드 밸런서 기능 수행
  • 클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 포트 등을 통해 포드를 외부로 노출

 

🤔 서비스의 종류

쿠버네티스의 서비스는 포드에 어떻게 접근할 것이냐에 따라 종류가 세분화되어 있어 목적에 맞는 적절한 서비스의 종류를 선택해야 한다.

  1. ClusterIP 타입
    • 쿠버네티스 내부에서만 포드들이 접근할 때 사용
    • 외부로 포드를 노출하지 않아 쿠버네티스 클러스터 내부에서만 사용되는 포드에 적합
    • 서비스와 연결된 여러 개의 포드에 자동으로 요청 분산 (→ 로드밸런싱 수행)
    • IP 또는 서비스 이름 자체로 접근 가능
  2. NodePort 타입
    • 포드에 접근할 수 있는 포트를 클러스터의 모든 노드에 동일하게 개방
    • 접근 가능 포트는 랜덤하게 정해지지만, 특정 포트로 접근하도록 설정 가능
    • 외부에서 포드에 접근 가능
    • ClusterIP의 기능을 포함한다. 즉, 내부와 외부 네트워크 양쪽에서 접근이 가능하다.
  3. LoadBalancer 타입
    • 클라우드 플랫폼에서 제공하는 로드 밸런서를 동적으로 프로비저닝해 포드에 연결
    • 외부에서 포드에 접근 가능
    • 실제 운영 환경에서 많이 사용
    • 서비스 생성과 동시에 로드 밸런서를 새롭게 생성해 포드와 연결
    • 클라우드 플랫폼 환경에서만 사용 가능

 

✔️ externalTrafficPolicy

트래픽의 분배를 결정하는 서비스 속성

  1. externalTrafficPolicy: Cluster

    모든 워커 노드에서 동일한 랜덤 포트가 개방

    로드 밸런서 → 노드 중 하나로 요청 전달 → 포드 중 하나로 요청 전달

  2. externalTrafficPolicy: Local

    포드가 위치한 노드만 랜덤한 포트를 개방

    로드밸런서는 포드가 위치한 노드로만 요청을 전달하며, 해당 노드 내의 포드에서만 요청이 분산된다.

    네트워크 홉(hop)이 한 단계 줄어든다.

    특정 노드의 포드에 부하가 집중되거나 적어질 수 있어, 자원 활용률 측면에서 바람직하지 않을 수도 있다.

 

✔️ ExternalName

요청을 외부로 리다이렉트하는 서비스

쿠버네티스를 외부 시스템과 연동해야 할 때 ExternalName 타입의 서비스를 사용할 수도 있다.

ExternalName 타입을 사용해 서비스가 외부 도메인을 가리키도록 설정할 수 있다.

 

[출처] 시작하세요! 도커/쿠버네티스 (용찬호 지음)

profile
DCDI

0개의 댓글