Developers Haven

(DH)블로그는 개발자들이 기술 정보를 찾아볼 수 있는 안식처가 되고 싶음을 희망하여 시작하게 되었습니다. 공부한 내용과 성장 과정을 기록해두었으니 편히 둘러보시길 바랍니다.

Welcome to DH's Blog

[기술공부]/Kubernetes

[k8s] 쿠버네티스 오브젝트 - service(서비스)에 대하여

DH’s Blog 2024. 4. 13. 21:38
반응형

 

pod는 클러스터 내부에서만 접근이 가능하기 때문에 클러스터 외부에서 pod에 요청이 불가능하다. 또한, pod는 일회성으로 뜨고 지면서 IP가 계속 바뀌게 되고 클러스터 내/외부와의 통신을 유지하는 것이 불가능하다. 그래서 Service를 통해 클러스터 내부에서 고정 IP를 갖게 해서, pod 그룹에 대한 단일 진입점으로 외부와 통신할 수 있게 만들어준다.

 

쉽게 생각하면 Service는 클러스터 외부에서 트래픽이 들어오면 해당 Service와 연결된 pod에게 트래픽을 전달해주는 역할을 하는 것이다.

 

 

Service에는 4가지 유형이 있으며 일반적으로는 아래와 같은 구성으로 이루어진다.

 

Service의 일반적인 구성 (예시)

 

Service
특징
ClusterIP
  • 클러스터 내부에서 pod들이 다른 리소스들과 통신할 수 있는 클러스터 전용 IP
  • 클러스터 내부 통신만 가능하며 외부 트래픽은 받을 수 없다
NodePort
  • 노드(host)에 노출되어 클러스터 내외부 통신이 모두 가능한 서비스
  • 외부에서 <노드IP>:<노드Port>로 서비스 접근 가능
LoadBalancer
  • NodePort 방식은 외부 사용자에게 워커 노드의 정보가 노출되어야 하는 불편함이 존재
  • 1개의 노드 IP만을 외부로 노출하여 해당 IP로 모든 트래픽을 부하 분산 가능
ExternalName
  • 클러스터 내부에서 외부의 특정 주소로 접근할 때 사용

 

 

1. ClusterIP

  • 클러스터 내부에서만 접근할 수 있는 서비스 생성
  • label이 동일한 pod 그룹의 단일 진입점인 Virtual IP를 생성
  • 작업 요청이 서비스의 ClusterIP 주소로 전달되면, 해당 서비스는 pod 중 하나로 요청을 전달하여 처리(for 작업 부하 분산)

 

 

ClusterIP 서비스는 클러스터 내부에서만 접근이 가능하기 때문에, 클러스터 외부로 서비스를 노출 시키기 위해서 NodePort, LoadBalancer를 사용한다.

 

 

2. NodePort 

  • (ClusterIP 위에)클러스터 모든 노드에서 지정된 포트를 열어 서비스에 접근 가능
  • 쉽게 생각하면 ClusterIP가 생성되고, 워커 노드의 Port를 사용하여 접속하는 방식
  • 외부에서 <NodeIP>:<Port>로 들어오는 요청을 감지하여, 서비스는 자신과 연결된 pod에 트래픽 전달

 

 

3. LoadBalancer

  • 클러스터 외부에서 로드 밸런서를 사용하여 서비스 노출
  • 로드 밸런서는 네트워크 트래픽을 분산하여 전달
 
 
 

4. ExternalName 

  • 서비스를 DNS 이름에 매핑하여 서비스 노출
  • 클러스터 안에서 도메인을 등록하여 사용하는 방식

 

 

 


 

 

처음 서비스에 대한 개념을 접했을 때는, 알듯말듯 이해가 조금 어려운 부분이 있다. 쿠버네티스 오브젝트 중 특히 서비스의 경우, 단순 개념에 대해서만 찾아보는 것보다 직접 실습해보는 것이 이해가 훨씬 더 쉬울 것이다. 그래서 다음 시간에는 실제 쿠버네티스 안에서 서비스를 적용해보는 부분을 진행해보려고 한다.

 

 

반응형