为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)

扫描二维码关注公众号,回复: 4042032 查看本文章

本来下载的文件为: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集群的只读权限帐号建立完成。

后期改进方向:

在统一的机器上制作,然后分发。

操作脚本化,加快工作效率。

 

 

猜你喜欢

转载自www.cnblogs.com/aguncn/p/9947373.html
今日推荐