반응형
Service는 Kubernetes API의 리소스 객체로, 클러스터의 모든 노드에서 실행되는 kube-proxy가 Service에 정의된 네트워크 규칙을 관리하고 적용합니다.
- Service
- Service는 Kubernetes의 리소스 오브젝트입니다.
- Service는 특정 Pod 집합(Endpoints)과 클라이언트 간의 통신 경로를 정의합니다.
- Service는 Kubernetes API 서버를 통해 생성되고 관리됩니다.
- Service 자체는 실행되거나 Pod처럼 동작하지 않으며, 로직을 수행하는 프로세스가 아닙니다.
- Service는 kube-proxy와 상호작용하며 네트워크 규칙이 적용됩니다.
- kube-proxy
- kube-proxy는 Kubernetes 클러스터의 각 노드에서 DaemonSet 형태로 실행되는 컴포넌트입니다.
- 각 노드에서 Service와 관련된 네트워크 규칙을 생성하고 관리합니다.
- iptables, IPVS, 또는 userspace 모드를 사용하여 트래픽을 Service와 연결된 Pod으로 라우팅합니다.
Service는 그렇다면 뭔가?
- 역할 차이:
- Service는 네트워크 트래픽 경로를 정의하는 "설명서"와 같은 역할입니다.
- 실제 트래픽 라우팅은 kube-proxy와 같은 실행 중인 프로세스가 수행합니다.
- 동작 방식:
- Service는 클러스터의 모든 노드에서 kube-proxy가 처리해야 하는 네트워크 규칙을 선언적으로 정의합니다.
- 이 정의를 기반으로 각 노드의 kube-proxy가 규칙을 설정하고 트래픽을 적절히 분배합니다.
Service와 kube-proxy의 연동 과정
- Service 생성:
- 사용자가 Kubernetes API를 통해 Service 객체를 생성합니다.
- Service는 Selector를 기반으로 Pod 집합(Endpoints)을 참조합니다.
- Endpoints 업데이트:
- Kubernetes 컨트롤러는 Service와 관련된 Endpoints를 지속적으로 모니터링하고 업데이트합니다.
- 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 정보를 기반으로 네트워크 규칙을 설정하여 클러스터 내외부 트래픽을 처리합니다.
반응형
'K8S' 카테고리의 다른 글
[Kubernetes] externalTrafficPolicy와 internalTrafficPolicy (0) | 2024.12.21 |
---|---|
service와 clusterIP의 관계에 대해 알아보자 (0) | 2024.12.21 |
CNI, Kube-proxy, Service 의 특징 및 통신과정 (0) | 2024.12.21 |
kube-proxy와 cni의 비교 (0) | 2024.12.21 |
[kubernetes] IPVS에 대해 알아보자! (0) | 2024.12.21 |
댓글