美文网首页
kubernetes中创建只读账号的kubeconfig文件

kubernetes中创建只读账号的kubeconfig文件

作者: rekca | 来源:发表于2020-12-28 11:35 被阅读0次

在很多时候,开发人员需要查看服务部署的详细信息,但不需要写权限,这时,我们就可以生成只读的kubeconfig文件

1. 下载安装cfssl工具

https://github.com/cloudflare/cfssl,cfssl采用go编写,需要在本地有go环境,然后根据github的文档就行编译即可

2. 创建证书文件

cat readonly-ca-config.json

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}

创建ca证书签名请求文件
cat readonly-csr.json

{
  "CN": "readonly",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "bj",
      "L": "bj",
      "O": "readonly-group",
      "OU": "System"
    }
  ]
}
CN:为Common Name,api-server会取cn字段作为User名称(k8s本身不维护User信息)
O:Organization,api-server从证书中取该字段作为Group名称

生成CA证书和私钥

ca.crt:master节点上/etc/kubernetes/pki文件夹下的证书(k8s的根证书RootCA)
ca.key: master节点上/etc/kubernetes/pki文件夹下的私钥(k8s的根证书的私钥)

cfssl gencert -ca=./ca.crt -ca-key=./ca.key -config=./read-ca-config.json -profile=kubernetes readonly-csr.json | cfssljson -bare readonly

回生成如下几个文件:

readonly-key.pem # 私钥
readonly.csr # 签名请求
readonly.pem # 证书

生成kubeconfig文件

readonly.conf文件中的cluster信息需要从其他文件中拷贝过来(如admin.conf,搭建k8s集群时会生成admin证书)

# 拷贝admin文件信息到readonly
cat admin.conf > readonly.conf
# 设置用户信息
kubectl config set-credentials readonly --client-certificate=readonly.pem --client-key=readonly-key.pem --embed-certs=true --kubeconfig=readonly.conf 
# 设置上下文信息
kubectl config set-context kubernetes --cluster=kubernetes --user=readonly --kubeconfig=readonly.conf
# 设置当前的上下文
kubectl config use-context kubernetes --kubeconfig=readonly.conf

在k8s集群中创建readonly-group用户组并绑定view角色

cat readonly.yaml
view clusterrole是k8s默认的集群只读的角色,也可以自己创建role或者clusterrole

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: readonly
subjects:
- kind: Group
  name: readonly-group
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

执行完apply之后,view和readonly-group的就做了角色绑定了

kubectl apply -f readonly.yaml

使用kubectl --kubeconfig=readonly.conf get pods 不报错,说明readonly文件就生成成功了

相关文章

网友评论

      本文标题:kubernetes中创建只读账号的kubeconfig文件

      本文链接:https://www.haomeiwen.com/subject/nasanktx.html