k8s之API Server認證

集群安全性

在生產環境中,必須保障集群用戶的角色以及許可權問題,不能給所有用戶都賦予管理員許可權。

1、集群的安全性必須考慮如下幾個目標

(1)保證容器與其所在宿主機的隔離

(2)限制容器給基礎設置或其他容器帶來的干擾

(3)最小許可權原則:合理限制所有組件的許可權,確保組件只執行它被授權的行為,通過限制單個組件的能力來限制它的許可權範圍

(4)明確組件間邊界的劃分

(5)劃分普通用戶和管理員的角色

(6)在必要時允許將管理員許可權賦給普通用戶

(7)允許擁有Secret(Keys、Certs、Passwords)數據的應用在集群中運行

API Server認證管理

k8s集群提供了三種級別的客戶端身份認證方式:

1、HTTPS證書認證

基於CA根證書籤名的的雙向數字認證方式,CA機構是第三方證書權威機構,認證步驟如下圖:

 

1、伺服器端向CA機構申請證書,CA機構下髮根證書、服務端證書、私鑰給申請者

2、客戶端向CA機構申請證書,CA機構下髮根證書、客戶端證書、私鑰給申請者

3、客戶端向服務端發起請求,服務端下發服務端證書給客戶端,客戶端通過私鑰進行解密,並利用服務端證書中的公鑰認證證書資訊比較證書中的資訊,如果一致,則客戶端認可服務端身份

4、客戶端向服務端發送證書,服務端使用私鑰進行解密,獲得客戶端證書公鑰,並用公鑰認證證書資訊,確認客戶端是否合法

5、兩端協商好加密方案後,客戶端產生一個隨機密鑰,通過協商好的方案加密該密鑰,並發送該密鑰給服務端,服務端收到密鑰後,雙方使用這個隨機密鑰進行資訊傳輸。

2、HTTP Token認證

通過一個Token來識別合法用戶,就像HTTP請求的Cookie一樣,只不過Cookie是瀏覽器端,Token是服務端。

 

用一個很長的特殊編碼方式並且難以被模仿的字元串–Token,Token對應用戶資訊,存儲在API Server中能訪問的一個文件夾中,客戶端只需在請求時的HTTP Header中放入Token,API Server就可以識別用戶資訊。

3、HTTP Base認證

通過用戶名加密碼的方式認證,把(用戶名+冒號+密碼)用Base64編碼後放到HTTP Request中的Header Authorization域中發給服務端,服務端收到後進行解密,獲取用戶名和密碼,然後進行用戶授權驗證

API Server授權管理

當API Server被調用時,需要先進行用戶認證,然後通過授權策略執行用戶授權。

API Server支援以下幾種授權策略(通過API Server啟動參數–authorization-mode設置)

 

(1)AlwaysDeny:拒絕所有請求

(2)AlwaysAllow:允許接收所有請求

(3)ABAC(Attributed-Based Access Control):基於屬性的訪問控制,表示使用用戶配置的授權規則對用戶請求進行匹配和控制

(4)Webhook:通過調用外部REST服務對用戶進行授權

(5)RBAC:Role-Based Access Control,基於角色的訪問控制

(6)Node:一種專用模式,用於對kubelet發起的請求進行訪問控制

API Server在接收到請求後,會根據請求中的數據生成一個訪問策略對象,如果請求中不帶某些屬性,則會為這些屬性根據類型設置默認值,然後將這個訪問策略對象和授權策略文件中的所有訪問策略對象逐條匹配,如果至少一個匹配上,則請求被鑒權通過,否則終止調用流程。

===============================

我是Liusy,一個喜歡健身的程式設計師。

歡迎關注微信公眾號【上古偽神】,一起交流Java技術及健身,獲取更多乾貨,領取Java進階乾貨,領取最新大廠面試資料,一起成為Java大神。

來都來了,關注一波再溜唄。