본문 바로가기

Computer Science/Kubernetes 정리

Kubernetes 정리 9 : Services ClusterIP

1. Cluster IP

  • 쿠버네티스에서 Pod는 컨트롤러가 관리하므로 노드를 옮겨다니면서 실행되기도 하고 클러스터 안 Pod의 IP가 변경되기도 한다. 이렇게 동적으로 변하는 Pod에 고정적으로 접근할 때 사용하는 방법이 Service다.
  • 서비스(ClusterIP) 생성 시, apiserver → (kubelet) → kube-proxy → iptables 에 rule이 생성됨
  • 풀스택 웹 애플리케이션에는 일반적으로 다양한 종류의 파드가 있다. 
  • 프론트엔드 웹 서버를 실행하는 파드 세트, 백엔드 웹서버를 실행하는 파드 세트, Redis와 같은 key-value store를 실행하는 파드 세트, MYSQL과 같은 영구 데이터베이스를 실행중인 파드 세트 등이 있을 수 있다. 
  • 웹 프론트엔드 서버는 백엔드서버와 통신해야하며, 백엔드서버는 데이터베이스, Redis서버 등과 통신해야 한다.

2. 애플리케이션 간의 연결을 설정하는 올바른 방법

  • 모든 파드에는 할당된 IP주소가 있다. 
  • 파드는 얼마든지 죽을 수도 있고 항상 새로운 파드들도 생성된다. 
  • 따라서 파드에 할당된 IP주소는 정적 주소가 아니다.
  • 따라서 애플리케이션 간 통신을 한다고 했을 때, 이 파드 IP에 의존할 수 없다. 
  • 여기서 의문,
    첫 번째 프론트 엔드 파드(10.244.0.3)가 백엔드 서비스에 연결하고자 할 때 셋 중 누구에게 갈까? 그 결정을 누가 내릴까?
    위와 같은 문제를 해결하기 위해 Kubernetes 서비스는 Pod를 함께 그룹화하여 Pod에 액세스할 수 있는 단일 인터페이스(Virtual IP)를 제공한다.

 

3. Service of type ClusterIP 생성 방법

1) Definition file 생성

ClusterIP 타입의 서비스를 만들기 위해 먼저 Definition file을 만든다.

apiVersion : v1
kind : Service
metadata:
	name : back-end (이름을 'back-end'로 한다)
spec : 
	types : ClusterIP (ClusterIP는 디폴트 타입이다)
	ports :
		targetPort : 80(백엔드가 노출되는 포트. 80으로 지정한다)
		port : 80(서비스가 노출되는 포트. 이것도 80으로 지정한다)
	selector: 
		app: myapp
		type: back-end

 

2) kubectl create로 service 생성.

$ kubectl create -f service-definition.yaml

 

3) 생성한 service 조회

$ kubectl get services