K8s Kube apiserver How does api flow work

[K8s] Kube-apiserver 工作流程 | How does api-flow work?

▌什麼是 Kube-apiserver?

kube-apiserver 是 Kubernetes 最重要的核心組件之一,它的位置在master node裡面

主要功能就是提供cluster管理,下面會用二個例跟大家來說明

Untitled.png

Core Components of K8s

  • REST API :包括認證授權數據校驗以及集群狀態變更等

  • 通信樞紐 :提供其他Components之間的資料交互和通信的樞紐

    • 樞紐指的是:其他Components,包括worker kublet, kube-proxy 與 master node等等,可以通過 API Server 查詢或修改數據

    • 這邊要注意一個重點就是,只有 API Server 才直接操作 etcd
      有沒有注意到只有kube-apiserver有畫線到etcd

      Untitled 1.png

      以Client Certificates 檢視

▌實例說明:以建立一個nginx為例

  1. APIServer: 是專門負責接收kubectl送出來的命令,
    比如:我們通過kubectl 通過APIServe r告訴它,我們要創建一個service/pod

    $kubectl apply -f ngnix-service.yml
  2. APIServer 接收到命令後,會把指令參數存在etcd裡面

    • kubelet 是管理 pod,也就是管理container創建跟刪除
    • kube-proxy 主要是用來管理網路,它會透過iptables(灰色)去創立policy
      來確保service可以向外溝通
  3. 完整的過程即是kubelet 和 kube-proxy會一直監聽etcd裡面有什麼改變, 若發現有新的指令(指上面kubectl apply),它就知道有新的service/pod 要創建,就會在相應的node上建立service/pod -

    • k8s-node1 長出pod (紫色)
    • 同時也因應網路的需求建立 iptables (灰色)

Untitled 2.png

▌實例說明2: 建一個Service

  • 當一個service建立好時,kube-poxy會一併建立routing

    Untitled 3.png

可以用kube log來看service建立了什麼
不用看完整的iptables

Untitled 4.png

service配多少的ip range 可以從ps aux 看喔

Untitled 5.png

iptables 看service + grep

Untitled 6.png