K8S学习之基础三十一:k8s中RBAC 的核心概念

Kubernetes (k8s) 中的 RBAC(Role-Based Access Control,基于角色的访问控制)是一种用于管理用户和服务账户对集群资源访问权限的机制。RBAC 允许管理员通过定义角色(Role)和角色绑定(RoleBinding)来精确控制谁可以在哪些资源上执行哪些操作。

RBAC 的核心概念

  1. Role:

    • 定义了一组权限,指定了可以对哪些资源执行哪些操作。

    • Role 是命名空间(Namespace)级别的,即它只适用于特定的命名空间。

      复制代码
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        namespace: default
        name: pod-reader
      rules:
      - apiGroups: [""] # "" 表示核心 API 组
        resources: ["pods"]
        verbs: ["get", "watch", "list"]

      这个 Role 允许用户在 default 命名空间中获取、查看和列出 Pod。

  2. ClusterRole:

    • 类似于 Role,但它是集群级别的,适用于整个集群,而不仅仅是某个命名空间。

      复制代码
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: cluster-admin
      rules:
      - apiGroups: [""]
        resources: ["*"]
        verbs: ["*"]

      这个 ClusterRole 允许用户对所有资源执行所有操作。

  3. RoleBinding:

    • 将 Role 或 ClusterRole 绑定到用户、组或服务账户(ServiceAccount)。

    • RoleBinding 是命名空间级别的,即它只适用于特定的命名空间。

      复制代码
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: read-pods
        namespace: default
      subjects:
      - kind: User
        name: alice
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: Role
        name: pod-reader
        apiGroup: rbac.authorization.k8s.io

      这个 RoleBinding 将 pod-reader Role 绑定到用户 alice,允许她在 default 命名空间中读取 Pod。

  4. ClusterRoleBinding:

    • 类似于 RoleBinding,但它是集群级别的,适用于整个集群。

      复制代码
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: cluster-admin-binding
      subjects:
      - kind: User
        name: admin
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: cluster-admin
        apiGroup: rbac.authorization.k8s.io

      这个 ClusterRoleBinding 将 cluster-admin ClusterRole 绑定到用户 admin,允许她对整个集群中的所有资源执行所有操作。

RBAC 的常见操作

  • 创建 Role 和 RoleBinding:

    • 使用 kubectl create role 和 kubectl create rolebinding 命令可以快速创建 Role 和 RoleBinding。

      复制代码
      kubectl create role pod-reader --verb=get,list,watch --resource=pods
      kubectl create rolebinding read-pods --role=pod-reader --user=alice
  • 查看 Role 和 RoleBinding:

    • 使用 kubectl get role 和 kubectl get rolebinding 命令可以查看现有的 Role 和 RoleBinding。

      复制代码
      kubectl get role -n default
      kubectl get rolebinding -n default
  • 删除 Role 和 RoleBinding:

    • 使用 kubectl delete role 和 kubectl delete rolebinding 命令可以删除 Role 和 RoleBinding。

      复制代码
      kubectl delete role pod-reader -n default
      kubectl delete rolebinding read-pods -n default

RBAC 的最佳实践

  1. 最小权限原则 :
    • 只授予用户或服务账户完成其任务所需的最小权限。
    • 避免使用过于宽泛的权限,如 cluster-admin,除非确实需要。
  2. 使用命名空间隔离 :
    • 将不同的应用或团队分配到不同的命名空间,并使用 Role 和 RoleBinding 来控制权限。
  3. 定期审计权限 :
    • 定期检查 Role 和 RoleBinding,确保没有不必要的权限被授予。
  4. 使用 ServiceAccount :
    • 为每个应用或服务创建专用的 ServiceAccount,并为其分配适当的权限,而不是使用默认的 ServiceAccount。

总结

RBAC 是 Kubernetes 中管理访问控制的重要机制,通过定义 Role、ClusterRole、RoleBinding 和 ClusterRoleBinding,管理员可以精确控制用户和服务账户对集群资源的访问权限。遵循最小权限原则和最佳实践,可以有效地提高集群的安全性。

相关推荐
Pniubi4 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko74 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师4 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.4 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼5 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
撩得Android一次心动6 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
福兮说7 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
dadaobusi7 小时前
学习:灵犀指令集
学习
紧跟先前的步伐8 小时前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
xhyu618 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