IT 강의/도커 쿠버

[CKA 강의 요약] Services Cluster IP

rnany 2024. 6. 20. 23:31

Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의의 37. Services Cluster IP 챕터를 공부한 내용으로 강의 내용과 다를 수 있습니다. 정확한 내용은 강의를 들으시는 것을 추천드립니다.


 

1. Cluster IP

풀 스택 웹 애플리케이션에는 일반적으로 다양한 종류의 pod가 있다. 프론트엔드 웹 서버를 실행하는 pod 세트, 백엔드 웹서버를 실행하는 pod 세트, Redis와 같은 key-value store를 실행하는 pod 세트, MYSQL과 같은 영구 데이터베이스를 실행중인 pod 세트들이 있을 수 있다. 웹 프론트엔드 서버는 백엔드서버와 통신해야하며, 백엔드서버는 데이터베이스, Redis서버 등과 통신해야 한다.

상위 구성도와 같이 모든 pod에는 할당된 IP주소가 있다. Pod는 언제든지 새로운 pod로 바뀔 수 있기에 pod에 할당된 IP주소는 정적 주소가 아니다. 이에 애플리케이션 간 통신을 한다고 했을 때, 이 pod IP에 의존할 수 없다.

 Kubernetes service는 첫 번째 프론트 엔드 pod(10.244.0.3)를 백엔드 pod들에 연결하기 위해, 백엔드 pod들을 그룹화하여 액세스할 수 있게하는 단일 인터페이스(Virtual IP)를 제공한다. 그룹이 아닌 pod가 service에 요청하면 요청이 그룹의 pod 중 하나로 전달된다.

이를 통해 쿠버네티스 클러스터에서 효과적으로 쉽게 마이크로서비스 기반 애플리케이션을 배포할 수 있다. 다양한 서비스 간의 통신에 영향을 주지 않고 각 그룹의 크기를 조정하거나 이동 할 수 있다. 각 service는 클러스터 내에서 해당 service에 할당된 IP와 이름을 얻으며, 이 이름은 다른 pod에서 service에 접근하는데 사용하는 이름이다. 이러한 유형의 service를 Cluster IP라고 한다.

 

2. Cluster IP 생성하기

1) 정의 파일 생성

ClusterIP 타입의 서비스를 만들기 위해서는 언제나처럼 먼저 Definition file을 만든다.

apiVersion: v1
kind: Service
metadata:
 name: back-end
spec:
 types: ClusterIP
 ports:
 - targetPort: 80
   port: 80
 selector:
   app: myapp
   type: back-end

apiVersion: v1

- kind: Service

- metadata:

  • name: Service의 이름을 지정한다.

- spec:

  • types: ClusterIP로 types를 지정하지 않으면 기본 값으로 ClusterIP가 지정된다.
  • ports: targetPort와 port가 있다. targetPort는 백엔드가 노출되는 포트이다. port는 서비스가 노출되는 포트이다.

- selector: Service를 특정한 pod 그룹에 연결하기 위해 selector를 작성한다. 여기에는 pod의 labels가 들어간다.

 

 

2) kubectl create로 service 생성

하단 명령어를 통해 정의 파일에 정의된 cluster IP를 생성 할 수 있다.

$ kubectl create -f service-definition.yaml

 

3) 생성한 서비스 조회

get 명령어를 사용해 생성한 service를 조회 할 수 있다.

Clouster IP 또는 service 이름을 사용하여 다른 pod에서 service에 액세스할 수 있다.

$ kubectl get services