본문 바로가기
K8S

Service와 kube-proxy의 차이

by Rainbound-IT 2024. 12. 21.
반응형

 

Service는 Kubernetes API의 리소스 객체로, 클러스터의 모든 노드에서 실행되는 kube-proxy가 Service에 정의된 네트워크 규칙을 관리하고 적용합니다.

 

  1. Service
    • Service는 Kubernetes의 리소스 오브젝트입니다.
    • Service는 특정 Pod 집합(Endpoints)과 클라이언트 간의 통신 경로를 정의합니다.
    • Service는 Kubernetes API 서버를 통해 생성되고 관리됩니다.
    • Service 자체는 실행되거나 Pod처럼 동작하지 않으며, 로직을 수행하는 프로세스가 아닙니다.
    • Service는 kube-proxy와 상호작용하며 네트워크 규칙이 적용됩니다.
  2. kube-proxy
    • kube-proxy는 Kubernetes 클러스터의 각 노드에서 DaemonSet 형태로 실행되는 컴포넌트입니다.
    • 각 노드에서 Service와 관련된 네트워크 규칙을 생성하고 관리합니다.
    • iptables, IPVS, 또는 userspace 모드를 사용하여 트래픽을 Service와 연결된 Pod으로 라우팅합니다.

Service는 그렇다면 뭔가?

  • 역할 차이:
    • Service는 네트워크 트래픽 경로를 정의하는 "설명서"와 같은 역할입니다.
    • 실제 트래픽 라우팅은 kube-proxy와 같은 실행 중인 프로세스가 수행합니다.
  • 동작 방식:
    • Service는 클러스터의 모든 노드에서 kube-proxy가 처리해야 하는 네트워크 규칙을 선언적으로 정의합니다.
    • 이 정의를 기반으로 각 노드의 kube-proxy가 규칙을 설정하고 트래픽을 적절히 분배합니다.

Service와 kube-proxy의 연동 과정

  1. Service 생성:
    • 사용자가 Kubernetes API를 통해 Service 객체를 생성합니다.
    • Service는 Selector를 기반으로 Pod 집합(Endpoints)을 참조합니다.
  2. Endpoints 업데이트:
    • Kubernetes 컨트롤러는 Service와 관련된 Endpoints를 지속적으로 모니터링하고 업데이트합니다.
  3. kube-proxy 역할:
    • 각 노드의 kube-proxy가 API 서버로부터 Service와 Endpoints 정보를 가져옵니다.
    • kube-proxy는 iptables 또는 IPVS 규칙을 설정하여 Service와 관련된 트래픽을 처리합니다.

DaemonSet과의 차이

  • DaemonSet:
    • DaemonSet은 각 노드에서 특정 Pod을 실행하기 위한 Kubernetes 리소스 객체입니다.
    • 예: kube-proxy, node-exporter, Fluentd 등.
  • Service:
    • Service는 실행되지 않는 추상적인 객체이며, 트래픽 라우팅 규칙만 정의합니다.
    • Service는 DaemonSet처럼 각 노드에 배포되지 않습니다.

결론

  • Service는 DaemonSet이 아니며, 클러스터의 모든 노드에서 실행되지 않습니다.
  • Service는 트래픽 경로를 정의하는 Kubernetes API 리소스이고, 이를 관리하고 트래픽을 라우팅하는 역할은 각 노드의 kube-proxy가 담당합니다.
  • kube-proxy는 DaemonSet 형태로 모든 노드에서 실행되며, Service 정보를 기반으로 네트워크 규칙을 설정하여 클러스터 내외부 트래픽을 처리합니다.
반응형

댓글