# K8s Admission Controllers ## 什麼是 Admission * Admission 是 Kubernets 中的一個術語,指的是 Kubernets API Server 資源請求過程中的一個階段。如下圖所示,當 API Server 接收到資源建立請求時,首先會對請求進行認證和鑑權,然後經過 Admission 處理,最後再儲存到 etcd。 * 如果任一階段中的任何控制器拒絕該請求,則整個請求將立即被拒絕,並向最終使用者傳回錯誤。  * Admission 中有兩個重要的階段,Mutation 和 Validation,這兩個階段中執行的邏輯如下 - Mutation 英文「突變」的意思,從字面上可以知道在 Mutation 階段可以對請求內容進行修改。 - Validation 階段不允許修改請求內容,但可以根據請求的內容判斷是否繼續執行該請求或拒絕該請求。 * Object Schema Validation 是一種用於檢查資料結構(或物件)是否符合預定義模式的過程。這在多種情境中都很重要,例如 API 請求和回應、pod yaml 格式是否有錯等。 ## Admission webhook * 透過 Admission webhook,可以加入 Mutation 和 Validation 兩種類型的 webhook 插件,這些插件和 Kubernets 提供的預先編譯的 Admission 插件具有相同的能力。可以想到的用途包括 - 修改資源。例如 Istio 就是透過 Sidecar Injector Webhook 在 Pod 資源中增加了 Envoy sidecar 容器。 - 自訂校驗邏輯,例如對資源名稱有一些特殊要求。或對自訂資源的合規性進行校驗。 ## 檢視 Admin webhook * 確認 kube-apiserver 的 Admin webhook 功能已啟用 ``` $ kubectl api-versions | grep admissionregistration admissionregistration.k8s.io/v1 ``` ## 檢視所有 webhook ``` $ kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io $ kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io ``` ## 參考 https://www.zhaohuabing.com/2018/05/23/istio-auto-injection-with-webhook/ https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up