2019独角兽企业重金招聘Python工程师标准>>>

kubernetes 主要通过 APIServer 对外提供服务,对于这样的系统集群来说,请求访问的安全性是非常重要的考虑因素。如果不对请求加以限制,那么会导致请求被滥用,甚至被黑客攻击。

kubernetes 对于访问 API 来说提供了两个步骤的安全措施:认证和授权。认证解决用户是谁的问题,授权解决用户能做什么的问题。通过合理的权限管理,能够保证系统的安全可靠。

下图是 API 访问要经过的三个步骤,前面两个是认证和授权,第三个是 Admission Control,它也能在一定程度上提高安全性,不过更多是资源管理方面的作用。

NOTE: 只有通过 HTTPS 访问的时候才会通过认证和授权,HTTP 不需要。

k8s-aaa.png

Authentication (认证)

All Kubernetes clusters have two categories of users: service accounts managed by Kubernetes, and normal users.

当您(真人用户)访问集群(例如使用kubectl命令)时,apiserver 会将您认证为一个特定的 User Account(目前通常是admin,除非您的系统管理员自定义了集群配置)。Pod 容器中的进程也可以与 apiserver 联系。 当它们在联系 apiserver 的时候,它们会被认证为一个特定的 Service Account(例如default)。

normal users

normal users 由外部系统管理,并不由 kubernetes 管理,kubernetesq API中也没有关于 normal users 的定义,所以不能通过 kubernetes API 创建和管理。

service accounts

Service Account 用来访问 kubernetes API,通过 kubernetes API 创建和管理,每个 account 只能在一个 namespace 上生效,存储在 kubernetes API 中的 Secrets 资源。kubernetes 会默认创建,并且会自动挂载到 Pod 中的 /run/secrets/kubernetes.io/serviceaccount 目录下。

Authorization (授权)

RBAC(Role-Based Access Control)

要启用RBAC,请使用--authorization-mode=RBAC启动API Server。

RBAC 是官方才 1.6 版本之后推荐使用的授权方式,因为它比较灵活,而且能够很好地实现资源隔离效果。

这种方法引入了一个重要的概念:Role,翻译成角色。所有的权限都是围绕角色进行的,也就是说角色本身会包含一系列的权限规则,表明某个角色能做哪些事情。比如管理员可以操作所有的资源,某个 namespace 的用户只能修改该 namespace的内容,或者有些角色只允许读取资源。角色和 pods、services 这些资源一样,可以通过 API 创建和删除,因此用户可以非常灵活地根据需求创建角色。

Role与ClusterRole

在RBAC API中,一个角色包含了一套表示一组权限的规则。 权限以纯粹的累加形式累积(没有”否定”的规则)。 角色可以由命名空间(namespace)内的Role对象定义,而整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现。

一个Role对象只能用于授予对某一单一命名空间中资源的访问权限。 以下示例描述了”default”命名空间中的一个Role对象的定义,用于授予对pod的读访问权限:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""] # 空字符串""表明使用core API groupresources: ["pods"]verbs: ["get", "watch", "list"]

ClusterRole对象可以授予与Role对象相同的权限,但由于它们属于集群范围对象, 也可以使用它们授予对以下几种资源的访问权限:

  • 集群范围资源(例如节点,即node)
  • 非资源类型endpoint(例如”/healthz”)
  • 跨所有命名空间的命名空间范围资源(例如pod,需要运行命令kubectl get pods --all-namespaces来查询集群中所有的pod)

下面示例中的ClusterRole定义可用于授予用户对某一特定命名空间,或者所有命名空间中的secret(取决于其绑定方式)的读访问权限:


kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:# 鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段name: secret-reader
rules:
- apiGroups: [""]resources: ["secrets"]verbs: ["get", "watch", "list"]

RoleBinding与ClusterRoleBinding

角色绑定将一个角色中定义的各种权限授予一个或者一组用户。 角色绑定包含了一组相关主体(即subject, 包括用户——User、用户组——Group、或者服务账户——Service Account)以及对被授予角色的引用。 在命名空间中可以通过RoleBinding对象授予权限,而集群范围的权限授予则通过ClusterRoleBinding对象完成。

RoleBinding可以引用在同一命名空间内定义的Role对象。 下面示例中定义的RoleBinding对象在”default”命名空间中将”pod-reader”角色授予用户”jane”。 这一授权将允许用户”jane”从”default”命名空间中读取pod。

# 以下角色绑定定义将允许用户"jane"从"default"命名空间中读取pod。
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io

参考

  • kubernetes 权限管理
  • Securing a Cluster

作者:猴子精h
链接:https://www.jianshu.com/p/e14203450bc3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://my.oschina.net/xiaominmin/blog/1982480

