1. 程式人生 > >為K8S叢集建立只讀許可權帳號

為K8S叢集建立只讀許可權帳號

參考URL:

https://www.jianshu.com/p/a1a0d64f1245

https://mritd.me/2018/03/20/use-rbac-to-control-kubectl-permissions/

https://studygolang.com/articles/11730?fr=sidebar

 

公司的k8s叢集裡的運維使用者是為k8s的運維同事增加的。有的研發同事也需要登陸到k8s的master上,檢視一些日誌,或是瞭解一下k8s的執行資訊。這裡,我們就需要新增一個只讀許可權供研發同事操作。

要建立一個對k8s叢集資訊只讀許可權的帳戶,重點就是限制使用者執行kubectl命令的許可權。使用者執行kubectl命令時,預設是讀取使用者目錄下的~/.kube/config檔案,並將其中的認證資訊與k8s叢集的api server認證鑑權。之後,就會用提定的許可權,與k8s的叢集打交道了。

建立一個只讀許可權的帳號,分為如下三大步驟:

 

  • 使用叢集證書為指定使用者生成叢集認證資訊(我們舉例的k8s叢集使用者為xxx)。
  • 使用認證資訊,生成kube.config檔案。
  • 建立合適的cluster-role,並將此角色與前面的使用者進行clouster-role-binding操作。

 

一,使用叢集證書生成使用者認證資訊

1,  使用docker帳號登陸k8s叢集的master機器。

2,  下載https://pkg.cfssl.org/下的軟體放到機器的/tmp/目錄。(cfssl,cfssljson)

本來下載的檔案為:

cfssl_linux-amd64cfssljson_linux-amd64。最好更改為短名字(後面演示的名稱為cfssl和cfssljson),並使用chmod +x 增加執行許可權。

3,  將/etc/kubernetes/pki/目錄下的ca.crt和ca.key檔案cp到/tmp/目錄。

 

  cp /etc/kubernetes/pki/ca.crt /tmp/ca.crt

  cp /etc/kubernetes/pki/ca.key /tmp/ca.key

 

4,  在/tmp/目錄下生成ca-config.json檔案,內容如下:

 

{

  "signing": {

    "default": {

      "expiry": "87600h"

    },

    "profiles": {

      "kubernetes": {

        "usages": [

            "signing",

            "key encipherment",

            "server auth",

            "client auth"

        ],

        "expiry": "87600h"

      }

    }

  }

}

 

5,  在/tmp/目錄下生成xxx-csr.json檔案,內容如下:

 

{

  "CN": "xxx",

  "hosts": [],

  "key": {

    "algo": "rsa",

    "size": 2048

  },

  "names": [

    {

      "C": "CN",

      "ST": "ShangHai",

      "L": "ShangHai",

      "O": "k8s",

      "OU": "System"

    }

  ]

}

 

6,  執行如下命令,生成xxx.pem和xxx-key.pem檔案。

 

  ./cfssl gencert -ca=./ca.crt -ca-key=./ca.key -config=./ca-config.json \

             -profile=kubernetes xxx-csr.json | ./cfssljson -bare xxx

二,使用認證資訊,生成kube.config檔案

1,  將/etc/kubernetes/目錄下的admin.conf檔案cp到/tmp/目錄,並重命名。

 

  cp /etc/kubernetes/admin.conf ./ro-user.kubeconfig

 

2,  執行如下xxx.sh指令碼,生成最終的config檔案。

3,  將config檔案更名為config檔案。

 

  cp ro-user.kubeconfig config

 

4,  使用研發使用者登陸,並將/tmp/config檔案cp到~/.kube/目錄下。

 

  mkdir ~/.kube/

  cp /tmp/config ~/.kube/

三,使用K8s的RBAC授權

1,  建立一個cluster-role-ro.yaml檔案,生成只讀資源。

以下檔案,可以在匯出叢集管理員許可權基礎之上修改,命令為

  kubectl get clusterrole admin -o yaml >cluster-role-ro.yaml

2,  建立cluster-rolebinding-ro.yaml檔案,繫結使用者和資源。

 

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: k8s-ro-cluster

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: cro-readonly

subjects:

- kind: User

name: xxx

 apiGroup: rbac.authorization.k8s.io

 

3,  在運維使用者下,使用kubectl apply –f 命令將這兩個yaml檔案應用於叢集。

4,  使用研發使用者登陸,並進行命令測試。

比如,執行如下命令,顯示OK。

 

  kubectl --kubeconfig=/tmp/ro-user.kubeconfig get pod --all-namespaces -o wide

 

再比如,執行如下命令,顯示無許可權。

 

  kubectl apply -f xxx-dep-svc.yaml

 

  from server for: "xxx-dep-svc.yaml": deployments.extensions "xxx" is forbidden: User "xxx" cannot get deployments.extensions in the namespace "kube-system"

 

至此,K8S叢集的只讀許可權帳號建立完成。

後期改進方向:

在統一的機器上製作,然後分發。

操作指令碼化,加快工作效率。