본문 바로가기
K8S/주요 개념

Service

by HH_g 2024. 1. 18.

  쿠버네티스에서 서비스(Service)는 일련의 파드(Pod)에 대한 네트워크 엔드포인트를 제공하고, 이를 통해 파드의 안정적인 네트워크 통신을 지원하는 추상적인 개념입니다.

 

  파드는 생성될 때마다 내부 IP 주소가 변화하기 때문에 애플리케이션이 안정적으로 외부와 상호 통신이 가능하기 위해서는 고정된 IP 주소가 필요합니다. 서비스가 이런 역할을 해줍니다.

 

  정리하자면, 서비스는 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트입니다.

여러 파드들에게 단일한 네트워크 진입점을 부여합니다. 

 

쿠버네티스에서는 주로 다음 네 가지 종류의 서비스를 사용합니다

출처 :  containers - What's the difference between ClusterIP, NodePort and LoadBalancer service types in Kubernetes? - Stack Overflow

1. ClusterIP

 

ClusterIP 서비스는 클러스터 내에서 파드에 접근하기 위한 가상 IP를 제공합니다.
클러스터 내부에서만 사용 가능하며 외부에서는 접근할 수 없습니다.
주로 내부 컴포넌트 간 통신에 사용됩니다.

clusetIP로 들어온 클러스터 내부 트래픽을 해당 파드의 [파드IP]:[targetPort]로 넘겨줌

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

 

2. NodePort

NodePort 서비스는 클러스터 외부에서 파드에 접근할 수 있도록 각 노드의 IP와 지정된 포트를 사용하는 서비스를 제공합니다.

클러스터 외부에서 노드의 IP와 지정된 포트로 서비스에 접근할 수 있습니다.

주로 개발 및 테스트 목적으로 사용됩니다.

위 사진에서 로컬 IP192.168.1.10 이고, 노드 IP192.168.1.2 입니다.

트래픽이 도달해야할 파드의 IP10.244.0.2 입니다. 

이 상황에서 로컬에서 Pod IP로는 접근이 불가하지만, 쿠버네티스 내부에서는 curl http://10.244.0.2 로 접근이 가능합니다.

위 사진에서 로컬에서 해당 파드로 접근하기 위해서 노드포트 서비스를 사용하여 30008번 포트가 열려있습니다.

이제 로컬에서는 [노드 IP]:[노드포트] 즉, 192.169.1.2:30008 주소로 해당 파드에 접근이 가능합니다.

이렇게 원하는 파드에 접근하기 위해서는 포트를 정해서 정해진 노드의 파드에 트래픽 forward를 해주는 서비스를 노드포트라고 합니다.

 

Nodeport는 30000~32767 사이로만 지정할 수 있습니다.

 

 

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
  namespace: default
spec:
  ports:
  - nodePort: 30080
    port: 8080
    targetPort: 8080
  selector:
    name: simple-webapp
  type: NodePort

 

NodePort: 서비스를 클러스터의 각 노드에 공개적으로 노출할 수 있게 열린 포트.

Port: 서비스 쪽에서 해당 파드를 향해 열려있는 포트. 클러스터 내에서 서비스가 사용하는 포트입니다. 

TargetPort : 파드의 애플리케이션 쪽에서 열려있는 포트. 서비스로 들어온 트래픽은 해당 파드의 [클러스터 내부 Ip]:[TargetPort] 로 넘어갑니다.

 

 

 

clusterIP인 10.43.31.5 에 port 8080 으로 simple-webapp에 접근 가능

node의 ip인 192.22.143.6 에 nodeport 30080으로 simple-webapp에 접근 가능

 

 

3. LoadBalancer

 

LoadBalancer 서비스는 퍼블릭 클라우드에서 제공하는 로드 밸런서를 사용하여 클러스터 외부에서 파드에 접근할 수 있도록 합니다.

외부 IP 주소를 통해 서비스에 접근할 수 있으며, 로드 밸런서가 서비스의 백엔드 파드로 트래픽을 분산합니다.

 

 

4. ExternalName

 

ExternalName 서비스는 외부 도메인을 쿠버네티스 내부에서 사용할 수 있도록 합니다.

외부 도메인의 CNAME 레코드를 반환하여 서비스를 참조할 수 있습니다.

클러스터 안의 다른 네임스페이스의 리소스에 접근할 수 있게 내부 주소를 명시하는 용도로 사용되기도 합니다.

 

 

 

 

참고

Certified Kubernetes Adiminstrtor(CKA) with Practice Tests by Mumshad Mannambeth, KodeKloud Training

'K8S > 주요 개념' 카테고리의 다른 글

Imperatvie vs Declarative  (0) 2024.01.18
Pod, ReplicaSet, Deployment  (0) 2024.01.18
K8S의 6가지 Core Concept  (0) 2024.01.18