需求:我们知道搭完k8s集群会创建一个默认的管理员kubernetes-admin用户该用户拥有所以权限,有一天开发或测试的同学需要登录到k8s集群了解业务pod的状态等,我们不可能提供管理员的账户给他不安全如果他因为某个高管。。。删库跑路啥办??,所以建一个只读账户迫在眉睫。

kubectl conifg命令常见操作:

  • kubectl config view:打印kubeconfig⽂件内容。
  • kubectl config set-cluster:设置kubeconfig的clusters配置段。
  • kubectl config set-credentials:设置kubeconfig的users配置段。
  • kubectl config set-context:设置kubeconfig的contexts配置段。
  • kubectl config use-context:设置kubeconfig的current-context配置段。
# kubectl config view 

一、我是用kubeadm部署的集群,给只读账户jackhe创建私钥及证书文件,并保存在/etc/kubernetes/pki目录下。

1)生成私钥文件。

cd /etc/kubernetes/pki/
umask 077;openssl genrsa -out jackhe.key 2048

2)创建证书部署请求,关键点其中-subj选项中的CN的值将被kubeconfig最为用户名使用。

openssl req -new -key jackhe.key -out jackhe.csr -subj "/CN=jackhe"

3)用kubernetes集群生成的CA签署证书,设置有限时间3650天。

openssl x509 -req -in jackhe.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out jackhe.crt -days 3650

4)验证证书信息。

openssl x509 -in jackhe.crt  -text -noout

二、创建一个新的集群信息,因为最终我们是提供config给使用者,默认的config文件有管理员信息当我们执行:kubectl config use-context kubernetes-admin@kubernetes就拥有了管理权限,这是不被允许的。

kubectl config set-cluster mycluster --kubeconfig=/tmp/config --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --server="https://192.168.10.129:6443"

选项:

--kubeconfig="":配置文件存放路径
--certificate-authority="": 设置kuebconfig配置文件中集群选项中的certificate-authority路径。
--embed-certs=false: 设置kuebconfig配置文件中集群选项中的embed-certs开关。
--server="": 设置kuebconfig配置文件中集群选项中的server。

三、配置客户端证书及密钥,⽤户名信息会通过命令从证书Subject的CN值中⾃动提取,例如前⾯创建csr时使⽤的“CN=jackhe”.

kubectl config set-credentials jackhe --embed-certs=true --client-certificate=/etc/kubernetes/pki/jackhe.crt --client-key=/etc/kubernetes/pki/jackhe.key --kubeconfig=/tmp/config

选项:

--client-certificate="": 设置kuebconfig配置文件中用户选项中的证书文件路径。
--client-key="": 设置kuebconfig配置文件中用户选项中的证书密钥路径。
--embed-certs=false: 设置kuebconfig配置文件中用户选项中的embed-certs开关。

四、配置context,⽤来组合cluster和credentials,即访问的集群的上下⽂。

kubectl config set-context jackhe@mycluster --cluster=mycluster --user=jackhe --kubeconfig=/tmp/config

注意: jackhe@mycluster要对应上你新建的集群名字!!!
五、指定上下文切换到jackhe访问集群,我们能看到现在是没有任何权限的。

kubectl config use-context jackhe@mycluster --kubeconfig=/tmp/config
kubectl config view --kubeconfig=/tmp/config
kubectl get pod --kubeconfig=/tmp/config

六、接下来我们基于RBAC建立只读ClusterRole文件(权限可配置)。

kubectl apply -f  readonly.yaml

apiVersion: rbac.authorization.k8s.io/v1beta1
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

七、创建基于用户jackhe的ClusterRoleBinding文件。

kubectl apply -f readonly.yaml

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: cluster-readonly
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-readonly
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: jackhe

八、我们这时再测试已经有了只读权限。

kubectl get pod --kubeconfig=/tmp/config

九、大功告成,接下来我们只要把/tmp/config文件放到用户的家目录.kube下就可以使用了。

mkdir -p /home/jackhe/.kube
cp /tmp/config /home/jackhe/.kube/
chown -R jackhe.jackhe /home/jackhe/.kube/

OS切换到jackhe用户,我们能看到只有只读权限,也无法 上下文切换到kubernetes-admin@kubernetes ,因为配置文件里并没有相关信息。哈哈,还想删库跑路!!!

