DevOps./Kubernetes

[Kubernetes] Service (서비스)

PI.314 2022. 2. 2. 03:40

서비스란?

Deployment를 통해 파드를 수평확장 하면 트래픽은 어떻게 분산시키지? 외부로부터의 요청을 받으려면 어떻게 해야하지?

서비스 (Service)

여러 파드에 대해 클러스터 내에서 사용 가능한 고유 도메인 부여 여러 파드에 대한 요청을 분산하는 로드 밸런서 기능 수행
파드의
IP는 항상 변할 수 있음에 유의.

일반적으로는 ClusterIP 타입의 Service와 함께 Ingress를 사용하여 외부 트래픽을 처리합니다.

 

서비스의 종류 (총 4가지)

1. ClusterIP와 서비스 디스커버리

ClusterIP

  • Service API 리소스의 가장 기본적인 타입
  • 쿠버네티스 클러스터는 Pod에 부여되는 Pod IP를 위한 CIDR 대역과
 Service에 부여되는 Cluster IP CIDR 대역이 독립적으로 존재
  • Label Selector를 통해 서비스와 연결할 파드 목록 관리
  • Cluster IP 로 들어오는 요청에 대하여 파드에 L4 레벨의 로드밸런싱
  • Cluster IP 뿐만아니라 내부 DNS을 통해 서비스 이름을 이용한 통신 가능
  • 서비스 네트워크 IP / Port 정보
    • spec.clusterIp:spec.ports[*].port

서비스의 Cluster IP CIDR 대역 확인

$ kubectl cluster-info dump | grep -m 1 service-cluster-ip-range

ClusterIP 타입의 Service는 쿠버네티스 클러스터 내부 통신 목적으로만 사용 가능합니다.

 

2. NodePort로 외부에 노출하기

NodePort

  • 모든 쿠버네티스 노드의 동일 포트를 개방하여 서비스에 접근하는 방식
  • NodePort는 ClusterIP 타입 서비스를 한 번 더 감싸서 만들어진 것
    • NodePort 서비스도 ClusterIP 사용 가능
    • NodePort로 들어온 요청은 실제로 ClusterIP로 전달되어 Pod로 포워딩
  • 서비스 네트워크 IP / Port 정보
    •  <NodeIP>:spec.ports[*].nodePort
    • spec.clusterIp:spec.ports[*].port

 

3. LoadBalancer로 클라우드 프로바이더의 로드밸런서 연동

LoadBalancer

    • 클라우드 프로바이더에서 제공하는 로드밸런서를 동적으로 생성하는 방식
    • LoadBalancer 타입 서비스는 NodePort 타입 서비스를 한 번 더 감싸서 만들어진 것
      • LoadBalancer 서비스도 ClusterIP 사용 가능
      • LoadBalancer 서비스를 통해 만들어진 로드밸런서는 NodePort를 타겟 그룹으로 생성
      • NodePort로 들어온 요청은 실제로 ClusterIP로 전달되어 Pod로 포워딩
    • 서비스 네트워크 IP / Port 정보
      • spec.loadBalancerIp:spec.ports[*].port
      • <NodeIP>:spec.ports[*].nodePort
      • spec.clusterIp:spec.ports[*].port

AWS / GCP 등과 같은 클라우드 환경이 아니라면 기본적으로는 해당 기능 이용이 불가 MetalLB와 같은 기술 등을 사용하여 온프레미스 환경에서도 LoadBalancer 타입 사용 가능

 

4. ExternalName로 외부로 요청 전달

ExternalName

서비스가 파드를 가리키는 것이 아닌 외부 도메인을 가리키도록 구성 가능
DNSCNAME 레코드와 동일한 역할 수행
클러스터의 외부에 존재하는 레거시 시스템을 쿠버네티스로 마이그레이션하는 과정에
활용 가능

ExternalName 타입의 서비스는 앞서 다룬 세 서비스 타입과 비교해 많이 사용되지는 않습니다.

참조: https://fastcampus.co.kr/dev_online_awsdevops

 

'DevOps. > Kubernetes' 카테고리의 다른 글

[Kubernetes] Secret  (0) 2022.02.02
[Kubernetess] ConfigMap  (0) 2022.02.02
[Kubernetes] Deployment (디플로이먼트)  (0) 2022.02.02
[Kubernetes] ReplicaSet (레플리카셋)  (0) 2022.02.02
[Kubernetes] 파드 (Pod)  (0) 2022.02.02