Cloud발행일 2026. 1. 5.원본 https://blog.naver.com/jword_/224135435329 ↗

[CKA] 1.2 kube-apiserver 기본

[CKA] 1.2 kube-apiserver 기본 — #개발자의도구들 #kube-apiserver #cka #쿠버네티스마스터노드 Kube-apiserver Kube-apiserver란? 쿠버네...

#Cloud#Naver Blog

#개발자의도구들 #kube-apiserver #cka #쿠버네티스마스터노드

​

Kube-apiserver

쿠버네티스의 중앙 통신탑

Kube-apiserver란?

쿠버네티스 클러스터를 하나의 거대한 항구에 비유한다면, kube-apiserver는 항구의 중앙 관제탑이라고 할 수 있습니다.

​

항구에 들어오는 모든 화물선, 나가는 모듬 배, 어떤 컨테이너가 어디로 이동해야하는지 등 이 모든 정보가 관제탑을 통해 전달됩니다. 마찬가지로 kube-apiserver는 쿠버네티스에서 일어나는 모든 요청과 명령이 거쳐가는 곳입니다.

​

javascript 코드 예제
                                    kubectl get node

kubernetes에서 사용하는 cli 명령어는 모두 kube-apiserver에 전달됩니다.

​

어떤일을 하는지?

kube-apiserver의 역할은 크게 세가지로 분류됩니다.

​

  1. 요청 인증 및 유효성 검사
  • 요청을 보낸이가 신뢰할 수 있는자인가?
  • 요청 내용이 올바른 형식인가?
  1. etcd와 소통

-

  • etcd와 직접 소통 가능한 유일한 서버
  1. 컴포넌트들의 중개

-

  • 스케쥴러, 컨트롤러 매니저, kubelet 등 다른 구성요소들이 클러스터 상태를 확인 혹은 변경 할 때 모두 kube-apiserver를 통해야한다.

​

Pod가 생성되는 과정

이미지

다음은 명령어를 통해 pod가 생성되는 과정을 추적합니다.

javascript 코드 예제
                                    # request
curl -X POST /api/v1/namespace/default/pods ... {other} // http 통신 POST 가능

# response
Pod Created!
  1. 사용자는 위 명령어로 kube-apiserver에게 pod 생성을 요청합니다.
  1. api-server는 해당 사용자가 올바른 사용자인지 검증합니다.
  1. 올바른 사용자라면 pod 오브젝트를 생성하고 etcd에 새로운 pod 정보를 기록합니다.(실제 컨테이너는 아닙니다.)
  1. scheduler는 kube-apiserver를 항상 보고 있습니다. 아직 노드에 등록되지 않는 pod를 식별하여 노드에 배치 후 kube-apiserver에게 보고합니다.

-

  • 4.1. 보고된 pod 및 node 정보는 etcd에 다시 업데이트 합니다.
  1. kube-apiserver는 해당 워커 노드의 kubelet에게 이 정보를 전달합니다.
  1. kubelet은 컨테이너 런타임(ContainerD 등)에게 이미지를 다운받고 컨테이너를 실행하라고 명령합니다.

-

  • 여기서 부터는 실제 컨테이너가 돌아갑니다.
  1. kubelet은 생성된 Pod 상태를 kube-apiserver에게 보고합니다. 이 정보를다시 etcd에 업데이트 합니다.

​

왜 모두 kube-apiserver를 거쳐야하는가?

모든 요청이 한 곳을 거치도록 구현하면 인증과 권한 절차가 일관되게 구현이 가능합니다. 또한 언제, 누가, 무엇을 했는지에 대한 정보도 확인하기 쉽습니다. 또한 etcd와 같은 중요한 데이터베이스 정보를 단일 서버에서만 접근하도록 하여 침범을 막습니다.

​

kube-apiserver 여러가지 설정들

kubeadm으로 설치한 경우

kubeadm을 사용해서 클러스터를 구성했다면, kube-apiserrver는 마스터 노드의 kube-system 네임 스페이스에 Pod 형태로 배포됩니다. 설정 파일은 아래 경로에서 일반적으로 찾을 수 있습니다.

javascript 코드 예제
                                    /etc/kubernetes/manifests/kube-apiserver.yaml

수동 설치인 경우

직접 바이너리를 다운로드해서 설치했다면, kube-apiserver는 systemd 서비스로 실행됩니다. 설정은 아래와 같은 경로에서 확인할 수 있습니다.

javascript 코드 예제
                                    /etc/systemd/system/kube-apiserver.service

주요 설정 옵션

kube-apiserver는 많은 옵션을 가지고 있습니다. 당장 모든 걸 알 필요는 없지만, 몇 가지 큰 그림만 잡아두면 좋습니다.

​

주요 설정 옵션들은 크게 아래와 같습니다.

  • 인증서 관련: 다른 컴포넌트들과 안전하게 통신하기 위한 SSL/TLS 인증서 설정이 많습니다.
  • etcd서버 연결정보: kube-apiserver가 etcd에 어떻게 접속할지 저장합니다. etcd와 주소, 포트, 인증서 등이 포함됩니다.
  • 인증/권한 설정: 어떤 방식으로 사용자를 인증하고, 권한을 줄지 정합니다.

​

정리

kube-apiserver는 쿠버네티스 클러스터의 중앙 송신탑입니다. 모든 요청을 받아서 인증하고, 유효성을 검사하고, etcd 데이터 베이스와 직접 통신하여 기록합니다.

​

스케쥴러, 컨트롤러 매니저, kubelet같은 다른 컴포넌트들은 모두 kube-apiserver를 거쳐서 클러스터 정보를 확인할 수 있습니다.