RBAC配置只读用户

木木2年前技术文章909

一.背景

有时候需要给第三方业务访问k8s集群,但是rancher无法实现提取容器内文件的功能。此时需要给第三方直接访问k8s集群的能力,并且进行一定的权限限制

二.操作前了解相关配置和要求

熟悉linux权限管理

熟悉k8s的RBAC权限管理

熟悉kube config文件相关信息

三.操作步骤

为集群创建一个用户

为用户创建一个私钥

openssl genrsa -out mumu-readonly.key 2048

接着用此私钥创建一个csr(证书签名请求)文件,其中我们需要在subject里带上用户信息(CN为用户名,O为用户组)

openssl req -new -key mumu-readonly.key -out mumu-readonly.csr -subj "/CN=mumu-readonly/O=readonly"

找到K8S集群(API Server)的CA证书文件,其位置取决于安装集群的方式,通常会在/etc/kubernetes/pki/路径下,会有两个文件,一个是CA证书(ca.crt),一个是CA私钥(ca.key)

通过集群的CA证书和之前创建的csr文件,来为用户颁发证书

openssl x509 -req -in mumu-readonly.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out mumu-readonly.crt -days 365

最后将证书(mumu-readonly.crt)和私钥(mumu-readonly.key)保存起来,这两个文件将被用来验证API请求

创建kubeconfig

使用脚本创建kubeconfig文件

KUBE_API_SERVER="https://172.16.0.100:6443"

kubectl config set-cluster kubernetes --server=${KUBE_API_SERVER} \
    --certificate-authority=/etc/kubernetes/pki/ca.crt \ # 集群ca文件
    --embed-certs=true \
    --kubeconfig=readonly.kubeconfig

kubectl config set-credentials mumu-readonly \  # mumu-readonly(名称) 前后要统一
    --certificate-authority=/etc/kubernetes/pki/ca.crt \ # 集群ca文件
    --embed-certs=true \
    --client-key=mumu-readonly.key \ # 上文中生成的key文件
    --client-certificate=mumu-readonly.crt \ # 上文中生成的crt文件
    --kubeconfig=readonly.kubeconfig

kubectl config set-context mumu-readonly --cluster=kubernetes \ # mumu-readonly (名称)
    --user=mumu-readonly \
    --kubeconfig=readonly.kubeconfig

kubectl config use-context mumu-readonly --kubeconfig=readonly.kubeconfig

此时会生成一个readonly.kubeconfig文件

基于RBAC建立只读ClusterRole文件

我们可以通过修改该文件的内容来控制具体的权限信息

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-readonly
rules:
  - apiGroups:
      - ''
    resources:
      - pods
      - pods/attach
      - pods/exec
      - pods/portforward
      - pods/proxy
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ''
    resources:
      - configmaps
      - endpoints
      - persistentvolumeclaims
      - replicationcontrollers
      - replicationcontrollers/scale
      - secrets
      - serviceaccounts
      - services
      - services/proxy
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ''
    resources:
      - bindings
      - events
      - limitranges
      - namespaces/status
      - pods/log
      - pods/status
      - replicationcontrollers/status
      - resourcequotas
      - resourcequotas/status
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ''
    resources:
      - namespaces
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - apps
    resources:
      - deployments
      - deployments/rollback
      - deployments/scale
      - statefulsets
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - autoscaling
    resources:
      - horizontalpodautoscalers
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - batch
    resources:
      - cronjobs
      - jobs
      - scheduledjobs
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
    resources:
      - daemonsets
      - deployments
      - ingresses
      - replicasets
    verbs:
      - get
      - list
      - watch

创建clusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: cluster-readonly
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-readonly # 需要绑定的clusterRole的名字
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User # 授权类型
  name: mumu-readonly # 用户名称

到这里就基本完成了,可以使用上面生成的kubeconfig文件给到其他用户来使用。

四.注意事项

可以根据需求调整授权的权限

五.结果检查

测试是否可以删除pod等操作,确认只读权限配置没有问题


相关文章

CDH实操--客户端安装

CDH实操--客户端安装

CDH客户端安装概述安装CDH客户端,主要是方便在CDH部署节点以外,通过客户端的方式连接CDH上的hdfs,hive和hbase服务1、安装jdk(适配CDH即可,一般1.8)2、获取安装包 3、部...

可持续集成工具

可持续集成工具

持续集成中常用的 Jenkins 替代方案。1BuildMaster项目地址:https://inedo.com/buildmasterInedo 的 BuildMaster 是 Jenkins 替代...

MySQL用户权限

MySQL用户权限

1 MySQL 的权限概述mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.29 。mysql权限表的验...

EM部署HBASE

EM部署HBASE

先获取HBASE包,放在em节点中,在HBASE包所在的服务器上执行,127.0.0.1指向的是em服务器的ip。# {package_name}表示为具体的tar包名称 curl http://1...

git常用命令

git status/git status -s查看状态[root@zutuanxue git_data]# git status位于分支 master尚无提交无文件要提交(创建/拷贝文件并使用 "g...

image.png

kvm相关命令

一、管理kvm虚拟机1、创建虚拟机virt-install --name=centos1 –ram 1024 --vcpus=1 –disk path=/root/centos1.img,size...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。