容器編排之Kubernetes認證與授權
在kubernetes中,認證與授權是兩個不同的過程。可以這麼理解,認證是API請求層的過濾器,授權是資源訪問的攔路虎。這兩個過程是非關聯的,你可以放任所有的API請求通過,也可以禁止訪問任何資源,二者並不衝突。通俗的講,認證就是驗證用戶名密碼,授權就是檢查該用戶是否擁有許可權訪問請求的資源,僅此而已。
我們知道,kubernetes集群的所有操作基本上都是通過kube-apiserver這個組件進行的,它提供HTTP RESTful形式的API供集群內外客戶端調用。需要注意的是:認證授權過程只存在HTTPS形式的API中。也就是說,如果客戶端使用HTTP連接到kube-apiserver,那麼是不會進行認證授權的。所以說,可以這麼設置,在集群內部組件間通信使用HTTP,集群外部就使用HTTPS,這樣既增加了安全性,也不至於太複雜。
kubernetes提供了很多認證方法和授權策略,這裡我們只能簡單的介紹所有的方法策略的內容和使用場景,大家需要根據自己特定的業務需求自由選擇合適的方法策略。
認證
kubernetes1.6版本現在支持以下這些認證方法:
- 客戶端證書:這種方式也叫作TLS雙向認證,也就是伺服器客戶端互相驗證證書的正確性,在都正確的情況下協調通信加密方案
- 靜態Token文件:用token唯一標識請求者,只要apiserver存在該token,則認為認證通過,但是如果需要新增Token,則需要重啟kube-apiserver組件,實際使用不可取
- Bootstrap Tokens:這是1.6版本提供的新的解決方案,還處於alpha版本。對於它還不是很了解,暫時略過不談
- 靜態Password文件:類似靜態Token文件,是使用用戶名密碼方式標識請求者,新增也需要重啟kube-apiserver組件,不可取
- Service Account Tokens:主要用於運行在集群里的pod與apiserver通信時進行認證,基本是由集群自動創建管理的,我還未在實際使用中用到該特性,不好講明白,等我運用到了再詳細解釋
- OpenID認證:這種認證方式其實與現在的第三方登陸方式並無二致,參考OAuth2.0原理即可
- Webhook Token:提供調用第三方認證方法的介面,只要該介面滿足kubernetes定義好的輸入輸出,即可用於請求認證,適用於已有認證方案的團隊
- Keystone Password:keystone是openstack里用於身份認證的組件,kubernetes現在簡單的實現了基於用戶名密碼的認證方式,可能離實際使用還是有一段距離
- 匿名請求:當允許匿名請求的時候,沒有被其他認證方法拒絕的請求都會被認為是匿名請求,同時擁有用戶名system:anonymous,和組system:unauthenticated
- 自定義方法:當你覺得上面所有的方法都不夠用,或者說不適用於你自身的業務需求的時候,你可以自定義認證方法
以上就是kubernetes提供的認證方法,可以配合使用,使API請求更加安全。
授權
授權主要是用於對集群資源的訪問控制,通過檢查請求包含的相關屬性值,與相對應的訪問策略相比較,API請求必須滿足某些策略才能被處理。現在集群支持的授權策略有:
- AlwaysDeny:阻止所有請求,僅用於測試
- AlwaysAllow:允許所有請求,當你不需要授權控制的時候使用
- ABAC:基於屬性的訪問控制,在apiserver本地的某一個文件里寫入策略規則,如果滿足其中一條,就算授權通過。現階段如果想新增規則,那麼必須重啟apiserver,在生產環境中使用幾率較小,但未來可能會使用API動態管理
- RBAC:基於角色的訪問控制,這是1.6版本主推的授權策略,可以使用API自定義角色和集群角色,並將角色和特定的用戶,用戶組,Service Account關聯起來,可以用來實現多租戶隔離功能(基於namespace資源)
- Webhook:使用第三方授權組件,對於已有訪問控制組件可以使用該方法使kubernetes與原組件無縫銜接。沒有的話就不要用了。
註:雖然可以同時提供多個授權策略,但結果是合併的。
寫在最後
這篇文章簡單介紹了kubernetes的認證與授權,在生產環境中推薦使用客戶端證書加Bootstrap Tokens方式進行認證處理,Service Account Token是特殊的一類,如果想在pod里訪問apiserver,則必須使用。而對於授權,RBAC是最好的選擇,當然可以選擇使用AlwaysAllow禁用授權控制。
而且我沒有介紹每種方法策略的使用方法,因為我覺得最好的老師是官方文檔,大家可以自行去查閱。自己理解的才最深刻!
參考資料:
- Authenticating
- Authorization
推薦閱讀:
※容器編排Kubernetes之Heapster源碼解讀
※[資料分享]kubernetes實踐指南
※PPT收藏|KubeCon北美峰會幹貨直播培訓課
※梁勝關於容器的年終總結,沒再提Docker
※Kubernetes Handbook v1.0發布附pdf下載地址- jimmysong.io
TAG:Kubernetes | Docker | 容器云 |