1. 程式人生 > >手把手教你在容器服務 TKE 中使用動態准入控制器

手把手教你在容器服務 TKE 中使用動態准入控制器

# 在 TKE 中使用動態准入控制器 ## 原理概述 動態准入控制器 Webhook 在訪問鑑權過程中可以更改請求物件或完全拒絕該請求,其呼叫 Webhook 服務的方式使其獨立於叢集元件,具有非常大的靈活性,可以方便的做很多自定義准入控制,下圖為動態准入控制在 API 請求呼叫鏈的位置(來源於 [Kubernetes 官網](https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/)): ![img](https://img2020.cnblogs.com/other/2041406/202102/2041406-20210204095023420-402420326.png) 從上圖可以看出,動態准入控制過程分為兩個階段:首先執行 Mutating 階段,可以對到達請求進行修改,然後執行 Validating 階段來驗證到達的請求是否被允許,兩個階段可以單獨使用也可以組合使用,本文將在 TKE 中實現一個簡單的動態准入控制呼叫示例。 ## 檢視驗證外掛 在 TKE 現有叢集版本中(1.10.5 及以上)已經預設開啟了 [validating admission webhook](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook) 和 [mutating admission webhook](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#mutatingadmissionwebhook) API,如果是更低版本的叢集,可以在 Apiserver Pod 中執行 `kube-apiserver -h | grep enable-admission-plugins` 驗證當前叢集是否開啟,輸出外掛列表中如果有 `MutatingAdmissionWebhook` 和 `ValidatingAdmissionWebhook` 就說明當前叢集開啟了動態准入的控制器外掛,如下圖所示: ![img](https://img2020.cnblogs.com/other/2041406/202102/2041406-20210204095023754-1096862104.png) ## 簽發證書 為了確保動態准入控制器呼叫的是可信任的 Webhook 服務端,必須通過 HTTPS 來呼叫 Webhook 服務(TLS認證), 所以需要為 Webhook 服務端頒發證書,並且在註冊動態准入控制 Webhook 時為 `caBundle` 欄位( `ValidatingWebhookConfiguration` 和 `MutatingAdmissionWebhook` 資源清單中的 `caBundle` 欄位)繫結受信任的頒發機構證書(CA)來核驗 Webhook 服務端的證書是否可信任, 這裡分別介紹兩種推薦的頒發證書方法: > 注意:當`ValidatingWebhookConfiguration` 和 `MutatingAdmissionWebhook` 使用 `clientConfig.service` 配置時(Webhook 服務在叢集內),為伺服器端頒發的證書域名必