[쿠버네티스] #2. 서비스란? Service란? :: 잡다한 프로그래밍
반응형

1. Service란?

  • 파드에서 실행 중인 프로세스를 위한 신원을 제공한다(공식 홈페이지)
  • 파드에는 수명이 있기 때문에(휘발성 이므로 IP가 변한다) 이에 고정된 주소로 접근하기 위해 Serive가 존재
  • 서비스에는 ClusterIP, NodePort, Load Balancer로 3가지 종류가 존재한다.

2. 서비스 종류

#1) ClusterIP

  • 클러스터 IP로 만들어진 서비스는 외부에서는 접근할 수 없으나 같은 클러스터(같은 쿠버네티스로 연결된) 내에서는 접근이 가능하다.
  • 서비스 내에 파드는 한 개일 수도 여러 개일 수도 있다.
  • 여러 개의 파드가 연결되어있을 경우 트래픽을 분산하여 파드로 전달함
  • 외부에서 접근할 수 없고, 클러스터 내부에서만 사용하기 때문에 허가된 사용자만 사용하는 용도 ex) 쿠버네티스 내부 대시보드

Service Yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 2000
  type: ClusterIP //생략가능함 기본 옵션임

Pod Yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  labels:
  app: pod
spec:
  containers:
  - name: container
    image: 이미지명
    ports:
    - containerPort: 2000

svc-1 서비스가 라벨이 app: pod인 pod-1와 연결된 모습이다.

 

#2) NodePort

  • NodePort로 만들어도 ClusterIP는 할당되어 ClusterIP기능을 기본으로 포함하고 있다
  • 모든 노드에 설정한 Port가 할당되고 외부에서 설정한 port로 요청이 올 경우 서비스로 서비스는 파드로 요청이 전달됨
  • 내부망이나, 일시적인 외부 연결용(개발하다가 외부에 임시로 보여줄 때)

그림과 같이 외부로부터 접근이 있을 때 파드가 없는 노드 1(컴퓨터라 생각하면 편함)로 30000 포트로 접근하면 연결된 9000 포트 서비스로 연결함 파드가 있는 노드 2로 접근해도 같은 결과를 나타냄.

 

Service Yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-2
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 2000
      nodePort: 30000 //30000~32767사이로 가능
  type: NodePort

 

#3) Load Balancer

  • 기본적인 노트 포트의 특징을 그대로 가지고 있음
  • 추가적인 로드벨런서가 생겨서 각 노드에 트래픽을 분산시켜주는 역할을 함
  • 기본적인 쿠버네티스만을 설치해서 사용하는 경우 로드밸런서가 생기지 않음 별도로 플러그인을 설치해야 함(GCP, AWS에서 제공하는 쿠버네티스를 사용할 경우에는 제공해줌)
  • 실질적으로 외부로 시스템을 노출할 때 사용함

 

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-3
spec:
  selector:
    app: pod
  ports:
    - port: 9000
      targetPort: 2000
    type: LoadBalancer
반응형

+ Recent posts