본문 바로가기

Container/Kubernetes

[K8S] Kube-API Server

kube-apiserver는 쿠버네티스 클러스터의 핵심 구성 요소로, 클러스터 상태를 관리하고 모든 클라이언트 요청을 처리하는, 즉 쿠버네티스 API를 처리하는 중앙 관리 인터페이스이다.

컨트롤 플레인(Control Plane)의 중요한 부분으로, 클러스터와의 모든 상호작용은 kube-apiserver를 통해 이루어진다.

또한 etcd data store와 유일하게 직접 상호작용하는 구성요소이다.

(보통 kubelet, scheduler 등은 API server를 사용해서 각 영역의 클러스터에서 업데이트를 수행한다.)

주요 역할

  1. 클라이언트 요청 처리:
    • 사용자, kubectl, 애플리케이션, 그리고 내부 쿠버네티스 컴포넌트가 클러스터와 통신할 때 API 요청을 보낸다.
    • 이 요청은 모두 kube-apiserver가 처리한다.
  2. 인증 및 권한 부여:
    • 요청을 보낸 사용자의 신원 인증(Authentication)을 수행한다.
    • RBAC(Role-Based Access Control)이나 기타 정책을 기반으로 요청에 대한 권한 부여(Authorization)를 처리한다.
  3. 클러스터 상태 관리:
    • 클러스터의 상태 정보를 etcd에 저장하고 조회한다.
    • 모든 클러스터 상태 데이터(예: 파드, 서비스, 디플로이먼트 정보 등)는 etcd에 저장되며, kube-apiserver가 이를 관리한다.
  4. 유효성 검사 및 요청 처리:
    • API 요청을 처리하기 전에 요청 데이터를 유효성 검사한다.
    • 요청이 올바르지 않으면 에러를 반환한다.
  5. 다른 컨트롤 플레인 컴포넌트와 통신:
    • kube-apiserver는 스케줄러, 컨트롤러 매니저, 노드 컴포넌트와 같은 다른 쿠버네티스 컴포넌트와 통신하여 클러스터의 상태를 조정한다.

 

kube-apiserver의 데이터 흐름

ex) user가 'kubectl get nodes' 명령을 치면 kube-apiserver에 먼저 접근 해서 해당 User/Request에 대해 인증을 확인하고 검증(validate)한다. 그런 다음 etcd-cluser를 통해 데이터를 회수(retrive)한 뒤 해당 정보를 보여준다. 

  1. kubectl 또는 다른 클라이언트가 요청을 보냄:
    • API 요청 수신: 사용자는 kubectl, REST 클라이언트, 또는 다른 도구를 통해 kube-apiserver에 API 요청을 보낸다.
    • 예: kubectl get pods
  2. kube-apiserver가 요청을 수신:
    • 인증 및 권한 검증: kube-apiserver는 요청이 신뢰할 수 있는 사용자로부터 왔는지 확인(인증)한다.
    • 요청이 허가된 작업인지 확인(권한 부여)한다.
    • API 요청을 인증, 권한 검증, 유효성 검증.
  3. 요청 처리: etcd와 상호작용
    • 요청이 유효하면 해당 작업(예: 파드 생성, 서비스 업데이트 등)을 수행한다.
    • 요청에 따라 클러스터의 상태 데이터를 etcd에 읽거나 기록
  4. 결과 반환:
    • 요청 성공 시 클라이언트에 상태 데이터를 반환
    • 요청 실패 시 에러 메시지를 반환
반응형

'Container > Kubernetes' 카테고리의 다른 글

[K8S] kube-proxy  (0) 2024.12.28
[K8S] Kube-controller-manager  (0) 2024.12.24
[K8S] ETCD  (1) 2024.12.24
[K8S] 컨테이너 런타임  (0) 2024.12.24
[K8S] TS - Control Plane Failure  (0) 2024.04.28