RBAC配置只读用户

木木11个月前技术文章268

一.背景

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


相关文章

EMR 配置 Hive on Spark

EMR 配置 Hive on Spark

Hive3 on spark 集成前置条件hadoop yarn环境正常oracle jdk 1.8版本1、spark2 下载准备https://archive.apache.org/dist/spa...

MySQL运维实战之ProxySQL(9.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

TEZ常见调优参数

一、设置引擎为Tez参数:参数默认值推荐值参数说明解释hive.execution.enginemr请根据具体的业务场景进行选择执行引擎选择使用tez引擎时,此值设置为tezhive.tez.log....

iotop-监控磁盘I/O

iotop-监控磁盘I/O

iotop概述iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况。iotop 监控 Linux...

ORA-00031报错处理

1、在数据库里面kill语句时会发生如下的报错:SQL> alter system kill session '4390,2679';alter system kill session '439...

flink获取taskmanager的pstree信息

flink获取taskmanager的pstree信息

使用pstree –p 进程号 的方式能够获取taskmanager的pstree信息,这个地方提供一个收集脚本。内容如下:#!/bin/bashsearchPID() {   l...

发表评论    

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