天天看點

k8s安全 認證 鑒權 準入控制之一:實踐

系列文章連結

  1. k8s安全 認證 鑒權 準入控制之一:認證(Authentication)
  2. k8s安全 認證 鑒權 準入控制之二:授權(Authorization)
  3. k8s安全 認證 鑒權 準入控制之三:實踐
  4. k8s安全 認證 鑒權 準入控制之四:準入控制

實踐: 建立一個使用者隻能管理 dev 空間

  1. 在叢集的master節點主機生成使用者
    $ useradd devuser
    $ passwd devuser
               
如果在叢集的master節點通過這個使用者連接配接然後執行kubectl指令肯定是沒有權限的,需要給他生成證書,然後設定權限
  1. 設定證書生成引導檔案
    # k8s的使用者名就是從CN上擷取的。組是從O上擷取的。這個使用者或者組用于後面的角色綁定使用
    
    $ mkdir /root/cert/devuser && cd /root/cert/devuser
    
    $ vim devuser-csr.json
    
    {
    
    "CN": "devuser", # 使用者名
    
    "hosts": [], #代表連接配接的主機位址 []不輸入代表全部
    
    "key": {
    
     "algo": "rsa", #加密算法
    
     "size": 2048
    
     },
    
    "names": [
    
     {
    
     "C": "CN",
    
     "ST": "BeiJing",
    
     "L": "BeiJing",
    
      "O": "k8s", # 組名
    
      "OU": "System"
    
    } ]
    
    }
               
  2. 下載下傳證書生成工具
$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 

$ mv cfssl_linux-amd64 /usr/local/bin/cfssl

$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 

$ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

$ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 

$ mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
           
  1. 給devuser使用者生成證書

    -ca -ca-key

    是指定我們k8s的根證書和私鑰,也就是==/etc/kubernetes/pki/==目錄下的ca.crt和ca.key ``-profile`是指定我們上面設定的證書引導json檔案
最好在/etc/kubernetes/pki/執行這個生成證書的過程友善管理證書
$ cfssl gencert -ca=ca.crt -ca-key=ca.key \  -profile=kubernetes \  /root/cert/devuser/devuser-csr.json | cfssljson -bare devuser
           

​ 執行完會多出devuser.csr、devuser-key.pem、devuser.pem檔案

  1. 回到 /root/cert/devuser 設定叢集參數
# 設定叢集通路位址環境變量
$ export KUBE_APISERVER="https://192.168.181.111:6443"

# 建立k8s認證檔案 kubernetes是叢集名稱 --embed-certs=true是否認證加密 --server=指定k8s伺服器資訊 --kubeconfig=最後建立出devuser.kubeconfig 檔案

$ kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=devuser.kubeconfig

# cat一下就會看到devuser.kubeconfig檔案,裡面的叢集名字、證書、叢集位址、字段有值,其他的配置還是空,需要我們繼續配置
           
  1. 繼續 接下來設定用戶端認證參數
# devuser是用戶端認證的使用者名  --client-certificate指定生成的用戶端證書 --client-key指定用戶端私鑰 --embed-certs=true是否認證加密 再次寫入到devuser.kubeconfig檔案

$ kubectl config set-credentials devuser --client-certificate=/etc/kubernetes/pki/devuser.pem --client-key=/etc/kubernetes/pki/devuser-key.pem  --embed-certs=true --kubeconfig=devuser.kubeconfig

# 再次cat一下devuser.kubeconfig檔案,裡面有了name使用者名 和 client-certificate-data使用者用戶端證書資訊和client-key-data:用戶端私鑰資訊 還是得繼續設定
           
  1. 設定上下文參數,命名空間 要提前建立下dev命名空間
# --cluster叢集名稱 --user使用者名 --namespace 要通路的命名空間 再次寫入到 devuser.kubeconfig檔案

$ kubectl config set-context kubernetes  --cluster=kubernetes --user=devuser --namespace=dev  --kubeconfig=devuser.kubeconfig
           
  1. 進行權限下發綁定rolebinding操作,admin在k8s叢集裡面是一個什麼權限都有的clusterrole,把這個clusterrole綁定到我們建立的使用者devuser,把這個rolebinding放在dev命名空間下
$ kubectl create rolebinding devuser-admin-binding --clusterrole=admin --user=devuser --namespace=dev
           
  1. 把devuser.kubeconfig檔案考培到devuser使用者目錄檔案夾,也就是/home/devuser/檔案夾
# 考培前先在/home/devuser/檔案夾 建立.kube/檔案夾

$ mkdir /home/devuser/.kube/

# 把devuser.kubeconfig檔案考培到devuser下的.kube/檔案夾

$ cp devuser.kubeconfig /home/devuser/.kube/

# 把devuser.kubeconfig檔案分給devuser使用者 chown指令是指定檔案的擁有者

$ chown devuser:devuser /home/devuser/.kube/devuser.kubeconfig

# 然後用登入devuser 連接配接叢集的master節點,把檔案名字做一個修改 但是老是報錯“mv: 無法将"devuser.kubeconfig" 移動至"config": 權限不夠”,我還是使用root 修改的檔案名

$ cd /home/devuser/.kube

$ mv devuser.kubeconfig config
           
  1. root給devuser使用者切換上下文,讓devuser使用者讀取到config的資訊
$ cd /home/devuser/.kube

$ kubectl config use-context kubernetes --kubeconfig=config
           
  1. 測試
# 使用 devuser使用者檢視pod
$ kubectl get pod 
           

繼續閱讀