Skip to content

Latest commit

 

History

History
78 lines (66 loc) · 2.46 KB

Understanding_API_Server.md

File metadata and controls

78 lines (66 loc) · 2.46 KB

Understanding API Server

API Server의 역할

  • Cluster의 상태를 조회 및 수정할 수 있는 Interface 제공.
  • 변경된 상태를 etcd에 저장.
  • Resource의 유효성 검사.

API Server의 동작

  • Authentication Plugin
    • 클라이언트 인증
  • Authorization Plugin
    • 클라이언트 인가
  • Admission Control Plugin
    • 리소스의 수정 및 검증
  • Resource Validation
    • 리소스의 검증

API Server가 Resource 변경을 통지하는 방법

  1. API Server는 etcd의 watch interface를 이용하여 Subscribe
  2. Client는 API Server에 관심있는 Resource에 대해 watch interface를 이용하여 Subscribe
  3. API Server에 Resource 변경 요청 발생 시 검증 후 etcd에 저장
  4. etcd에서 변경이 발생하면 해당 Resource를 모든 API Server에 Publish
  5. API Server는 watch를 요청한 클라이언트들에게 Publish
$ vi /etc/kubernetes/manifests/kube-apiserver.yaml

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  containers:
  - command:
    ...
    - --insecure-port=8080

$ systemctl restart kubelet
$ curl --http1.0 http://localhost:8080/api/v1/pods?watch=true

$ curl http://localhost:8080/api/v1/pods?watch=true
  • HTTP 1.1
$ tcpdump -nlA -i lo port 8080
05:33:24.628863 IP 127.0.0.1.44242 > 127.0.0.1.8080: Flags [P.], seq 1:101, ack 1, win 342, options [nop,nop,TS val 925974024 ecr 925974024], length 100: HTTP: GET /api/v1/pods?watch=true HTTP/1.1
E....w@[email protected].......
71>.71>.GET /api/v1/pods?watch=true HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.58.0
Accept: */*
05:33:24.629526 IP 127.0.0.1.8080 > 127.0.0.1.44242: Flags [P.], seq 1:117, ack 101, win 342, options [nop,nop,TS val 925974025 ecr 925974024], length 116: HTTP: HTTP/1.1 200 OK
E...;_@[email protected].=...V.......
71>	71>.HTTP/1.1 200 OK
Content-Type: application/json
Date: Fri, 22 Mar 2019 05:33:24 GMT
Transfer-Encoding: chunked
9cf
{"type":"ADDED","object":{ ... }}
19a2
{"type":"ADDED","object":{ ... }}
aab
{"type":"MODIFIED","object":{ ... }}
....