[Kubernetes] Service

이멀젼씨

·

2021. 9. 24. 09:16

목적

Service에 대해 알고자 함

목차

  1. Service란?
  2. Service 종류 및 양식

1. Service란?

Pod 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법

Pod는 쿠버네티스에서 가장 작은 실행 단위로 오류가 발생하면 제거되고 새로 생성된다.

만약 우리가 직접 Pod의 IP를 통해 접근을 한다고 할때 예상치 못한 오류로 인해 Pod가 제거된다면 우리는 새로 생성된 Pod의 IP를 알기 전까진 다시 접근이 불가능하다.

따라서 사용자와 Pod 사이에 Service를 두어 Pod는 자동적으로 Service에 자신의 IP를 등록하고, 사용자가 Service로 접근하면 Service가 알아서 우리가 연결하고자 하는 Pod로 트래픽을 보내준다.

2. Service 종류 및 양식

Cluster IP

외부에서는 접근이 불가능하고 클러스터 내부에서만 접근이 가능한 방식이다.

apiVersion: v1
kind: Service
metadata:
  name: service-clusterip
spec:
  selector:
    app: pod
  ports:
  - port: 8090
    targetPort: 8080
  type: ClusterIP
  • selector : 어떤 key: value값을 가진 Pod를 Service에 연결시킬 것인지, 여기선 app: pod라는 Label을 가진 Pod를 연결
  • ports : 포트 설정, port는 생성한 서비스에 접근가능한 port를 설정하고, targetPort는 Service로 들어온 트래픽을 어느 Pod의 포트로 보낼 것인지에 대한 설정
  • type : Service 종류 설정, Cluster IP는 기본값이라 type 속성을 제거해도 무방

클러스터 내부에서 접근하기 때문에 보통 내부 대시보드 등에서 사용된다.

NodePort

노드에 외부에서 접근할 수 있는 포트를 열어두고, 해당 포트를 통해 내부 Service에 접근하면 Service가 Pod로 트래픽을 전달하는 방식이다.
(NodePort -> Service -> Pod)

apiVersion: v1
kind: Service
metadata:
  name: service-nodeport
spec:
  selector:
    app: pod
  ports:
  - port: 8090
    targetPort: 8080
    nodePort: 30000
  type: NodePort
  externalTrafficPolicy: Local
  • nodePort : 노드에서 접근을 허용할 포트를 설정한다. 기본 포트 범위는 30000 ~ 32767이다.
  • type : NodePort를 사용한다고 명시
  • externalTrafficPolicy : Local인 경우 A라는 노드의 포트를 통해 들어온 트래픽은 Service를 거쳐 다시 A라는 노드에 있는 Pod에게 트래픽이 전달된다. 즉, 동일 노드의 Pod로 트래픽이 흘러간다. Cluster로 설정되어있으면 Service가 트래픽을 알아서 분산시켜준다.

Load Balancer

NodePort 앞단에 Load Balancer를 두어 트래픽을 받고, 이 트래픽을 각 노드에 분산시켜준다.

Load Balancer에 접근하기 위한 외부 IP 주소는 기본적으로 생성되지 않으며, 외부 접속 IP를 할당해주는 플러그인을 설치해야 한다.

apiVersion: v1
kind: Service
metadata:
  name: service-loadbalancer
spec:
  selector:
    app: pod
  ports:
  - port: 8090
    targetPort: 8080
  type: LoadBalancer
  • type : Load Balancer를 사용한다고 명시

Load Balancer는 외부 시스템 노출용으로 사용해서 일반 사용자가 접근할 수 있는 통로가 된다.

'Kubernetes > 이론' 카테고리의 다른 글

[Kubernetes] Secret  (0) 2021.10.04
[Kubernetes] ConfigMap  (0) 2021.09.27
[Kubernetes] Pod  (0) 2021.09.15
[Kubernetes] Kubernetes의 정의와 사용목적  (0) 2021.09.14