Home Service
Post
Cancel

Service

Service

일련의 pods에서 실행중인 어플리케이션을 network service로 노출하기 위한 추상적인 방법.

쿠버네티스에서는 unfamiliar service discovery mechanism을 사용하기 위해서 어플리케이션을 수정할 필요가 없다. 쿠버네티스는 pod들에게 자신만의 ip 주소를 할당해주고 일련의 pod들에게 DNS 하나의 DNS 이름을 제공해주며, 그들 사이에 load-balance 기능을 제공해준다.

  • CoreDNS는 이름으로 services를 resolve하도록 허락함.

  • 다음의 여러 service가 존재함

    • ClusterIP
    • NodePort
    • LoadBalancer
    • ExternalName

Motivation

쿠버네티스 pod들은 클러스터의 상태에 매치하기 위해서 생성되거나 파괴된다. pod들은 비영구적 리소스들이다. 만약 Deployment를 사용한다면, pod들이 다이나믹하게 생성되고 파괴된다.

각각의 pod은 고유 IP address를 가지는데, 한 순간에 실행중인 일련의 pod들은 다른 순간에 실행중인 pod들과는 달라 질 수 있다.

이는 문제를 발생시킨다 : 만약 일련의 pods(“backends”라고 부르자)가 클러스터 내의 다른 pod(“frontends”)에게 기능을 제공해준다면, frontends는 어느 IP 주소와 연결할지 어떻게 알고 기록할 수 있을까?

이 문제를 해결하기 위해 나온것이 Service이다.

Service resources

쿠버네티스에서, pod들에 접근할 수 있도록 logical pod들과 policy를 정의하는 abstraction을 말한다. Service에 의해서 타겟팅된 일련의 pod들은 보통 selector에 의해서 정의된다.

Basic Service Types

  • ClusterIP

    • Single, internal, virtual IP allocated
    • Only reachable from within cluster (nodes and pods)
    • Pods can reach service on apps port number
  • NodePort

    • High port allocated on each node
    • Port is open on every node’s IP
    • Anyone can connect(if they can reach node)
    • Other pods need to be updated to this port
  • LoadBalancer
    • Controls a LB endpoint external to the cluster
    • Only available when infra provider gives you a LB(AWS ELB etc)
    • creates NodePort+ClusterIP services, tells LB to send to NodePort
  • ExternalName
    • Adds CNAME DNS record to CoreDNS only
    • Not used for Pods, but for giving pods a DNS name to use for something outside Kubernetes
  • Kubernetes Ingress

Port Type

  1. port : port other pods use to access the service
  2. targetPort : port the container accepts traffic on
  3. nodePort : port exposing a service externally to the cluster
This post is licensed under CC BY 4.0 by the author.

Trending Tags