RBAC配置只读用户

木木2年前技术文章854

一.背景

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


相关文章

mysql 事务隔离级别

mysql 事务隔离级别

一、事务隔离级别介绍多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。事务隔离级别      MySQL隔离级别定义了事务与事务之间的隔离程度  二...

CDH实操--Zookeeper角色迁移

CDH实操--Zookeeper角色迁移

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

kubernetes openelb

1、背景在云服务环境中的 Kubernetes 集群里,通常可以用云服务提供商提供的负载均衡服务来暴露 Service,但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘以及...

MySQL运维实战(5.4) MySQL元数据乱码

表结构Comment乱码如果DDL实际编码和character_set_client设置不一致,也会引起乱码。$ cat test_comment_utf8.sql create...

Ansible部署和使用(sshpass)

Ansible部署和使用(sshpass)

简介Ansible默认通过 SSH 协议管理机器。安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库。只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的...

CDH实操--hive表及分区检查

CDH实操--hive表及分区检查

1)DB数量select count(1) from DBS;2)各DB中的TABLE数量select TBLS.db_id, name, count(1) tab_num from TBLS jo...

发表评论    

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