Kubernetes 权限管理相关推荐

  1. Kubernetes权限管理与控制-RBAC

    Kubernetes权限管理与控制-RBAC 1.Kubernetes api访问控制 用户通过kubectl.客户端库或者通过发送REST请求访问API.用户和Kubernetes服务账户都可以被授 ...

  2. kubernetes API Server 权限管理实践

    2019独角兽企业重金招聘Python工程师标准>>> kubernetes API Server 权限管理实践 API Server权限控制方式介绍 API Server权限控制分 ...

  3. kubernetes(k8s)之rbac权限管理详解

    kubernetes(k8s)之rbac权限管理详解 RBAC简介 RBAC(Role-Based Access Control) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

  4. Kubernetes(k8s)权限管理RBAC详解

    文章目录 一.简介 二.用户分类 三.K8s角色&角色绑定(以ServiceAccount展开讲解) 1)授权介绍 2)角色(Role和ClusterRole) 3)角色绑定(RoleBind ...

  5. 【360开源】Wayne:企业级可视化多集群Kubernetes一站式管理平台

    宣言 Wayne是由360搜索云平台团队开发的,一个通用的.基于Web的Kubernetes多集群一站式可视化管理平台.内置了丰富多样的功能,满足企业的通用需求,同时插件化的方式可以方便集成定制化功能 ...

  6. 【华为云技术分享】云容器引擎 CCE权限管理实践

    随着容器化的快速发展,大数据原有的分布式任务调度模式,正在被基于Kubernetes的技术架构所取代.CCE云容器引擎是华为云推出的支持Kubernetes社区原生应用和工具,应用级自动弹性伸缩,自动 ...

  7. Kubernetes 可视化管理工具Kuboard V3

    目前Kubernetes可视化工具如雨后春笋,数不胜数.接下来介绍一款非常美观的可视化工具 Kuboard免费版只有3个集群的权限,企业使用需要付费,出于学习的目标可以自己玩玩.kuboard外观比较 ...

  8. 合肥工业大学—SQL Server数据库实验十:用户及其权限管理

    用户及其权限管理 1. 创建登录名Mylog及密码 2. 创建用户user2关联登录名 3. 创建角色role1 4. 对用户user2及角色role1授权 5. 验证用户授权 6. 收回用户权限 1 ...

  9. mongodb权限管理

    说到mongodb就得先谈谈mongodb的用户组,和传统的关系型数据库不一样,mongodb并没有在创建应用时就要求创建权限管理组,所以类似于Robomongo这样的数据库可视化工具在创建conne ...

最新文章

  1. 网站优化时不容错过的时期有哪几个?
  2. 数字图像处理与python实现 pdf_正版 数字图像处理与Python实现 高等院校计算机科学 人工智能 信号与信息处理 通信工程等专业的...
  3. Java查询图书信息
  4. 将 Kubernetes 云原生技术革命进行到底!
  5. 三元运算符 python_Python三元运算符
  6. 没有人更比他懂基金业务:博格和他的先锋集团创业史(4):
  7. 产品经理学习——Axure常用快捷键
  8. grads插值_GrADS使用简介
  9. axure rp8 添加动态面板_AxureRP教程–动态面板高级应用
  10. android程序 获取flash容量大小,Android用WebView加载flash大文件偶然会出现内存溢出以及蓝色打问号小方块问题的解决方案...
  11. 19. shift,shift n,位置变量,命令行参数控制,shift语法,用法示例
  12. 新能源车牌 普通车牌 特殊车牌正则校验
  13. Mysql 快速生成日期时间维度表
  14. 设置带用户名和密码的telnet登入方式(原创)
  15. Simulink之S-function函数笔记之一
  16. NAACL 2022 | FACTPEGASUS:抽象摘要的真实性感知预训练和微调
  17. iOS测试之接口测试总结
  18. 谷歌三大核心技术(一)The Google File System中文版
  19. 抖音世界杯直播时出现男女“不雅”声音?官方回应了!
  20. centerJavaScript淘宝登录界面/center

热门文章

  1. ORACLE SQL调优案例一则
  2. 关于批量导入数据以及调优的一些总结
  3. fstatfs/statfs详解
  4. 算法 排序 python 实现--堆排序
  5. lnmp安装完之后的一些注意事项
  6. 智慧楼宇物联网公司En-trak获Pre-A 轮融资
  7. web.xml的contextConfigLocation作用及自动加载applicationContext.xml
  8. 《Redis官方教程》-Redis安全
  9. CentOS下编译安装LAMP开发环境
  10. 问题二十七:ray traing中的positionable camera