真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進(jìn)行k8s的認(rèn)證和授權(quán)

如何進(jìn)行k8s的認(rèn)證和授權(quán),很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都宣傳片制作等,在成都網(wǎng)站建設(shè)、成都營銷網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計經(jīng)驗(yàn)。

一、概述

Kubernetes只負(fù)責(zé)管理Service賬戶,不管理普通用戶的賬戶。Kubernetes沒有代表普通用戶帳戶的對象。 普通用戶信息無法通過API添加到集群。普通用戶由外部獨(dú)立服務(wù)管理。K8s通過authentication插件來實(shí)現(xiàn)用戶認(rèn)證。K8s本身不管理用戶,也不會提供token。

二、k8s支持的認(rèn)證類型

K8s支持X509 Client證書、token、basic auth認(rèn)證等。

X509 Client證書:
     
啟動API Server時通過--client-ca-file=SOMEFILE選項(xiàng)提供給API Server。
靜態(tài)token文件:
     
1)啟動API Server時通過--token-auth-file=SOMEFILE選項(xiàng)提供給API Server。
      token文件是csv文件,包含如下內(nèi)容:
          token,user,uid,"group1,group2,group3"
     2)通過在http header中提供token信息以完成認(rèn)證
        Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
            31ada4fd-adec-460c-809a-9e56ceb75269為具體的token值。
Bootstrap Token
   
相比于靜態(tài)token而言,此類token可動態(tài)管理。
basic auth:
     1)需要將包含password、username、uid、group等信息的csv文件通過--basic-auth-file=SOMEFILE選項(xiàng)提供給API Server,在API Server啟動時加載。
     2) 需要在http的header中填寫Authorization頭,其中包含“USER:PASSWORD”的Base64編碼后的字符串。
OpenID Connect Token:
   
采用OAuth3令牌響應(yīng)的id_token(而不是access_token)作為承載令牌。
    需要首先向身份提供商進(jìn)行身份驗(yàn)證。然后采用身份提供商給你的id_token訪問K8s。在Header中添加:Authorization: Bearer XXXXXXX
    要使用該認(rèn)證方式,需要配置API Server:
          --oidc-issuer-url  身份提供商的URL,如:https://accounts.google.com,必選
          --oidc-client-id  客戶端標(biāo)識,如:kubernetes  ,必選
          其他可選參數(shù)參見:https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens

   身份提供商需要支持OpenID Connect規(guī)范。如何進(jìn)行k8s的認(rèn)證和授權(quán)
  webhook Token認(rèn)證: 
     
集群中需要配置如下兩個參數(shù):
      --authentication-token-webhook-config-file   用于配置remote service(負(fù)責(zé)認(rèn)證)的文件
      --authentication-token-webhook-cache-ttl   用于配置身份認(rèn)證結(jié)果的緩存時間,默認(rèn)2分鐘
     webhook采用kubeconfig文件格式進(jìn)行配置,文件中clusters是指remote service,而users是指API服務(wù)器webhook,如下示例:

# Kubernetes API version
apiVersion: v1
# kind of the API object
kind: Config
# clusters refers to the remote service.
clusters:
  - name: name-of-remote-authn-service
    cluster:
      certificate-authority: /path/to/ca.pem         # CA for verifying the remote service.
      server: https://authn.example.com/authenticate # URL of remote service to query. Must use 'https'.

# users refers to the API server's webhook configuration.
users:
  - name: name-of-api-server
    user:
      client-certificate: /path/to/cert.pem # cert for the webhook plugin to use
      client-key: /path/to/key.pem          # key matching the cert

# kubeconfig files require a context. Provide one for the API server.
current-context: webhook
contexts:
- context:
    cluster: name-of-remote-authn-service
    user: name-of-api-sever
  name: webhook

       當(dāng)客戶端需要認(rèn)證攜帶的token時,authentication webhook向remote service POSTs一個 JSON格式的authentication.k8s.io/v1beta1 TokenReview對象,如下示例:

{
  "apiVersion": "authentication.k8s.io/v1beta1",
  "kind": "TokenReview",
  "spec": {
    "token": "(BEARERTOKEN)"
  }
}

  remote service需要解析上述json,并對token進(jìn)行校驗(yàn),然后通過response填寫校驗(yàn)結(jié)果,成功的response如下示例,且http code必須是2XX:

{
  "apiVersion": "authentication.k8s.io/v1beta1",
  "kind": "TokenReview",
  "status": {
    "authenticated": true,
    "user": {
      "username": "janedoe@example.com",
      "uid": "42",
      "groups": [
        "developers",
        "qa"
      ],
      "extra": {
        "extrafield1": [
          "extravalue1",
          "extravalue2"
        ]
      }
    }
  }
}

 失敗的response如下示例:

 {

  "apiVersion": "authentication.k8s.io/v1beta1",
  "kind": "TokenReview",
  "status": {
    "authenticated": false
  }
}

Authenticating Proxy:
   
API服務(wù)器可以根據(jù)header values配置來識別users ,如X-Remote-User。
    在API Service啟動時進(jìn)行相關(guān)配置,指明http的header中哪些key代表用戶名、哪些代表用戶的group等,如下示例:
     --requestheader-username-headers=X-Remote-User
     --requestheader-group-headers=X-Remote-Group
     --requestheader-extra-headers-prefix=X-Remote-Extra-
   如果發(fā)送請求如下:
GET / HTTP/1.1
X-Remote-User: fido
X-Remote-Group: dogs
X-Remote-Group: dachshunds
X-Remote-Extra-Acme.com%2Fproject: some-project
X-Remote-Extra-Scopes: openid
X-Remote-Extra-Scopes: profile
    將產(chǎn)生如下用戶信息:
