天天看點

kubernetes Authenticating(認證)

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裡,例如

使用必要條件

  1. 在api-server啟動參數加

    --experimental-bootstrap-token-auth

  2. 在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