您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

什么是Kubernetes RBAC?为什么需要它?

时间:2023-11-07 13:28:27  来源:51CTO  作者:

译者 | 李睿

审校 | 重楼

什么是Kube.NETes RBAC?

当组织开始走上Kubernetes之旅时,在通常情况下,他们希望实现最低权限角色和适当的授权来保护他们的基础设施。这就是实现Kubernetes RBAC以保护Kubernete资源的地方,例如敏感数据,包括部署细节、持久存储设置和机密。Kubernetes RBAC提供了控制谁能够以何种访问方式访问每个API资源的能力。组织可以为人类用户(个人或组)和非人类用户(服务帐户)使用RBAC来定义他们对各种Kubernetes资源的访问类型。

例如,有Dev、Staging和Production三个不同的环境,必须向团队(例如开发人员、DevOps人员、SRE、应用程序所有者和产品经理)提供访问权限。

什么是Kubernetes RBAC?为什么需要它?

在开始之前需要强调一下,从抽象的角度来看,将把用户和服务帐户视为相同的——每个请求,无论是来自用户还是服务帐户,最终都是HTTP请求。人们知道Kubernetes中的用户和服务帐户(针对非人类用户)本质上是不同的。

如何启用Kubernetes RBAC

可以在Kubernetes中启用RBAC,这种方法是启动带有授权模式标志的API服务器。用于向用户应用RBAC的Kubernetes资源有:

  • 角色(Role)
  • 集群角色(ClusterRole)
  • 角色绑定(RoleBinding)
  • 集群角色绑定(ClusterRoleBinding)

1.服务帐户

为了管理用户,Kubernetes提供了一种身份验证机制,但通常建议将Kubernetes与企业用户身份管理(如Active Directory或LDAP)集成在一起。当涉及到Kubernetes集群中的非人类用户(或机器或服务)时,就出现了服务帐户的概念。

例如,Kubernetes资源需要由Spinnaker或Argo等持续交付(CD)应用程序访问才能部署应用程序,或者服务A的一个pod需要与服务B的另一个pod对话。在这种情况下,服务帐户用于创建非人类用户的帐户并指定所需授权(使用角色绑定或集群角色绑定)。

可以通过创建如下所示的yaml来创建一个服务帐户:

YAML 
 apiVersion: v1
 kind: ServiceAccount
 metadata:
  name: Nginx-sa
 spec: 
  automountServiceAccountToken: false

然后应用它。

Shell 
 $ kubectl Apply -f nginx-sa.yaml
 serviceaccount/nginx-sa created

现在,必须为部署资源中的pod提供服务帐户。

YAML 
 kind: Deployment
 metadata:
  name: nginx1
 labels:
  app: nginx1
 spec:
  replicas: 2
  selector:
  matchLabels:
  app: nginx1
 template:
  metadata:
  labels:
  app: nginx1
  spec:
  serviceAccountName: nginx-sa
  contAIners:
  - name: nginx1
  image: nginx
  ports:
  - containerPort: 80

如果没有在部署资源中指定服务帐户名称(serviceAccountName),那么pod将属于默认的服务帐户。需要注意的是,每个命名空间都有一个默认的服务帐户,集群也有一个默认的服务帐户。默认服务帐户的所有默认授权策略将应用于未提及服务帐户信息的pod。

以下可以看到如何使用角色绑定和集群角色绑定为服务帐户分配各种权限。

2.角色和集群角色

角色(Role)和集群角色(ClusterRole)是Kubernetes资源分别用于定义用户可以在命名空间或集群中执行的操作列表。

在Kubernetes中,参与者(如用户、组或服务帐户)被称为主题。主体的动作,如创建、读取、写入、更新和删除,称为操作。

YAML 
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
 metadata:
  name: read-only
  namespace: dev-namespace
 rules:
 - apiGroups:
 - ""
  resources: ["*"]
 verbs:
 - get
  - list
 - watch

在上面的角色资源中,指定了只读角色仅适用于deb-ns命名空间和命名空间内的所有资源。任何绑定到只读角色的服务帐户或用户都可以执行这些操作——获取、列出和监视。

类似地,集群角色(资源将允许创建与集群相关的角色)。下面是一个例子:

YAML 
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
 name: chief-role
 rules:
 - apiGroups:
 - ""
 resources: ["*"]
 verbs:
 - get
 - list
 - watch
 - create
 - update
 - patch
 - delete

任何绑定到chief-role的用户/组/服务帐户都可以在集群中执行任何操作。

在下一节中,将看到如何使用角色绑定和集群角色绑定向主题授予角色。

