Home (K8S) 서비스(Service)의 개요
Post
Cancel

(K8S) 서비스(Service)의 개요

이 글은 Mumshad Mannambeth가 강의한 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 커리큘럼을 토대로 공부한 내용을 정리하였음을 밝힙니다.


서비스(Service)의 필요성

디플로이먼트(Deployment)를 통해 생성된 파드에 어떻게 접근할 수 있을까? 로컬 개발 환경이나 쿠버네티스 클러스터 내부에서는 kubectl describe pods 명령을 통해 파드의 내부IP를 확인한 뒤 접근할 수는 있다. 그러나 파드는 생성될 때마다 새로운 내부 IP가 할당되므로 IP가 가변적이기 때문에, 파드의 내부 IP만으로는 클러스터 내/외부와 통신을 지속하기 어렵다. 따라서 특별한 접근 방식이 필요하다.

도커에서는 docker run -p 옵션을 통해서 컨테이너를 외부로 노출하여 외부에서 사용자들이 컨테이너 내부로 접근할 수 있었다. 한편, 쿠버네티스에서는 컨테이너의 포트를 외부로 노출하여 사용자들이 파드로 접근할 수 있도록 하기 위해서는, 그리고 다른 파드들이 파드 내부로 접근할 수 있도록 하기 위해서는 별도의 고정된 IP를 가진 서비스(Service)라는 오브젝트를 이용해야 한다.


서비스(Service)의 정의

쿠버네티스 환경에서 서비스(Service)는 클러스터 내/외부에서 내부에 있는 여러 파드들에 접근할 수 있도록 단일 네트워크 진입점을 부여하여, 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트다.

internal networking에서의 서비스 사용 예

예를 들어, 우리가 사용하는 애플리케이션이 프론트엔드 / 백엔드 / 외부 데이터 스소 각 그룹별로 파드가 실행되고 있다고 해보자. 이 그룹들 간 파드를 연결해주는 것이 바로 서비스다.

external networking에서의 서비스 사용 예

웹 애플리케이션 파드를 배포했다고 하면, 어떻게 외부 유저가 웹 페이지에 접근할 수 있을까? 다음과 같은 상황을 가정해보자.

  • 컴퓨터들의 IP
    • 내 랩탑 IP : 192.168.1.10
    • 쿠버네티스 노드의 IP : 192.168.1.2
  • 쿠버네티스 노드 내에서
    • 파드 네트워크의 내부 대역 : 10.244.0.0
    • 접근하고자 하는 파드의 IP : 10.244.0.2 (즉, 웹 페이지가 동작하고 있는 파드의 IP)

위와 같은 상황이라면, 랩탑 네트워크와 파드 네트워크는 분리되어 있으므로, 랩탑 IP에서 파드 IP에 접근(ping)을 할 수 없다.

직관적인 방법으로는, 쿠버네티스 노드(192.168.1.2)로 ssh를 통해 접속한 후, 그 노드에서 접근하고자 하는 웹 페이지가 동작하는 파드에 curl http://10.244.0.2를 통해 접근할 수 있다. 그런데 이러한 방식은 ssh를 통해 강제로 접근하는 방식으로 매우 비효율적이다.

따라서 ssh로 강제 접근하지 않고, 나의 랩탑과 쿠버네티스 노드 내에 있는 파드 간에 연결을 위해서는 아래와 같이 서비스가 필요하다.

fig01

NodePort 타입의 Service 구조

위 그림은 NodePort 타입의 서비스를 보여준다. 이는 쿠버네티스 노드 내에 있는 특정 포트를 listen하고 있다가, 요청이 오면 해당 요청을 웹 애플리케이션을 운영하고 있는 파드의 포트로 전송해주는 역할을 한다.


서비스의 종류

fig02 서비스는 ClusterIP, NodePort, LoadBalancer, ExternalName 타입이 존재하며, 이들 중 ExternalName 타입은 제외하여 정리하고자 한다.

다음 포스트에서 계속


참고 문헌

[1] Mumshad Mannambeth의 강의 : Certified Kubernetes Administrator (CKA) with Practice Tests
[2] 시작하세요! 도커/쿠버네티스 (용찬호 지음) : 시작하세요! 도커/쿠버네티스

This post is licensed under CC BY 4.0 by the author.