kubernetes 使用者體系
所有Kubernetes叢集都有兩類使用者:由Kubernetes管理的服務帳戶和普通使用者。
普通使用者由外部獨立服務管理。 管理者分發私鑰,使用者存儲如Keystone或者使用者名和密碼清單的檔案。 普通使用者不能通過API調用添加到群集中。
相反,服務帳戶是由Kubernetes API管理的使用者。 它們綁定到特定的名稱空間,并由API伺服器自動建立或通過API調用手動建立。 服務帳戶綁定到一系列存儲為秘密的憑證,這些憑證安裝在容器中,允許群集内程序與Kubernetes API對話。
kubernetes 認證政策
Kubernetes使用用戶端證書,bearer tokens,身份驗證代理或HTTP基本身份驗證來通過身份驗證插件對API請求進行身份驗證。 由于向API伺服器發出HTTP請求,插件會嘗試将以下屬性與請求關聯:
使用者名:辨別最終使用者的字元串。 常用值可能是kube-admin或[email protected]。
UID:辨別最終使用者并嘗試比使用者名更一緻和唯一的字元串。
組:一組将使用者與一組常用使用者關聯的字元串。
額外字段:包含附加資訊的字元串清單的字元串映射授權人可能會覺得有用。
X509 Client Certs
用戶端證書身份驗證通過将
--client-ca-file = SOMEFILE
選項傳遞給API伺服器來啟用。 引用的檔案必須包含一個或多個證書頒發機構,用于驗證呈現給API伺服器的用戶端證書。 如果提供并驗證用戶端證書,則使用主題的公用名稱作為請求的使用者名。 從Kubernetes 1.4開始,用戶端證書還可以使用證書的組織字段來訓示使用者的組成員身份。 要為使用者包含多個組成員身份,請在證書中包含多個組織字段。
例如
openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
//該指令行生成了jbeda-csr.pem證書,該證書是給使用者jbeda進行頒發證書,該使用者屬于兩個組織app1和app2
Static Token File
當在指令行上提供
--token-auth-file = SOMEFILE
選項時,API伺服器從檔案讀取承載令牌。 目前,令牌持續無限期,并且無需重新啟動API伺服器即可更改令牌清單。
令牌檔案是一個至少包含3列的csv檔案:令牌,使用者名,使用者uid,後跟可選組名。 請注意,如果您有多個組,則該列必須使用雙引号,例如
該認證政策隻要是放在HTTP的HEADERS裡
例如
Bootstrap Tokens
為了允許為新叢集提供簡化的引導,Kubernetes包括一個名為Bootstrap Token的動态管理的Bearer标記類型。 這些令牌作為秘密存儲在
kube-system
命名空間中,在那裡可以動态管理和建立它們。 控制器管理器包含一個TokenCleaner控制器,可在引導令牌過期時删除引導令牌。
該類令牌必須符合正規表達式
[a-z0-9]{6}.[a-z0-9]{16}
,并且由兩個部分組成
token ID 和token secret,這種方式也是放在HEADERS裡,例如
使用必要條件
- 在api-server啟動參數加
--experimental-bootstrap-token-auth
- 在Controller Manager 啟動參數添加
--controllers=*,tokencleaner
Static Password File
該認證政策啟用的方式
--basic-auth-file=SOMEFILE
,一旦啟用密碼就不能修改
是cvs檔案,組成:
password, user name, user id
使用
Authorization:Basic BASE64ENCODED(USER:PASSWORD)
Service Account Tokens
服務帳戶是使用簽名的承載令牌來驗證請求的自動啟用的驗證器。 該插件需要兩個可選标志:
--service-account-key-file
包含用于簽署持票人令牌的PEM編碼密鑰的檔案。 如果未指定,則将使用API伺服器的TLS私鑰。
--service-account-lookup
如果啟用,将從API中删除的令牌将被撤銷。
服務帳戶通常由API伺服器自動建立,并通過ServiceAccount準入控制器與叢集中運作的Pod相關聯。 承載令牌被安裝到衆所周知的位置,并允許群集内程序與API伺服器通信。 帳戶可以使用
PodSpec
的
serviceAccountName
字段與Pod進行顯式關聯。
apiVersion: apps/v1 # this apiVersion is relevant as of Kubernetes 1.9
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas:
template:
metadata:
# ...
spec:
serviceAccountName: bob-the-bot
containers:
- name: nginx
image: nginx:
可以通過
kubectl create serviceaccount (NAME)
建立serviceaccount
服務帳戶使用使用者名系統進行身份驗證:
serviceaccount:(NAMESPACE):( SERVICEACCOUNT)
,并配置設定給組系統:
serviceaccounts
和
system:serviceaccounts:(NAMESPACE)
。
end 還要更多内容,請前往Authenticating
參考
Authenticating