Kubernetes的RBAC是啥
RBAC: Role-Based Access Control,基于角色的权限控制,有以下三种角色
- Role:角色,定义了一组API对象的操作权限
- Subject:被作用者,可以是人,也可以是机器,也可以是k8s的用户,最常使用的就是ServiceAccoun
- RoleBinding:定义了Subject和Role的绑定关系
简单地说,RoleBinding指定ServiceAccount对应的Role,Pod绑定这个ServiceAccount获得挂载的secret访问APIServrer,ApiServer验证相应的权限
Pod使用RBAC示例
演示pod使用绑定了Roler的ServiceAccount示例
1.创建一个ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
namespace: default
name: cqh
2.创建一个Role
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: cqh
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
rules定义了权限规则,允许相应namespaces的pod操作get、watch、list
关于权限的所有操作通过verbs字段控制,所有权限如下
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
这里verbs定义了权限只能操作get、watch、list
3.创建RoleBinding文件,为这个ServcieAccount分配权限
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cqh
namespace: default
subjects:
- kind: ServiceAccount
name: cqh
namespace: default
roleRef:
kind: Role
name: cqh
apiGroup: rbac.authorization.k8s.io
subjects定义了被作用者,这里指定了User类型
roleRef指定了使用的Role规则
RoleBinding一定可以通过两种方式指定用户
- 1.直接绑定用户
subjects的kind指定为ServiceAccount, name为ServiceAccount的名字system:serviceaccount:<ServiceAccount 名字 >
- 2.直接绑定用户组“Group”
subjects的kind指定为Group,name为用户组名system:serviceaccounts:<Namespace 名字>
4.pod指定servcieAccountName
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: cqh
spec:
containers:
- name: nginx
image: nginx:1.7.9
serviceAccountName: cqh
这个pod运行起来后,就可以看到ServiceAccount的token,被挂载到了容器的/var/run/secrets/kubernetes.io/serviceaccount目录下
root@cqh:/# ls -l /var/run/secrets/kubernetes.io/serviceaccount/
total 0
lrwxrwxrwx 1 root root 13 Oct 16 06:05 ca.crt -> ..data/ca.crt
lrwxrwxrwx 1 root root 16 Oct 16 06:05 namespace -> ..data/namespace
lrwxrwxrwx 1 root root 12 Oct 16 06:05 token -> ..data/token
容器里的应用,就可以使用ca.crt来访问APIServer了,此时它已经能够做GET、WATCH和LIST操作,因这cqh这个sa已经被绑定的Role做了限制
这个secret是ServiceAccount用来跟APIServer进行交互的授权文件,我们一般称为token,内容一般是证书或密码,以secret对象的方式保存在etcd中
如果一个pod没有指定serviceAccountName,k8s会自动在Namespace下创建一个default的默认SericeAccount分配给这个Pod,这种情况的ServiceAccount没有关联,此时它有访问APIServre的绝大多数权限,这个访问的token,是默认ServiceAccount对应的Secret对象提供的
以下是所有对象查看示例
# kubectl get role
NAME AGE
cqh 51m
# kubectl get sa
NAME SECRETS AGE
cqh 1 54m
default 1 39d
# kubectl get rolebinding
NAME AGE
cqh 49m
# kubectl get po
NAME READY STATUS RESTARTS AGE
cqh 1/1 Running 0 48m
...
# kubectl get clusterrole
NAME AGE
admin 39d
cluster-admin 39d
edit 39d
flannel 39d
...
# kubectl get clusterrolebinding
NAME AGE
cluster-admin 39d
flannel 39d
关于ClusterRole和ClusterRoleBindding
Role和RoleBindding对象都是Namepsace对象,如果要绑定所有的Namespace,需要使用ClusterRole和ClusterRoleBindding,和Role和RoleBinding的区别就是没有Namespace
k8s已经内置了很多个为系统保留的ClusterRole,名字都以system:开头
kubectl get clusterrole
k8s提供了4个预定义好的ClusterRole给用户使用,分别是cluster-admin、admin、edit、view
Kubernetes的RBAC是啥的更多相关文章
- 16.kubernetes的RBAC
role 分为clsterrole和role 我们从普通的role 开始理解起 [root@master ~]# kubectl create role pod-read --verb=get,lis ...
- Kubernetes之RBAC
API Server的授权管理 API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.API Server 目前支持一下几种 ...
- Kubernetes 基于 RBAC 的授权(十六)
目录 一.RBAC介绍 1.1.角色和集群角色 1.2.RoleBinding 和 ClusterRoleBinding 1.3.资源 1.4.主体 二.命令行工具 2.1.kubectl creat ...
- 10、kubernetes之RBAC认证
一.kubectl proxy # kubectl proxy --port=8080 # curl http://localhost:8080/api/v1/ # curl http://local ...
- kubernetes 1.6 RBAC访问控制
一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...
- 二进制安装部署kubernetes集群---超详细教程
本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...
- 手动部署 kubernetes HA 集群
前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...
- 34 【kubernetes】安装手册
全文参考了两篇中文文档: 1,https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster.html 2,http: ...
- 二进制手动部署kubernetes 1.10.10
转载于:https://www.jevic.cn/2018/09/23/kuberentes-1.10.10/?tdsourcetag=s_pcqq_aiomsg#heapster 通读一遍在实际操作 ...
随机推荐
- 微信小程序 select 下拉框组件
一.源码地址 https://github.com/imxiaoer/WeChatMiniSelect 二.效果图 录屏图片质量较差,所以大家会看到残影(捂脸) 三.组件源码 1. select.wx ...
- pt工具校验主从数据一致性之dsns方式
mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了.主要说一下通过dsns方式发现从库的一种方式. p ...
- Oracle sqlldr 在DOS窗口导入多列数据到数据库表
sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...
- QRowTable表格控件(五)-重写表头排序、支持第三次单击恢复默认排序
目录 一.原生表格 二.效果展示 三.实现方式 1.排序列定制 2.排序交互修改 四.相关文章 原文链接:QRowTable表格控件(五)-重写表头排序.支持第三次单击恢复默认排序 一.原生表格 开发 ...
- 谈谈你对HTML语义化的理解。
1.什么是HTML语义化? 基本上都是围绕着几个主要的标签,像标题(h1-h6),列表(li),强调(strong em)等. 根据内容的语义化(内容结构化),选择合适的标签(代码语义化),便于开发者 ...
- 单点登录(Single Sign On)解决方案
单点登录(Single Sign On)解决方案 需求 多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. A 网站和 B 网站是同一家公司的关联服务.现在要求,用户只要在其中一个网 ...
- centos php7 安装mysqli扩展心得
在新配服务器时发现,php无法连接到mysql.通过phpinfo发现.根本没有显示mysqli的相关配置.经过一系列研究.总结了下.: 第一步: 在phpinfo里没有mysqli配置,原因是安装p ...
- 带你入门SpringCloud统一配置 | SpringCloud Config
前言 在微服务中众多服务的配置必然会出现相同的配置,如果配置发生变化需要修改,一个个去修改然后重启项目的方案是绝对不可取的.而 SpringCloud Config 就是一个可以帮助你实现统一配置选择 ...
- [VB.NET Tips]Select Case语句拾遗
正常的Select 语句如下: Dim status As Integer = 5 Select Case status Case 0 Console.WriteLine("状态是:0&qu ...
- [VB.NET Tips]ParamArray参数数组
ParamArray参数数组,可以理解为传递给方法的多余的参数全都存放在这个数组中. ParamArray只能是ByVal按值传递,不能是可选参数,而且只能做为方法定义的最后一个参数. 非常类似于Py ...