name: fido
groups:
- dogs
- dachshunds
extra:
  acme.com/project:
  - some-project
  scopes:
  - openid
  - profile

   為了防止header欺騙,Authenticating Proxy需要在檢查請求header之前,向API服務(wù)器提交有效的客戶端證書,以針對指定的CA進(jìn)行驗(yàn)證。
    
   
–requestheader-client-ca-file  必選, PEM-encoded的證書包。在為用戶名檢查請求header之前,必須根據(jù)指定文件中的證書頒發(fā)機(jī)構(gòu)呈現(xiàn)和驗(yàn)證有效的客戶端證書。

 –requestheader-allowed-names 可選,(common names)通用名稱(cn)List。如果設(shè)置,則在檢查請求header用戶名之前,必須提交List中指定(common names)通用名中有效的客戶端證書。

 CA證書生成腳本:  

#!/bin/bash

mkdir -p ssl

cat << EOF > ssl/req.cnf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = dex.example.com
EOF

openssl genrsa -out ssl/ca-key.pem 2048
openssl req -x509 -new -nodes -key ssl/ca-key.pem -days 10 -out ssl/ca.pem -subj "/CN=kube-ca"

openssl genrsa -out ssl/key.pem 2048
openssl req -new -key ssl/key.pem -out ssl/csr.pem -subj "/CN=kube-ca" -config ssl/req.cnf
openssl x509 -req -in ssl/csr.pem -CA ssl/ca.pem -CAkey ssl/ca-key.pem -CAcreateserial -out ssl/cert.pem -days 10 -extensions v3_req -extfile ssl/req.cnf

三、K8s雙向認(rèn)證

k8s雙向認(rèn)證時,客戶端證書的O={group},CN={username}
webhook方式下,k8s收到客戶端證書解析group和username,與webhook插件進(jìn)行交互對用戶及權(quán)限進(jìn)行認(rèn)證
客戶端kubeconfig只需要在users下配置客戶端證書和私鑰文件:
    client-certificate
    client-key
    embed-certs=true

注:接入CISM時填寫group和username、選擇CA根證書文件,VNFM服務(wù)端自動生成客戶端證書和秘鑰文件,動態(tài)修改kubeconfig配置文件
或直接選擇客戶端證書,這種場景下需要事先確定VNFM使用的用戶名和對應(yīng)的group,先制作客戶端證書,建議采用這種方式。界面上不需要用戶填寫group和username

webhook token認(rèn)證:
    從webhook的組件獲取token
    在header中帶給k8s
    k8s和webhook通訊對token進(jìn)行認(rèn)證
    webhook返回認(rèn)證結(jié)果(用戶名、組、額外信息)
    
   
服務(wù)端開啟--authentication-token-webhook-config-file和--authentication-token-webhook-cache-ttl
# Kubernetes API version
apiVersion: v1
# kind of the API object
kind: Config
# clusters refers to the remote service.
clusters:
  - name: name-of-remote-authn-service
    cluster:
      certificate-authority: /path/to/ca.pem         # CA for verifying the remote service.
      server: https://authn.example.com/authenticate # URL of remote service to query. Must use 'https'.

# users refers to the API server's webhook configuration.
users:
  - name: name-of-api-server
    user:
      client-certificate: /path/to/cert.pem # cert for the webhook plugin to use
      client-key: /path/to/key.pem          # key matching the cert

# kubeconfig files require a context. Provide one for the API server.
current-context: webhook
contexts:
- context:
    cluster: name-of-remote-authn-service
    user: name-of-api-sever
  name: webhook

webhook授權(quán):
   
服務(wù)端開啟--authorization-webhook-config-file
# Kubernetes API version
apiVersion: v1
# kind of the API object
kind: Config
# clusters refers to the remote service.
clusters:
  - name: name-of-remote-authz-service
    cluster:
      # CA for verifying the remote service.
      certificate-authority: /path/to/ca.pem
      # URL of remote service to query. Must use 'https'. May not include parameters.
      server: https://authz.example.com/authorize

# users refers to the API Server's webhook configuration.
users:
  - name: name-of-api-server
    user:
      client-certificate: /path/to/cert.pem # cert for the webhook plugin to use
      client-key: /path/to/key.pem          # key matching the cert

# kubeconfig files require a context. Provide one for the API Server.
current-context: webhook
contexts:
- context:
    cluster: name-of-remote-authz-service
    user: name-of-api-server
  name: webhook


雙向認(rèn)證和token可以并存,如下:

user 定義用于向 kubernetes 集群進(jìn)行身份驗(yàn)證的客戶端憑據(jù)。

可用憑證有 client-certificate、client-key、token 和 username/password以及embed-certs。
username/password 和 token 是二者只能選擇一個,但 client-certificate 和 client-key 可以分別與它們組合。

可以使用 kubectl config set-credentials 添加或者修改 user 條目。

--embed-certs=true:將 ca.pem 和 admin.pem 證書內(nèi)容嵌入到生成的 kubectl.kubeconfig 文件中(不加時,寫入的是證書文件路徑);

helm方式訪問k8s時,如果要支持token,需要在kubeconfig中設(shè)置token,如果token動態(tài)獲取,則需要定時修改kubeconfig文件。


kubeconfig例子:
apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: scratch
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    password: some-password
    username: exp

其中certificate-authority、client-certificate、client-key是證書和秘鑰文件的路徑,如果使用BASE64加密后的數(shù)據(jù),則需要采用下面的代替:
certificate-authority-data, client-certificate-data, client-key-data

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


文章標(biāo)題:如何進(jìn)行k8s的認(rèn)證和授權(quán)
當(dāng)前路徑:http://weahome.cn/article/geigcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部