容器編排之Kubernetes認證與授權

前一篇文章詳細介紹了怎麼安裝Kubernetes集群,本篇文章主要介紹如何使用kubernetes進行認證與授權。

在kubernetes中,認證與授權是兩個不同的過程。可以這麼理解,認證是API請求層的過濾器,授權是資源訪問的攔路虎。這兩個過程是非關聯的,你可以放任所有的API請求通過,也可以禁止訪問任何資源,二者並不衝突。通俗的講,認證就是驗證用戶名密碼,授權就是檢查該用戶是否擁有許可權訪問請求的資源,僅此而已。

我們知道,kubernetes集群的所有操作基本上都是通過kube-apiserver這個組件進行的,它提供HTTP RESTful形式的API供集群內外客戶端調用。需要注意的是:認證授權過程只存在HTTPS形式的API中。也就是說,如果客戶端使用HTTP連接到kube-apiserver,那麼是不會進行認證授權的。所以說,可以這麼設置,在集群內部組件間通信使用HTTP,集群外部就使用HTTPS,這樣既增加了安全性,也不至於太複雜。

kubernetes提供了很多認證方法和授權策略,這裡我們只能簡單的介紹所有的方法策略的內容和使用場景,大家需要根據自己特定的業務需求自由選擇合適的方法策略。

認證

kubernetes1.6版本現在支持以下這些認證方法:

  1. 客戶端證書:這種方式也叫作TLS雙向認證,也就是伺服器客戶端互相驗證證書的正確性,在都正確的情況下協調通信加密方案
  2. 靜態Token文件:用token唯一標識請求者,只要apiserver存在該token,則認為認證通過,但是如果需要新增Token,則需要重啟kube-apiserver組件,實際使用不可取
  3. Bootstrap Tokens:這是1.6版本提供的新的解決方案,還處於alpha版本。對於它還不是很了解,暫時略過不談

  4. 靜態Password文件:類似靜態Token文件,是使用用戶名密碼方式標識請求者,新增也需要重啟kube-apiserver組件,不可取
  5. Service Account Tokens:主要用於運行在集群里的pod與apiserver通信時進行認證,基本是由集群自動創建管理的,我還未在實際使用中用到該特性,不好講明白,等我運用到了再詳細解釋

  6. OpenID認證:這種認證方式其實與現在的第三方登陸方式並無二致,參考OAuth2.0原理即可
  7. Webhook Token:提供調用第三方認證方法的介面,只要該介面滿足kubernetes定義好的輸入輸出,即可用於請求認證,適用於已有認證方案的團隊
  8. Keystone Password:keystone是openstack里用於身份認證的組件,kubernetes現在簡單的實現了基於用戶名密碼的認證方式,可能離實際使用還是有一段距離
  9. 匿名請求:當允許匿名請求的時候,沒有被其他認證方法拒絕的請求都會被認為是匿名請求,同時擁有用戶名system:anonymous,和組system:unauthenticated
  10. 自定義方法:當你覺得上面所有的方法都不夠用,或者說不適用於你自身的業務需求的時候,你可以自定義認證方法

以上就是kubernetes提供的認證方法,可以配合使用,使API請求更加安全。

授權

授權主要是用於對集群資源的訪問控制,通過檢查請求包含的相關屬性值,與相對應的訪問策略相比較,API請求必須滿足某些策略才能被處理。現在集群支持的授權策略有:

  1. AlwaysDeny:阻止所有請求,僅用於測試

  2. AlwaysAllow:允許所有請求,當你不需要授權控制的時候使用

  3. ABAC:基於屬性的訪問控制,在apiserver本地的某一個文件里寫入策略規則,如果滿足其中一條,就算授權通過。現階段如果想新增規則,那麼必須重啟apiserver,在生產環境中使用幾率較小,但未來可能會使用API動態管理

  4. RBAC:基於角色的訪問控制,這是1.6版本主推的授權策略,可以使用API自定義角色和集群角色,並將角色和特定的用戶,用戶組,Service Account關聯起來,可以用來實現多租戶隔離功能(基於namespace資源)
  5. 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 | 容器云 |