首页 > 其他分享 >【K8s】专题十四(1):Kubernetes 安全机制之 RBAC

【K8s】专题十四(1):Kubernetes 安全机制之 RBAC

时间:2024-10-10 08:50:36浏览次数:7  
标签:K8s Kubernetes 角色 -- demo RBAC 权限 ClusterRole

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Linux】Shell 编程规范及检查工具推荐


目录

一、基本介绍

二、RBAC 对象类型

1、Role(角色) 与 ClusterRole(集群角色)

2、RoleBinding(角色绑定) 与 ClusterRoleBinding(集群角色绑定)

三、RBAC 对象属性

1、Rule

2、RoleRef

3、Subject

四、RBAC 常用命令

五、RBAC 资源清单(示例)


一、基本介绍

在 Kubernetes 中,RBAC(Role-Based Access Control,基于角色的访问控制)是一种权限管理机制,用于控制用户、系统进程或系统组件对 Kubernetes 资源的访问权限。

RBAC 的主要作用如下:

  • 权限细分:RBAC 允许创建不同的角色,每个角色可以定义一组特定的权限。这些角色可以授予用户对资源的不同级别的访问权限,如读取、写入、删除等
  • 角色分配:通过角色绑定(RoleBinding 或 ClusterRoleBinding),可以将一个或多个角色分配给用户、组或服务账户。这使得权限管理更加灵活和可扩展
  • 最小权限原则:RBAC 支持最小权限原则,即用户只能获得完成其工作所必需的权限。这有助于减少安全风险
  • namespace 级别的权限:RBAC 允许在特定的 namespace 内定义角色和角色绑定,从而限制用户只能在特定的 namespace 内操作
  • 集群级别的权限:RBAC 还支持在集群级别定义角色和角色绑定,这样用户就可以在整个集群范围内进行操作
  • 动态策略管理:RBAC 允许通过 Kubernetes API 动态地创建、更新和删除角色和角色绑定,使得权限管理更加灵活
  • 审计和合规:RBAC 可以与 Kubernetes 的审计日志结合使用,帮助跟踪和记录用户的活动,以便于审计和合规性检查
  • 集成身份提供者:RBAC 可以与外部身份提供者(如 LDAP、SAML 或 OIDC)集成,允许使用集中式身份验证和授权
  • 减少硬编码权限:RBAC 减少了硬编码权限的需求,使得权限管理更加集中和一致
  • 提高安全性:通过精细的权限控制,RBAC 有助于提高集群的安全性,防止未授权访问和潜在的安全威胁

RBAC 的核心思想是通过「角色」控制资源的操作权限,应用场景如下:

  •   权限最小化
  •   细粒度权限控制
  •   集群安全合规

使用 kubeadm 安装的集群默认开启了 RBAC,对应配置位于 Master 节点上静态 Pod 的资源清单中:
/etc/kubernetes/manifests/kube-apiserver.yaml:- --authorization-mode=Node,RBAC


二、RBAC 对象类型
1、Role(角色) 与 ClusterRole(集群角色)
  • Role 通过 Rule 定义 Subject 在指定命名空间下的权限,仅作用于集群内单个指定的命名空间
    • Role 需要指定命名空间
  • ClusterRole 通过 Rule 定义 Subject 在集群下的权限,可以作用于集群内所有的命名空间
    • ClusterRole 不需要指定命名空间
    • 集群初始化默认的 ClusterRole 对象为 cluster-admin

2、RoleBinding(角色绑定) 与 ClusterRoleBinding(集群角色绑定)
  • RoleBinding 将 Subject 与 Role 进行绑定
    • RoleBinding 需要指定命名空间
  • ClusterRoleBinding 将 Subject 与 ClusterRole 进行绑定
    • ClusterRoleBinding 不需要指定命名空间


三、RBAC 对象属性
1、Rule
  • 规则,用于定义 Role / ClusterRole 可以对「资源类型集合」执行的「操作类型集合」
    • apiGroups:规则适用的 API 组,[""] 表示核心 API 组
    • resources:允许操作的「资源类型集合」,如 nodes、deployments、pods 等(⚠️ 末尾加上 s)
    • verbs:允许执行的「操作类型集合」,如 watch、list、get、create、update、delete 等

2、RoleRef
  • 角色引用,用于在 RoleBinding / ClusterRoleBinding 引用要绑定的 Role / ClusterRole
  • 示例如下:
roleRef:
  apiGroup: rbac.authorization.k8s.io   # 默认,且不是 rbac.authorization.k8s.io/v1
  kind: Role / ClusterRole
  name: xxx

3、Subject
  • 主体,用于在 RoleBinding / ClusterRoleBinding 定义绑定的主体,支持以下类型:
    • User:用户
    • Group:用户组
    • ServiceAccount:服务账号
  • 示例如下:
