service 동작원리이해, service type - cluster IP

장동민·2022년 8월 1일
0

CKA 자격증 준비

목록 보기
8/13

1. Kubernetes Service 구현

  • Pod network : CNI(Container Network Interface)에서 관리하는 포트 간 통신에 사용되는 클러스터 전체 네트워크
  • Service Network : Service discovery를 위해 kube-proxy가 관리하는 Cluster-wide 범위의 Virtual IP


2. Kube-proxy

  • Kubernetes Network Proxy
  • 각각의 Node에서 실행되고, Kubernetes Service API에 정의된 서비스를 각 노드에서 반영
  • kube-proxy 역할 : iptables rule을 설정하고 외부 네트워크와 Pod를 연결시킨다.


3. Service Type

  • ClusterIP(default) : Pod 그룹(동일한 서비스를 지원하는 Pod 모음)의 단일 진입점(Virtual IP:LB)생성
  • NodePort : ClusterIP가 생성된 후 모든 Worker Node에 외부에서 접속 가능한 포트가 예약
  • LoadBalancer : 클라우드 인프라스트럭처(AWS, Azure, GCP)에 적용, LoadBalancer를 자동으로 프로 비전하는 기능 지원

4. ClusterIP

  • selector의 label이 동일한 Pod들을 그룹으로 묶어 단일 진입점(Virtual_IP)을 생성
  • 클러스터 내부에서만 사용 가능
  • Service type 생략 시 default로 설정
  • 10.96.0.0/12 범위에서 할당됨

5. ClusterIP 서비스 운영

  • LAB : 동일한 서비스를 제공하는 Pod 그룹에 ClusterIP 생성
    • deployment name: web, image: nginx, port: 80, replicas: 2
    • service name: web, type: clusterIP, port: 80
  1. deployment 생성

  2. deployment 생성 확인

  1. service 생성 및 확인

  1. worker노드 중 하나로 접속하여 CLUSTER-IP로 요청 및 확인(deployment 확인 시 생성되었던 pod 2개 중 하나가 요청에 응답함)


※ 문제1 : ClusterIP type의 서비스 운영

  • 작업 클러스터 : k8s
  • 'devops' namespace에서 운영되고 있는 eshop-order deployment의 Service를 만드세요.
    • Service Name: eshop-order-svc
    • Type: ClusterIP
    • Port : 80
  1. 작업 클러스터 확인

  1. 이름이 devops인 namespace가 동작중인지 확인

  1. 이름이 devops인 namespace에 타입이 ClusterIP이고, port가 80이고, targetPort가 80인 이름이 eshop-order-svc인 Service를 yaml 형태로 출력하여 실제로 동작 가능한지 확인

  1. 이름이 eshop-order-svc인 Service 생성 및 확인

  1. worker노드 중 하나에 접속하여 Endpoint의 IP에 요청하여 확인(정상적으로 Service 생성)


※ 문제2 : Pod를 이용한 Named Service 구성

(참고 URL : https://kubernetes.io/ko/docs/concepts/services-networking/service/#nodeport)

  • 작업 클러스터 : k8s
  • 미리 배포한 'front-end'에 기존의 nginx 컨테이너의 포트 '80/tcp'를 expose하는 'http'라는 이름을 추가합니다.
  • 컨테이너 포트 http를 expose하는 'front-end-svc'라는 새 service를 만듭니다.
  • 또한 준비된 node의 'NodePort'를 통해 개별 Pods를 expose되도록 Service를 구성합니다.
  1. 작업 클러스터 확인
  1. 기존에 배포되었던 이름이 front-end인 deployment를 yaml 파일로 생성하여 vi 에디터로 편집 실행

  1. Service 추가하여 yaml 파일 수정 및 저장

  1. 만들었던 yaml 파일 apply 및 pod 및 service 생성 확인

  1. 준비된 node의 'NodePort'를 통해 개별 Pods를 expose되도록 Service를 구성해야 하므로 Service 편집 명령어 실행

  1. Service 편집에서 type을 'NodePort'로 수정 후 저장

  1. Service 조회 시 type이 NodePort로 바뀐 것을 확인

  1. type이 NodePort 이므로 console에서 생성된 포트로 요청 시 응답이 제대로 오는 것을 확인

profile
나만의 데이터베이스

0개의 댓글