前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日一个云原生小技巧 #8】Kubernetes 中的 RBAC

【每日一个云原生小技巧 #8】Kubernetes 中的 RBAC

作者头像
郭旭东
发布2023-10-25 19:00:07
1970
发布2023-10-25 19:00:07
举报
文章被收录于专栏:云原生工具箱云原生工具箱

介绍 RBAC

RBAC (Role-Based Access Control) 是 Kubernetes 中用于授权的一种机制。其基本思想是将一系列的操作权限与角色(Role)关联,然后再将特定的角色与用户或用户组关联。

使用 RBAC,管理员可以按最小权限原则分配权限,只给予用户执行其任务所需的最小权限。这有助于限制潜在的恶意行为和误操作,并增强了安全性。

使用场景

  1. 多租户集群: 在大型组织或云环境中,可能有多个团队或用户共享一个 Kubernetes 集群,RBAC 可以确保他们只能访问各自的资源。
  2. 保护敏感资源: 防止未经授权的用户访问或修改 ConfigMaps、Secrets 或 Persistent Volumes。
  3. 细粒度的权限管理: 允许开发团队部署应用,但不允许他们创建新的 namespaces 或查看其他团队的工作。

使用技巧

  1. 按最小权限原则分配: 默认不给权限,只在确实需要时给予。
  2. 利用 Role 与 ClusterRole: Role 是 namespace 级别的,只在一个 namespace 中有效。而 ClusterRole 是集群级别的,跨 namespaces。
  3. 明确绑定: 使用 RoleBindingClusterRoleBinding 将角色绑定到特定的用户、组或 Service Accounts。
  4. 审计与监视: 定期审查 RBAC 权限并监视 API 调用,以确保权限被正确使用。
  5. 利用现成的工具: 例如 kubectl auth can-i 命令,来检查权限。

使用案例

为特定 namespace 的开发者分配权限

想象一个场景,你希望开发团队能够在 development namespace 中管理 Pods,但不希望他们在其他 namespace 或修改其他资源。

  1. 创建一个 Role
代码语言:javascript
复制
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: development
  name: pod-manager
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "create", "update", "delete"]
  1. 创建一个 RoleBinding

将上面的 Role 绑定到一个用户 dev-user:

代码语言:javascript
复制
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: pod-manager-binding
  namespace: development
subjects:
- kind: User
  name: "dev-user"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-manager
  apiGroup: rbac.authorization.k8s.io

为所有 namespaces 的管理员分配权限

你希望某个管理员能够管理所有 namespaces 的 Services。

  1. 创建一个 ClusterRole
代码语言:javascript
复制
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  # "name" is the name of the ClusterRole
  name: service-admin
rules:
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get", "list", "create", "update", "delete"]
  1. 创建一个 ClusterRoleBinding

将上面的 ClusterRole 绑定到一个用户 admin-user:

代码语言:javascript
复制
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: service-admin-binding
subjects:
- kind: User
  name: "admin-user"
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: service-admin
  apiGroup: rbac.authorization.k8s.io

通过这些案例,我们可以看到 RBAC 是如何在 Kubernetes 中进行细粒度授权的,从而确保资源安全。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍 RBAC
    • 使用场景
    • 使用技巧
    • 使用案例
      • 为特定 namespace 的开发者分配权限
        • 为所有 namespaces 的管理员分配权限
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档