본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 36: Services Cluster IP

by 공부하는 무니 2023. 1. 5.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 Kubernetes Service Cluster IP에 대해 알아보도록 하겠습니다.

ClusterIP

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

What is a right way to establish connectivity between these services or tiers

이때 애플리케이션 간의 연결을 설정하는 올바른 방법은 무엇일까요? 모든 파드에는 할당된 IP주소가 있습니다. 파드는 얼마든지 죽을 수도 있고 항상 새로운 파드들도 생성됩니다. 따라서 파드에 할당된 IP주소는 정적 주소가 아닙니다. 따라서 애플리케이션 간 통신을 한다고 했을 때, 이 파드 IP에 의존할 수 없습니다. 또한, 다음과 같은 문제도 있습니다. 첫 번째 프론트 엔드 파드(10.244.0.3)가 백엔드 서비스에 연결하고자 할 때 셋 중 누구에게 갈까요? 그 결정을 누가 내릴까요?  위와 같은 문제를 해결하기 위해 Kubernetes 서비스는 Pod를 함께 그룹화하여 Pod에 액세스할 수 있는 단일 인터페이스(Virtual IP)를 제공합니다. 다른 파드가 서비스에 액세스하면 리퀘스트가 파드 중 하나로 전달됩니다. 이를 통해 우리는 쿠버네티스 클러스터에서 쉽게 마이크로서비스 기반 애플리케이션을 효과적으로 배포할 수 있습니다. 다양한 서비스 간의 커뮤니케이션에 영향을 주지 않고 각 레이어의 크기를 조정하거나 이동 할 수 있습니다.(?) 각 서비스에는 IP와 이름이 할당됩니다. 클러스터 내부에서 사용하는 이름으로, 이러한 타입의 서비스를 Cluster IP라고 합니다.

To create a service of type ClusterIP

1. Definition File 생성

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

  • apiVersionv1
  • kindService
  • metadata:
    • name: 이름은 back-end로 하겠습니다.
  • spec:
    • typesClusterIP 입니다. ClsuetrIP는 디폴트 타입입니다. 즉 types를 지정하지 않으면 디폴트로 ClusterIP가 지정됩니다.
    • ports:
      • targetPort: 백엔드가 노출되는 포트입니다. 80으로 지정하겠습니다.
      • port: 서비스가 노출되는 포트입니다. 이 또한 80으로 지정하겠습니다.
    • selector: 서비스를 특정한 파드 그룹에 연결하기 위해 selector를 작성합니다. 여기에는 파드의 labels가 들어갑니다. 완성된 Definition file은 아래와 같습니다.
apiVersion: v1
kind: Service
metadata:
 name: back-end
spec:
 types: ClusterIP
 ports:
 - targetPort: 80
   port: 80
 selector:
   app: myapp
   type: back-end

2. kubectl create로 service 생성

$ kubectl create -f service-definition.yaml

3. 생성한 서비스 조회

$ kubectl get services

반응형

댓글