Kubernetes-Components
1 Kubernetes Components

Cluster
- 노드의 집합으로 Master Node와 Worker Node로 구성되어 있다
Master Node
- 다른 노드를 관리한다.
- Control Plane Components가 실행되는 곳
Worker Node
- 컨테이너화된 애플리케이션을 실행한다.
2 Control Plane Components
전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 관장
- Control Plane Components에는 API Server, Scheduler, Controller Manager, etcd가 있다.
- Control Plane Components는 클러스터를 관리하는 기능을 제공한다
- Control Plane Components는 단일 마스터 노드에서 실행되거나 여러 노드로 분할되고 복제돼 고가용성이 보장된다
- 마스터 노드에서는 클러스터의 상태를 유지하고 제어하지만 애플리케이션을 직접 실행하는 것은 아니다.
2.1 API Server
- API Server는 Control Plane Component이다.
- API Server는 control plane의 프론트엔드라고 할 수 있다.
- Worker Node의 kubelet과 커뮤니케이션 한다.
- 오직 API Server만이 etcd와 직접적인 커뮤니케이션이 가능하다.
- kubectl 요청이 API Server에 전달된다
- 쿠버네티스 시스템 구성 요소는 오직 API 서버하고만 통신한다.
- 서로 직접 통신하지 않는다.
- 다른 구성 요소는 etcd와 직접 통신하지 않고 API 서버를 통해 클러스터 상태를 변경한다.
2.1.1 API Server의 기능
- API Server는 쿠버네티스의 모든 구성 요소와 kubectl 같은 클라이언트에서 사용하는 중심 구성 요소다.
- API Server는 클러스터 상태를 조회하고 변경하기 위해RESTful API로 CRUD 인터페이스를 제공한다.
- 상태는 etcd 안에 저장한다.
- 오브젝트를 etcd에 저장하는 일관된 방법은 제공하는 것 외에 오브젝트 유효성 검사를 하기 때문에 잘못 설정된 오브젝트를 저장할 수 없다.
kubectl
- 예를 들어 JSON 파일에서 리소스를 생성할 때 kubectl은 파일 내용을 API Server에 HTTP POST 요청으로 전달한다.
2.1.2 요청 처리 과정
-
인증 플러그인으로 클라이언트 인증
-
요청을 보낸 클라이언트를 인증하며 하나 이상으로 구성된 인증 플러그인에 의해 수행된다.
-
HTTP 요청을 검사해 수행하는데 인증 방법에 따라 클라이언트 인증서 HTTP 헤더에서 사용자를 가져온다.
-
인증 플러그인은 다음 방법을 사용해 클라이언트의 아이덴티티를 얻는다.
- 클라이언트의 인증서
- HTTP 헤더로 전달된 인증 토큰
- 기본 HTTP 인증
- HTTP 헤더로 전달된 인증 토큰과 기본 HTTP 인증 추천하지 않는 방식
- 1.19 버전부터 Deprecated 됨
- 스태틱한 페스워드 파일 또는 토큰 파일을 kube-api 서버 설정에 지정하면 된다.
비밀번호,유저이름,유저ID엔트리를 갖는user-details.csv파일을 만들어 kube-apiserver 설정에--basic-auth-file=user-details.csv를 등록한다.
-
인증 플러그인은 인증된 사용자의 이름과 그룹을 반환하며 이를 인가 플러그인이 사용한다.
-
-
인가 플러그인으로 클라이언트 인가
- 하나 이상의 인가 플러그인에 의해 인가가 수행된다.
- 인증된 사용자가 요청한 작업이 요청한 리소스 대상으로 수행할 수 있는지를 판별
- 예를 들어 사용자가 요청한 네임스페이스에 파드를 생성할 수 있는지 권한을 판별한다.
-
어드미션 컨트롤 플러그인으로 요청된 리소스 확인과 수정
-
리소스를 생성, 수정, 삭제하려는 요청인 경우 어드미션 컨트롤로 보내진다.
-
데이터를 읽는 요청의 경우 어드미션 컨트롤을 거치지 않는다.
-
어드미션 컨트롤 플러그인은 리소스 정의에서 누락된 필드를 기본값으로 초기화하거나 재정의하는 역할을 한다.
-
-
리소스 유효성 확인 및 영구 저장
- 오브젝트의 유효성을 검증하고 etcd에 저장한다.
-
클라이언트에 응답 반환
2.1.3 API Server가 리소스 변경을 클라이언트에 통보하는 방법
- API Server는 앞서 알아본 요청 처리 과정 외에 다른 것을 아무것도 하지 않는다.
- 예를 들어 레플리카셋을 만들 때 파드를 만들거나 서비스의 엔드포인트를 관리하지 않는다.
- 이것은 컨트롤러 매니저의 역할이다
- 또한 API Server가 이러한 컨트롤러에 무엇을 해야하는지 알려주지 않는다.
- 단지 컨트롤러와 다른 구성 요소가 배포된 리소스의 변경 사항을 관찰할 수 있도록 하면 된다.
- 컨트롤 플레인 요소는 리소스가 생성, 수정, 삭제될 때 통보를 받을 수 있도록 API Server에 요청할 수 있다.
- 이렇게 해서 구성 요소가 클러스터 메타데이터 변경에 대응에 각자의 작업을 수행할 수 있다.