Goal

  • 쿠버네티스의 Service에 대해서 알아본다.
  • label, label selector object가 어떻게 Service와 연관되는지 이해
  • 쿠버네티스 Service를 통해서 클러스터 외부로 앱을 노출

Kubernetes Service

Service 정의

쿠버네티스에서 Service는 하나의 논리적인 Pod set과 해당 Pod에 접근할 수 있는 정책을 정의하는 추상적인 개념이다. Service는 종속적인 파드들 사이를 느슨하게 결합되도록 해준다. YAML 혹은 JSON을 통해서 정의 할 수 있다.

Service 사용이유

쿠버네티스 Pods는 생명주기를 갖기때문에 언젠가는 죽게된다. 워커 노드가 죽으면, 노드 상에서 동작하는 파드들 또한 종료된다. 레플리카셋을 통해서 Pods가 지정된 노드에 새롭게 생성되면, Pods의 IP가 변하게 된다. 그렇기 때문에 Service를 통해서 Pods가 클러스터 내부에 어떤곳에 위치하던 외부에서 접근할 수 있도록 하기 위해서 Service를 사용한다.

ServiceSpec

ServiceSpec에서 type을 지정함으로써 다양한 방식으로 외부에 Pods를 노출할 수 있다.

  • ClusterIP : 클러스터 내에서 내부 IP에 대해 서비스를 노출해 준다.(클러스터 내부에서만 서비스가 접근될 수 있도록 한다)

  • NodePort : 클러스터 내에서 각각 선택된 노드들의 동일한 포트에 서비스를 노출시켜준다. NodeIP:NodePort를 이용하여 클러스터 외부로부터 서비스가 접근 가능하게 해준다.

  • LoadBalancer : AWS,GCP와 같은 Cloud를 이용할때 가능한 타입이다. Cloud에서 제공해주는 로드밸런서와 연결해서 클라우드 로드밸런서의 IP를 통해 외부에서 클러스터 Pods로 접근하게 해준다.

  • ExternalName : 클러스터 내부에서 외부로 접근할때 주로 사용한다.

service-label.PNG