subjects:
- kind: ServiceAccount
  name: xxx
  namespace: xxx


四、RBAC 常用命令
# 创建 Role / ClusterRole
* kubectl create role demo --resource=nodes,pods --verb=get,list -n <namespace>
* kubectl create clusterrole demo --resource=nodes,pods --verb=get,list,create,delete

# 创建 RoleBinding / ClusterRoleBinding
* kubectl create rolebinding demo --role=demo --serviceaccount=xxx -n <namespace>
* kubectl create clusterrolebinding demo --clusterrole=demo --serviceaccount=xxx

标签:K8s,Kubernetes,角色,--,demo,RBAC,权限,ClusterRole
From: https://blog.csdn.net/2401_82795112/article/details/142687143

相关文章

  • Kubernetes(K8s)技术深度解析与实战案例
    Kubernetes(K8s)技术深度解析与实战案例Kubernetes(简称K8s)已经成为当今云原生应用和微服务架构的首选平台。作为一个开源的容器编排系统,K8s用于自动化应用程序的部署、扩展和管理。本文将深入探讨K8s的架构、关键组件、设计理念以及实战应用,并通过一个具体的微服务应用部署案......
  • 在K8S中,DaemonSet类型的资源特性有哪些?
    在Kubernetes(K8s)中,DaemonSet是一种特殊的控制器资源对象,其核心特性和用途使得它非常适合用于在集群的每个节点上运行守护进程或服务。以下是DaemonSet类型的资源特性的详细阐述:1.确保每个节点上运行Pod副本节点级部署:DaemonSet确保集群中的每个节点(或满足特定条件的节点)上都运......
  • 在K8S中,Deployment升级策略有哪些?
    在Kubernetes(K8s)中,Deployment的升级策略主要用于控制Pod副本的更新过程,以确保应用程序的平滑过渡和最小化的服务中断。以下是Kubernetes中Deployment升级策略的详细说明:1.滚动更新(RollingUpdate)概述:滚动更新是Deployment的默认升级策略。它通过逐步替换旧的Pod副本,以批次的......
  • 在K8S中,Pod常见调度方式有哪些?
    在Kubernetes(K8s)中,Pod的调度是一个关键过程,它决定了Pod在集群中的哪个节点上运行。K8s提供了多种调度方式,以满足不同应用的需求。以下是Pod常见的调度方式:1.默认调度(自由调度)功能:Kubernetes的默认调度器(kube-scheduler)会根据一系列内置的调度策略自动选择适合的节点。考虑因......
  • 在K8S中,Deployment 升级过程有哪些?
    在Kubernetes(K8s)中,Deployment的升级过程是一个受控且平滑的过程,用于将应用的新版本无缝地替换旧版本。以下是Deployment升级过程的详细步骤:1.更新Deployment配置准备新版本镜像或配置:确定新版本的应用程序镜像或需要更改的配置。更新Deployment的YAML配置文件,例如更改镜像......
  • 在K8S中,初始化容器(initcontainer)作用是什么?
    在Kubernetes(K8s)中,初始化容器(InitContainer)是一种特殊的容器,它在Pod的主容器启动之前运行,并执行一系列初始化任务。以下是关于初始化容器作用的详细解释:1.定义与特性定义:初始化容器是定义在Pod规格中的一个或多个容器,它们在Pod中的任何应用程序容器(即普通的容器)启动之前执行。......
  • Kubernetes(K8S)介绍
    官网:Kubernetes应用部署方式演变传统部署:互联网早期,会直接将应用程序部署在物理机上;优点:简单,不需要其他技术的参与。缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容器产生影响。虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独......
  • k8s 修改 pod 时区
    将时区文件挂载到Pod中在定义pod上层控制器的时候,添加一个用于挂载时区的卷,挂载宿主机的时区文件...containers:-name:xxx...volumeMounts:-name:timezonemountPath:/etc/localtimevolumes:-name:timezonehostPath:......
  • kubekey 快速构建重构测试k8s 环境 allinone单机 or cluster 集群
    exportKKZONE=cncurl-sfLhttps://get-kk.kubesphere.io|VERSION=v3.0.13sh-生成配置k8s集群yml指定k8s版本及管理面板./kkcreateconfig--with-kubernetesv1.23.10--with-kubespherev3.4.1apiVersion:kubekey.kubesphere.io/v1alpha2kind:Clustermetada......
  • Kubernetes的Pod调度:让你的应用像乘坐头等舱!
     一、Kubernetes中Pod调度的重要性在Kubernetes的世界里,Pod调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的Pod)送到最合适的停车位(节点)。调度不仅关乎资源的合理利用,还关乎应用的“生死存亡”,下面让我们来看看为什么调度这么重要。资源优化:想象一下,如果每辆......