이 글은 Mumshad Mannambeth가 강의한 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 커리큘럼을 토대로 공부한 내용을 정리하였음을 밝힙니다.
앞서 쿠버네티스 환경에서 서비스(Service)의 개요와 종류를 간단히 살펴보았다. 이번에는 서비스의 종류 중 ClusterIP
서비스를 살펴보고자 한다.
ClusterIP 서비스란?
ClusterIP
타입은 쿠버네티스가 지원하는 기본 형태의 서비스로, 파드들이 클러스터 내부의 다른 리소스들과 통신할 수 있게 하는 가상의 클러스터 전용 IP
다. ClusterIP는 클러스터 내에서만 사용되는 IP이므로 외부에서는 접근할 수 없다는 점을 유의해야 한다. 클러스터 내부에서만 사용하는 파드라면 상관 없겠으나, 외부에 노출되어야 한다면 NodePort나 LoadBalancer 타입의 서비스를 사용해야 한다.
ClusterIP 서비스 사용의 예
풀스택 웹 애플리케이션을 예로 들어보면, 애플리케이션의 각 부분, 즉 프론트엔드 서버, 백엔드 서버, 그리고 인메모리 key-value 스토어인 Redis나 RDB MySQL 같은 데이터베이스 등이 서로 다른 파드들로 구성되어 있다. 이러한 구조에서 애플리케이션들은 ClusterIP를 통해 통신할 수 있다.
위와 같은 구조를 예로 들면, ClusterIP는 각 tier에 있는 파드들을 하나로 그룹핑하고, 다른 tier의 파드 그룹과 소통할 수 있도록 하나의 통합된 interface
(예를 들어, 그림에서 back-end 파드들에 접근하기 위한 서비스)를 제공한다. 이때 각 서비스는 고유한 IP 주소인 ClusterIP를 가진다.
이러한 방식은 쿠버네티스 클러스터 상에서 마이크로서비스 기반 애플리케이션을 효과적으로 배포할 수 있게 한다. 그덕에 각 레이어에 있는 파드들은 다양한 서비스를 통해 통신되므로, 커뮤니케이션에 지장을 주지 않으면서 스케일링 될 수 있는 것이다.
ClusterIP 정의하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# service-definition.yml
apiVersion: v1
kind: Service
metadata:
name: back-end
spec:
type: ClusterIP
ports:
- targetPort: 80
port: 80
# nodePort 항목이 없음을 주의! 클러스터 내부에서만 사용되며 외부로 노출되기 않기 때문임
selector: # pod 생성 시 labels에 정의되어 있던 내용
app: myapp
type: back-end
kubectl create -f service-definition.yaml
명령으로 생성하며, kubectl get services
명령으로 확인한다.
참고 문헌
[1] Mumshad Mannambeth의 강의
: Certified Kubernetes Administrator (CKA) with Practice Tests
[2] 시작하세요! 도커/쿠버네티스 (용찬호 지음)
: 시작하세요! 도커/쿠버네티스