본문 바로가기

About/Kubernetes

[k8s] Service - (ClusterIP, NodePort, LoadBalancer)

쿠버네티스 클러스터 안에서 실행된 Pod 대해 액세스할 때는 서비스(Service)를 정의합니다. 서비스는 쿠버네티스의 네트워크를 관리하는 것으로, 몇 가지 종류가 있습니다. 

 

Cluster IP

서비스에 의해 할당되는 IP 주소에는 Cluster IP와 External IP가 있습니다. Cluster IP는 클러스터 안의 Pod끼리 통신하기 위한 Private IP이며 External IP는 클러스터 외부에 공개하는 IP 주소입니다.

클러스터 내부에서만 접근할 수 있으며, 외부에서 접근이 불가능하므로 Port Forwarding이나 Proxy를 통해 접근해야합니다.또한 서비스 타입을 별도로 지정하지 않으면 ClusterIP가 Default로 설정됩니다.

 

CluterIP 예시

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    app: pod
  ports:
  - port: 9000
    targetPort: 8080
  type: ClusterIP

ports: 9000, targetPort는 8080이므로 9000포트로 연결이 요청되면 Pod의 8080번으로 연결된다는 의미

 

 

NodePort

 

노드포트는 모든 워커들의 특정 포트를 이용하여 접근하도록 설정하는 타입입니다. Pod가 탑재된 Node에 접근할 수 있는 포트를 외부로 노출시킵니다. 포트당 하나의 서비스를 사용하며 30000~32767 사이의 포트를 사용합니다. 노드포트 또한 클러스터 아이피가 있으며, 쿠버네티스 클러스터의 모든 노드에 똑같은 포트가 할당되게 됩니다. 

 

NodePort 예시(yaml)

apiVersion: v1
kind: Service
metadata:
  name: svc-2
spec:
  selector:
    app: pod
  ports:
  - port: 9000
    targetPort: 8080
    nodePort: 30000
  type: NodePort

 

 

Load Balancer

Nodeport 타입을 확장시켜 실질적으로 서비스를 외부에 노출할 수 있는 서비스로 Node에 트래픽을 분산시켜주는 역할을 합니다. 이 Load Balancer는 쿠버네티스에서 자동으로 생성되지 않아서 IP를 할당해주는 plugin이 설치되어 있어야합니다.

 

AWS, GCP, Azure 등의 쿠버네티스 플랫폼을 사용할 경우 외부 IP를 지원해주는 플러그인이 설치되어있어 Load Balancer 타입의 서비스를 생성할 경우 외부에서 접속할 IP를 알아서 만들어줍니다.

 

 

로드밸런서 예시(yaml)

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

 


 

참고

https://kubetm.github.io/k8s/03-beginner-basic-resource/service/

 

Service

ClusterIP, NodePort, LoadBalancer

kubetm.github.io

http://www.yes24.com/Product/Goods/78875805

 

완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes 쿠버네티스 - YES24

Azure를 사용한 쿠버네티스의 개념 파악과 실전 응용이 책은 쿠버네티스를 처음 사용하는 업무 애플리케이션 개발자 및 도커에 대한 기초 지식이 있는 분을 대상으로 컨테이너 오케스트레이션

www.yes24.com