k8s RBAC 角色访问控制详解与生产中的实际应用案例

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、k8s简介

2、RBAC简介 

二、RBAC关键资源

1、Role

2、Cluster Role 

3、RoleBinding

4、ClusterRoleBinding 

5、主体(Subject)

三、实际应用 

案例1

案例2


一、前言

1、k8s简介

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

​​

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

2、RBAC简介 

K8s RBAC(Role-Based Access Control,基于角色的访问控制)是Kubernetes(通常简称为K8s)中用于控制用户对集群资源访问权限的一种机制。RBAC允许管理员通过定义角色(Role)和角色绑定(RoleBinding)来管理用户对集群资源的访问权限。

二、RBAC关键资源

1、Role

在Kubernetes(K8s)中,Role是一种命名空间级别的资源,它允许对命名空间内的资源进行细粒度的访问控制。Role是一组权限的集合,用于给某个Namespace中的资源进行鉴权。具体来说,Role资源类型的rules字段用于定义哪些操作(verbs)可以在哪些资源(resources)上执行。

  • resources字段指定了角色可以访问的资源类型。这些资源类型可以是Kubernetes API中定义的任何资源,例如Pods、Services、Deployments、ConfigMaps等。可以在resources字段中列出多个资源类型,以允许角色访问这些类型的资源。
  • verbs字段定义了角色可以对资源执行的操作。
### 配置和管理 Kubernetes (k8s) 中的 RBAC 权限 #### 创建角色(Role) 为了定义特定命名空间内的权限,可以创建 `Role` 对象。下面是一个简单的例子,用于授予读取 Pod 的权限: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: example-namespace name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] ``` 此 YAML 文件描述了一个名为 `pod-reader` 的角色,它允许执行获取、监视以及列出操作于 Pods 上[^2]。 #### 将角色绑定到用户或服务账户(Role Binding) 一旦定义好角色之后,则需通过 `RoleBinding` 或者 `ClusterRoleBinding` 把这些权限分配给具体的用户或者 Service Account。这里展示如何把前面提到的角色赋予某个用户 zhaoz,在北京这个命名空间下: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: beijing subjects: - kind: User name: zhaoz apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io ``` 这段配置会将 `pod-reader` 这个角色用户 zhaoz 关联起来,并限定在北京这一命名空间内生效[^3]。 #### 查看现有的 RBAC 资源 要检查当前环境中已有的 Roles 和 Bindings 可以运行如下命令来获取列表信息: ```bash kubectl get roles,rolebindings,clusterroles,clusterrolebindings ``` 这有助于理解现有设置并确保新添加的规则按预期工作。 #### 切换上下文至管理员身份 当需要进行更广泛的更改时,可能希望切换到具有更高权限的身份来进行操作。可以通过以下指令实现这一点: ```bash kubectl config use-context kubernetes-admin@kubernetes ``` 这样就可以获得集群级别的完全控制权以便完成必要的调整[^1]。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明跟你说过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值