k8s系列教程3 - 安全管理(認證和受權)

認證的密碼學原理

認證

什麼是認證呢?算法

譬如說你的學位證,就是一種認證。網站上用的https,也是一種認證。api

網絡安全

網絡安全主要就是在某些假設成立的條件下,咱們如何進行防範的問題。瀏覽器

好比,有一個很是重要的假設:安全

兩個服務 A, B 通信,中間的網絡是不安全的。既然中間網絡是不安全的,那咱們確定不能直接把信息在 A 和 B 之間傳輸。網絡

業內是如何應對這個問題的呢?性能

對稱加密

對稱加密,就是數據發送發和接手方使用一個相同的加密祕鑰,對數據進行加密和解密。
因爲使用同一個祕鑰,那麼數據接收方如何知道發送方的加密祕鑰呢?在中間傳輸網絡不安全的前提下,咱們是沒法安全地將祕鑰發送給接收方的。網站

非對稱加密

數據發送方使用的加密祕鑰和接收方使用的解密祕鑰,不是同一個祕鑰。加密

Service B 先公開聲明一個公鑰,全部的服務均可以獲取公鑰,Service A 使用公鑰加密數據,發送給 Service B,而後 B 經過本身的私鑰解密數據。這就是非對稱加密的實現方式。spa

當徹底使用非對稱加密也會有問題,咱們考慮以下的加密方案:插件

  • 方案 1

僅使用非對稱加密,ServiceB公開聲明公鑰,ServiceA使用公鑰加密數據,發送給 ServiceB,而後ServiceB經過本身的私鑰解密數據。

但這裏有個問題,非對稱加密使用的算法很是消耗計算資源,若是每次通信都使用非對稱加密,性能損耗是沒法接受的。

  • 方案 2

第一次通信,Service A 使用公鑰加密一個祕鑰數據,發送給ServiceB, ServiceB 使用本身的私鑰,解密出祕鑰數據。

而後這個解密出來的祕鑰,用來進行對稱加密通信。

而後ServiceA 和 ServiceB 使用這個祕鑰,經過對稱加密進行通信。

上面的方案2,就是大名鼎鼎的 SSL/TLS 協議

但這個方案也有一個潛在的風險:
黑客一開始截獲 ServiceB 發往 ServiceA的公鑰,而後使用一個篡改的公鑰發給 ServiceA,這樣ServiceA 使用該公鑰加密祕鑰,這個祕鑰就被黑客截獲並解密。

那麼針對這個問題風險,是如何解決的呢?

  • 方案 3

使用 CA ,證書認證機構,全部合法的網站的證書,都保存在 CA。 當 Service A 拿到公鑰以後,先去問 CA,這個公鑰是不是合法的。在確認公鑰合法以後,再用來加密祕鑰發送。

這個就是 https 的實現機制,全部的 https 網站至關於ServiceB, 公開聲明一個公鑰,並且這個公鑰要註冊到證書認證機構。咱們的瀏覽器,至關於 ServiceA,在訪問網站時,先拿到這個公鑰,去查詢證書認證機構 CA,若是是合法的公鑰,那麼就會進行正常的加密數據傳輸,若是不是合法的公鑰,瀏覽器就會報一個網站不安全的提示。

K8s 的認證和受權

認證

k8s 有下面幾種認證方式

  1. 客戶端證書認證 (TLS 雙向認證)

k8s 有本身的 CA,kubectl 和 apiServer 互相驗證

  1. BearerToken

相對簡單,能夠理解爲一個很是複雜的密碼,預先定義在 ApiServer 中

  1. ServiceAccount

k8s 內部,運行的pod,要和 apiServer 通信,使用 這種方式。(namespance, token, ca)經過掛載的方式,掛載到pod中。

受權

  1. k8s 使用的受權方式:

RBAC (Role Based Access Control)基於角色的訪問控制,當前 k8s 採用的方式。

  1. 用戶和角色

角色Role 是定義在 namespace(命名空間) 中的,若是一個用戶有了一個角色,那就有了這個命名空間中對應的權限。

用戶 User 在 Test 命名空間中擁有一個角色,擁有這個角色對應的命名空間中就權限 Authority。

使用 RoleBinding 資源描述用戶所對應的角色

  1. 跨命名空間的權限

集羣的權限,ClusterRole, 經過 ClusterRoleBinding。

k8s 中的用戶有兩種,一中是普通用戶User,另外一種叫ServiceAccount。 User 和 ServiceAccount 是平等的關係,均可以有Role 和 ClusterRole。

准入控制

k8s中具體的權限空時,是經過准入控制來實現的,能夠理解爲獨立的過濾插件,也能夠理解爲Java中的filter.

這裏簡單介紹其中的幾個

  • AlwaysAdmit 老是容許
  • AlwaysDeny 老是拒絕
  • ServiceAccount 不是用戶的中的那個ServieAccount, 輔助 sa作自動化
  • DenyEscolatingExec 用來限制登陸到容器中執行命令
相關文章
相關標籤/搜索