RBAC配置只读用户

木木2年前技术文章758

一.背景

有时候需要给第三方业务访问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等操作,确认只读权限配置没有问题


相关文章

MinIO文件服务

MinIO文件服务

MinIO官网地址:docs.min.io/cn/一、Minio简介Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大...

CDH实操--Zookeeper角色迁移

CDH实操--Zookeeper角色迁移

Zookeeper角色迁移计划1.集群Zookeeper服务角色实例分配情况2.由于角色规划不合理,需要将cdp1.hadoop.com节点的Zookeeper实例实例迁移到cdp4.hadoop.c...

开源大数据集群部署(十七)HADOOP集群配置(二)

开源大数据集群部署(十七)HADOOP集群配置(二)

1 HADOOP集群配置配置文件workers[root@hd1.dtstack.com software]# cd /opt/hadoop/etc/hadoop [root@hd1.dtstack...

Datanode节点坏卷处理

Datanode节点坏卷处理

1、告知客户故障信息,确定是否有备用磁盘更换2、停止故障节点的所有角色服务3、卸载故障磁盘umount -vl /data64、等待硬件厂商更换好磁盘5、对新磁盘分区和格式化#1.磁盘分区 mkfs...

使用helm在k8s集群部署rancher

使用helm在k8s集群部署rancher由于我们的k8s版本是1.22,所以我们直接安装latest版本的rancher。不同版本的rancher helm仓库可以看下面链接https://docs...

企业级大数据安全架构(八)

企业级大数据安全架构(八)

前面第七章详细介绍了部署FreeIPA来做kerberos认证,这节接着介绍FreeIPA高可用部署1.FreeIPA高可用配置说明:在安装完一台ipa-server之后,在另一个备份节点部署ipa-...

发表评论    

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