首页 > 其他分享 >【Kubernetes】K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)

【Kubernetes】K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)

时间:2024-09-08 15:23:06浏览次数:3  
标签:kubectl Kubernetes 角色 访问控制 Jerry RBAC mydemo 鉴权

K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)

1.Kubernetes 的鉴权管理

客户端请求通过认证阶段后,将进入鉴权阶段。这个阶段将包含两个内容:

  • 1️⃣ 审查客户端请求的属性
  • 2️⃣ 确定请求的操作

1.1 审查客户端请求的属性

Kubernetes 审查客户端请求的属性 主要包括以下几个方面。

  • 用户与组:经过认证的用户名和所属组名的列表。
  • API 和动作:对 Kubernetes 资源的操作,如 createlistget 等请求动词。
  • 请求路径和动作:指示各种非 Kubernetes 资源的路径(如 /api),以及对该路径执行的 HTTP 操作(如 GET、POST、PUT 等)。
  • 命名空间:正在访问的 Kubernetes 对象的命名空间。

1.2 确定请求的操作

确定请求的操作 是指,确定对 Kubernetes 资源对象的请求动词或 HTTP 操作,以及该动词或 HTTP 操作是针对单个资源还是一组资源。

下表列举常见的请求动词与 HTTP 操作,以及它们的对应关系。

请求动词HTTP 操作
createPOST
getlistGET、HEAD
updatePUT
patchPATCH
deletedeletecollectionDELETE

根据 Kubernetes 鉴权时使用的模块,可以将 Kubernetes 的鉴权分为以下 4 4 4 种方式:

  • 基于 角色 的访问控制(RBAC 鉴权)
  • 基于 属性 的访问控制(ABAC 鉴权)
  • 基于 节点 的访问控制(Node 鉴权)
  • 基于 Webhook 的访问控制

基于角色的访问控制(RBAC 鉴权)是最重要的鉴权方式。

2.基于角色的访问控制(RBAC 鉴权)

基于角色的访问控制Role-Based Access ControlRBAC),通过为用户赋予不同的角色来控制其访问 Kubernetes 集群资源。它允许用户动态配置不同的角色策略。基于角色的访问控制需要使用 rbac.authorization.k8s.io API 组来执行。

2.1 基于角色的访问控制中的概念

在基于角色的访问控制中涉及 3 3 3 个非常重要的概念:角色角色绑定主体

2.1.1 角色

角色 是一组权限的集合。Kubernetes 中的角色分为两种:Role 和 ClusterRole。

  • Role 是某个命名空间中对象访问权限的集合。因此,在创建 Role 时,必须指定 Role 所属的命名空间。
  • ClusterRole 是访问某个命名空间的权限的集合。

2.1.2 角色绑定

将包含各种权限的角色授予给一个主体,这个过程被叫作 角色绑定。因为角色分为 Role 和 ClusterRole,所以角色绑定分为 RoleBindingClusterRoleBinding

2.1.3 主体

使用角色的用户被叫作 主体Subject)。它可以是一个用户(User)、一个用户组(Group),也可以是一个服务账号(ServiceAccount)。

角色与角色绑定存在 3 3 3 种关系:RoleBind-RoleClusterRoleBind-ClusterRoleRoleBind-ClusterRole,如下图所示。
在这里插入图片描述
下面解释了这 3 3 3 种关系的区别:

  • User A 通过 RoleBinding 绑定到了 Role 上。因此,它就拥有了命名空间 A 的操作权限。
  • 在集群 B 上有两个命名空间:命名空间 A 和命名空间 B。User B 通过 ClusterRolebinding 绑定到 ClusterRole 上,因此它拥有了集群的操作权限(即访问命名空间 A 和命名空间 B)。
  • User C 在使用 RoleBind 和 ClusterRole 进行绑定时,仅能获取当前名称空间的所有权限(即 User C 只能访问命名空间 A)。

角色角色绑定主体 之间的约束关系如下图所示。
在这里插入图片描述

2.2 实现基于角色的访问控制

下面来演示如何实现基于角色的访问控制。这里将实现 Jerry 用户只能对 mydemo 命名空间拥有读取 Pod 的权限。

创建 mydemo 命名空间,并在该命名空间中创建 Pod。

kubectl create ns mydemo
kubectl create deployment nginx --image=nginx --replicas=3 -n mydemo