给你的Kubernetes集群建一个只读账户(防止高管。。。后)的更多相关文章

  1. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  2. 高可用Kubernetes集群原理介绍

    ■ 文/ 天云软件 云平台开发工程师 张伟 1. 背景 Kubernetes作为容器应用的管理中心,对集群内部所有容器的生命周期进行管理,结合自身的健康检查及错误恢复机制,实现了集群内部应用层的高可用 ...

  3. Kubernetes 集群日志 和 EFK 架构日志方案

    目录 第一部分:Kubernetes 日志 Kubernetes Logging 是如何工作的 Kubernetes Pod 日志存储位置 Kubelet Logs Kubernetes 容器日志格式 ...

  4. 企业运维实践-丢弃手中的 docker build , 使用Kaniko直接在Kubernetes集群或Containerd环境中快速进行构建推送容器镜像

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 首发地址: h ...

  5. Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群

    前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...

  6. 使用 Kubeadm+Containerd 部署一个 Kubernetes 集群

    本文独立博客阅读地址:https://ryan4yin.space/posts/kubernetes-deployemnt-using-kubeadm/ 本文由个人笔记 ryan4yin/knowle ...

  7. Kubernetes — 从0到1:搭建一个完整的Kubernetes集群

    准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...

  8. K8S学习笔记之二进制的方式创建一个Kubernetes集群

    0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...

  9. 使用Minikube运行一个本地单节点Kubernetes集群(阿里云)

    使用Minikube运行一个本地单节点Kubernetes集群中使用谷歌官方镜像由于某些原因导致镜像拉取失败以及很多人并没有代理无法开展相关实验. 因此本文使用阿里云提供的修改版Minikube创建一 ...

随机推荐

  1. 17.3.15---关于GPIO学习笔记

    STM32的IO口可以由软件配置成为8种模式: 1--输入浮空 2--输入上拉 3--输入下拉 4--模拟输入 5--开漏输出 6--推挽输出 7--推挽复用 8--开漏复用 STM32的每个IO口都 ...

  2. 吴裕雄--天生自然python Google深度学习框架:经典卷积神经网络模型

    import tensorflow as tf INPUT_NODE = 784 OUTPUT_NODE = 10 IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABEL ...

  3. 吴裕雄--天生自然 PYTHON3开发学习:输入和输出

    str = input("请输入:"); print ("你输入的内容是: ", str) # 打开一个文件 f = open("/tmp/foo.t ...

  4. 前端框架Bootstrap(10.7国庆补写)

    框架的官网地址:https://v3.bootcss.com/ 主要学习Bootstrap框架提供的样式.组件.插件的使用. 首先下载到本地,在项目中导入使用: 下载的文件中包含:min.css的是压 ...

  5. jmeter接口自动化测试,数据驱动玩法

    总体思路:excel管理测试数据,判断不同的接口请求方法,取登陆token值为全局变量方便后面接口调用,预期结果断言: 1.设置获取excel数据源: 2.设置取token以及设置为全局变量: 3.i ...

  6. php time()时间戳作为文件名产生文件同名的bug

    /*time()函数生成的文件名可能是相同的,因为如果php运行的过程如果足够快,time()函数调用的足够频繁,那么有可能time()生成的时间戳会相同,因为时间戳是以秒为单位,所以如果足够频繁有可 ...

  7. Codeforces1301D Time to Run

    (搬运一下部分官方题解) Description link 或者洛谷link 到时候就有中文翻译了,不过这个题机翻没毛病 Solution 首先这是一道模拟题-- 不要管题目中的循环移动的问题,直接按 ...

  8. AJAX数据传输

    AJAX = Asynchronous JavaScript and XML(异步的Javascript和XML) AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页 ...

  9. VBE2014_Setup_20160709.rar

    VBE2014用于各种VBA编程环境的插件,包括VB6 安装本软件之后,在编程环境的“外接程序管理器”中,可以勾选/取消勾选. 在代码区域点击右键,可以对 过程.模块.工程级别的代码进行自动缩进. * ...

  10. python后端面试第五部分:Linux操作系统--长期维护

    ##################     Linux操作系统      ####################### 1,讲一下你常用的Linux/git命令和作用: 2,查看当前进程是用什么命 ...