1. 程式人生 > >Kubernetes(k8s)中文文件 Admission Controller_Kubernetes中文社群

Kubernetes(k8s)中文文件 Admission Controller_Kubernetes中文社群

譯者:Nancy

什麼是Admission Controller?

Admission Controller外掛是一段程式碼,其攔截Kubernetes API服務的請求早於物件的永續性,但是在請求的認證和授權之後。外掛程式碼位於API服務程序中,會編譯成二進位制以便此時使用。

叢集在接受一個請求之前,每一個Admission Controller外掛都會按序執行。如果這個序列中的某個外掛拒絕該請求,則整個的請求都會被立刻拒絕,返回一個錯誤給使用者。

Admission Controller外掛在某些情況下也許會改變傳進來的物件,配置系統預設值。此外,Admission Controller外掛也許會改變請求處理中的部分相關資源去做些事情,比如增量配額的使用。

為什麼使用Admission Controller?

Kubernetes中許多高階功能需要啟用Admission Controller外掛,以便更好的支援該功能。總之,沒有正確配置Admission Controller外掛的Kubernetes API服務是不完整的服務,很多使用者期望的服務是不支援的。

如何接入該外掛?

Kubernetes API 伺服器提供了一個引數,admission-control,用逗號分隔,在叢集中修改物件之前,呼叫許可控制選項的有序列表。

每個外掛的功能是什麼?

AlwaysAdmin外掛

使用外掛本身處理所有請求。

AlwaysDeny外掛

拒絕所有請求,主要用於測試。

DenyExecOnPrivileged (廢棄)外掛

如果一個Pod有一個特權Container,該外掛就會攔截所有的請求,在該Pod中執行一個命令。如果你的叢集支援特權Container,而且你想要限制終端使用者在那些Container中執行命令的許可權,我們強烈建議使用該外掛。

該功能已經合併到DenyEscalatingExec外掛『參見下文“DenyEscalatingExec外掛”』)

DenyEscalatingExec外掛

該外掛拒絕執行和附加令到允許主機訪問的且有升級特權的Pod。包含含有執行特權的Pod,有訪問主機PID Namespace的許可權。

如果你的叢集支援含有升級特權的Container,而且你想要限制終端使用者在這些Container中執行命令的能力,我們強烈建議使用該外掛。

ServiceAccount外掛

這個外掛實現了serviceAccounts的自動化。如果你打算使用Kubernetes ServiceAccount物件,我們強烈建議使用該外掛。

SecurityContextDeny外掛

SecurityContext定義了一些不適用於Container的選項,這個外掛將會拒絕任何含有該SecurityContext的Pod。

ResourceQuota外掛

該外掛會檢查傳入的請求,確保其不違反任何Namespace中ResourceQuota物件列舉的約束條件。如果你在Kubernetes開發中正在使用ResourceQuota物件,你必須使用該外掛實現配額約束條件。

強烈建議配置該外掛在Admission Controller外掛的序列中。This is so that quota is notprematurely incremented only for the request to be rejected later in admission control。(該句話翻譯有待考慮)

LimitRanger外掛

該外掛會檢查傳入的請求,確保其不違反任何Namespace中LimitRange物件列舉的約束條件。如果你在Kubernetes開發中正在使用LimitRange物件,你必須使用該外掛實現約束條件。LimitRange也經常用於Pod中預設資源請求,不會指定哪一個請求。目前,預設LimitRange,在預設的Namespace中對所有的Pod,需要0.1CPU。

NamespaceExists(廢棄)外掛

該外掛會檢查所有傳入的請求,嘗試在Kubernetes Namespace中建立資源,如果該Namespace不是當前建立的,該外掛會拒絕這個請求。我們強烈建議使用該外掛,確保資料的完整性。

Admission Controller的該功能已經併入NamespaceLifecycle外掛。

NamespaceAutoProvision (廢棄)外掛

該外掛會檢查所有傳入的請求,嘗試在Kubernetes Namespace中建立資源,如果Namespace不存在,會建立一個新的Namespace。

我們強烈建議NamespaceExists外掛優先順序高於NamespaceAutoProvision外掛。

NamespaceLifecycle外掛

如果Namespace已經終止,則不能在其中建立新的Namespace,該外掛會強制該操作。

刪除一個Namespace會終止一系列操作,移除該Namespace中所有物件(Pod,服務等等)。為了加強該過程的完整性,我們建議使用該外掛。

是否有推薦的外掛集合?

是的。

Kubernetes1.0,我們強烈建議使用如下的許可控制外掛集合(按順序排列):

–admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount

K8S中文社群微信公眾號