另外,Kubernetes允许使用角色资源配置自定义角色,或者使用默认的面向用户的角色,如下所示:

  • 集群管理员(Cluster-admin):对于集群管理员,Kubernetes提供了一个超级用户角色。集群管理员可以对集群中的任何资源执行任何操作。可以在集群角色绑定中使用超级用户来授予对集群(和所有命名空间)中的每个资源的完全控制权,也可以在角色绑定中使用超级用户来授予对各自命名空间中的每个资源的完全控制权。
  • 管理员(Admin):Kubernetes提供了一个管理员角色,允许对命名空间内的资源进行无限制的读/写访问。管理员角色可以在特定的命名空间内创建角色和角色绑定。它不允许对命名空间本身进行写访问。这可以在角色绑定的资源中使用。
  • 编辑(Edit):编辑角色在给定的Kubernetes命名空间内授予读/写访问权限。它无法查看或修改角色或角色绑定。
  • 视图(View):视图角色允许在给定的命名空间内进行只读访问。它不允许查看或修改角色或角色绑定。

3.角色绑定和集群角色绑定

要将角色应用于主题(用户/组/服务帐号),必须定义角色绑定。这将使用角色配置中定义的权限为用户提供对命名空间内所需资源的最低权限访问。

YAML 
 apiVersion: rbac.authorization.k8s.io/v1beta1
 kind: RoleBinding
 metadata:
 name: Role-binding-dev
 roleRef:
  kind: Role
 name: read-only #The role name you defined in the Role configuration
  apiGroup: rbac.authorization.k8s.io
 subjects:
 - kind: User
  name: Roy #The name of the user to give the role to
 apiGroup: rbac.authorization.k8s.io
 - kind: ServiceAccount
  name: nginx-sa#The name of the ServiceAccount to give the role to
 apiGroup: rbac.authorization.k8s.io

类似地,可以创建集群角色绑定资源来定义用户的角色。需要注意的是,使用了Kubernetes提供的默认超级用户集群角色引用,而不是使用自定义角色。这可以应用于集群管理员。

YAML 
 apiVersion: rbac.authorization.k8s.io/v1beta1
 kind: ClusterRoleBinding
 metadata:
  name: superuser-binding
 roleRef:
  kind: ClusterRole
 name: superuser
 apiGroup: rbac.authorization.k8s.io
 subjects:
 - kind: User
 name: Aditi
 apiGroup: rbac.authorization.k8s.io

Kubernetes RBAC的好处

Kubernetes RBAC的优势在于它允许“原生”实现对集群中各种用户和机器的最小权限。主要的好处是:

1.适当的授权

通过对各种用户和服务帐户授予Kubernetes资源的最小权限,是DevOps和架构师可以实现零信任的主要支柱之一。组织可以减少数据泄露和数据泄露的风险,还可以避免内部员工意外删除或操纵任何关键资源。

2.职责分离

在Kubernetes资源上应用RBAC将始终有助于组织中用户(例如开发人员、DevOps、测试人员、SRE等)的职责分离。例如,为了在开发环境中创建/删除新资源,开发人员不应该依赖于管理员。同样,将新应用程序部署到测试服务器并在测试后删除pod不应该成为DevOps或测试人员的瓶颈。将授权和权限应用到用户(如开发人员和CI/CD部署代理)各自的工作空间(如命名空间或集群)将减少依赖并减少懈怠。

3.100%遵守法规

许多行业法规(例如HIPAA、GDPR、SOX等)都要求软件领域有严格的认证和授权机制。使用Kubernetes RBAC,DevOps和架构师可以快速地将RBAC实现到他们的Kubernetes集群中,并改进他们的设置以遵守这些标准。

Kubernetes RBAC的缺点

对于中小型企业来说,使用Kubernetes RBAC是合理的,但不建议使用Kubernetes RBAC,其原因如下:

  • 可能有许多用户和机器,并且应用Kubernetes RBAC可能难以实现和维护。
  • 很难看到谁执行了什么操作。例如,大型企业可能需要诸如违反RBAC权限或恶意尝试之类的信息。

原文标题:What Is Kubernetes RBAC and Why Do You Need It?,作者:Debasree Panda



Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  Search: Kubernetes  点击:(6)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  Search: Kubernetes  点击:(12)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01  Search: Kubernetes  点击:(153)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  Search: Kubernetes  点击:(50)  评论:(0)  加入收藏
Kubernetes Informer基本原理,你明白了吗?
本文分析 k8s controller 中 informer 启动的基本流程不论是 k8s 自身组件,还是自己编写 controller,都需要通过 apiserver 监听 etcd 事件来完成自己的控制循环逻辑。如何高...【详细内容】
2024-01-30  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于:• 集...【详细内容】
2024-01-03  Search: Kubernetes  点击:(76)  评论:(0)  加入收藏
一文读懂Kubernetes部署策略
在这篇文章中,我们将深入研究 Kubernetes 部署概念和一些常见策略,了解每种策略的优缺点。合适的部署策略使我们能够在发布应用程序时最大限度地减少停机时间、增强客户体验并...【详细内容】
2024-01-03  Search: Kubernetes  点击:(59)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  Search: Kubernetes  点击:(114)  评论:(0)  加入收藏
如何基于Kubernetes运行Nacos高可用集群
Nacos(Namings and Configuration Management)是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的一些主要功能和特点: 服务发现...【详细内容】
2023-12-18  Search: Kubernetes  点击:(69)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(5)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(6)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(9)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(115)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条