查看 mydemo 命名空间中的 Pod 信息。

kubectl get pods -n mydemo

输出的信息如下:

在这里插入图片描述

生成 只有读取 Pod 权限的角色 的描述信息。

kubectl create role mydemo-pod-reader-role --verb=get,list,watch --resource=pods --dry-run -o yaml

在生成的描述信息中增加 namespace: mydemo 字段,并将描述信息保存为 mydemo-pod-reader-role.yaml 文件。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: mydemo-pod-reader-role
  namespace: mydemo
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch

创建 mydemo-pod-reader-role 角色。

kubectl apply -f mydemo-pod-reader-role.yaml

查看 mydemo 命名空间中的角色信息。

kubectl get role -n mydemo

输出的信息如下:

在这里插入图片描述

编辑 mydemo-pod-reader-rolebinding.yaml 文件进行角色绑定,将主体与角色进行绑定。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: mydemo-pod-reader-rolebinding
  namespace: mydemo
subjects:
- kind: User
  #名字大小写敏感
  name: Jerry
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  # 名字必须与Role或者ClusterRole的名字一致
  name: mydemo-pod-reader-role 
  apiGroup: rbac.authorization.k8s.io

标签:kubectl,Kubernetes,角色,访问控制,Jerry,RBAC,mydemo,鉴权
From: https://blog.csdn.net/be_racle/article/details/142023207

相关文章

  • 【Kubernetes知识点问答题】Service 发现
    目录 1.Kubernetes如何在集群的Pod之间提供网络服务?2.解释iptables和IPVS代理模式Service的区别。3.举例说明ClusterIP类型Service的用法。4.举例说明NodePort类型Service的用法。5.举例说明Headless类型Service的用法。6.详细说明Ingress......
  • 在OpenEuler(欧拉)系统上用kubeadm部署(k8s)Kubernetes集群
    一、OpenEuler(欧拉)系统简介openEuler 是开放原子开源基金会(OpenAtomFoundation)孵化及运营的开源项目;openEuler作为一个操作系统发行版平台,每两年推出一个LTS版本。该版本为企业级用户提供一个安全稳定可靠的操作系统。具体的介绍可以参考官网https://www.openeuler.org/......
  • Kubernetes 1.25 containerd 环境部署 SuperMap iManager
    超图官网目提供的Kubernetes版本为1.20版本,容器运行时为docker本次部署使用已有的Kubernetes1.25版本集群,容器运行时为containerdKubernetes,containerd部署请自行了解,本次不做介绍,下面介绍在此环境上如何部署iManager11i并创建云套件1.环境介绍虚拟机CPU......
  • Minikube Install Kubernetes v1.18.1
    文章目录简介安装工具配置代理运行集群检查集群加入rancher简介模拟客户环境,测试kubernetesv1.18.x是否可以被rancherv2.9.1纳管。安装工具docker安装InstallandSetUpkubectlonLinux安装minikube配置代理dockerproxylinuxproxy运行集群$minikubestart--drive......
  • Kubernetes 简介及部署方法
    目录1Kubernetes简介及原理1.1 应用部署方式演变1.2容器编排应用1.3kubernetes简介1.4K8S的设计架构1.5K8S各组件之间的调用关系1.6K8S的常用名词感念1.7k8S的分层架构2K8S集群环境搭建2.1k8s中容器的管理方式2.2k8s中使用的几种管......
  • kubernetes 中 利用yaml文件部署应用
    目录1用yaml文件部署应用有以下优点1.1声明式配置:1.2灵活性和可扩展性:1.3与工具集成:2资源清单参数介绍2.1获得资源帮助指令explain2.2编写示例2.2.1示例1:运行简单的单个容器pod2.2.2 示例2:运行多个容器pod2.2.3示例3:理解pod间的网络整合2.2.4......
  • 【第98课】云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第97课】云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • D20 kubernetes 工作负载资源对象-Deployment
    1、Deployment简介 Deployment是kubernetes中最常用的工作负载资源,具有以下特点和功能-副本管理:确保指定数量的pod副本在集群中运行。如果pod副本数小于期望值,则会自动创建pod;如果pod的副本数多余期望值,则删除多余的pod-滚动更新:采用滚动更新策略,逐步进行新旧版本pod的替换......
  • Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装
    七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calicoCalico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。官方文档:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart1、calico安装###在Master控......