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