k8s--基础--23.3--认证-授权-准入控制--授权

2023-11-11

k8s–基础–23.3–认证-授权-准入控制–授权


1、介绍

Kubernetes的授权是基于插件形式的,其常用的授权插件有以下几种
1. Node(节点认证)
2. ABAC(基于属性的访问控制)
3. RBAC(基于角色的访问控制)
4. Webhook(基于http回调机制的访问控制)

1.1、什么是RBAC(基于角色的访问控制)?

  1. 就是给用户(Users)授予一个角色(Role),那么这个用户就有这个角色的权限。
  2. Role是有名称空间的限制的

在这里插入图片描述

1.1、RBAC工作逻辑

  1. 给用户(Users)授予一个角色(Role),那么这个用户就有这个角色的权限。
  2. 授权方式有2种
    1. 名称空间级别 的授权
    2. 集群级别 的授权

1.1.1、名称空间级别 的授权

如果通过rolebinding绑定role,只能对rolebingding所在的名称空间的资源有权限,上图user1这个用户绑定到role1上,只对role1这个名称空间的资源有权限,对其他名称空间资源没有权限,这个属于名称空间级别的授权。

1.1.2、集群级别的授权机制

  1. 集群角色(ClusterRole):可以认为是角色组的概念,就是一组角色
  2. 定义一个集群角色(ClusterRole),对集群内的所有资源都有可操作的权限
    1. 将User2通过ClusterRoleBinding到ClusterRole,使User2拥有集群的操作权限
  3. 对资源的访问,没有名称空间的限制

1.2、Role、RoleBinding、ClusterRole和ClusterRoleBinding的关系如下图:

在这里插入图片描述

1.2.1、通过上图可以看到,3种绑定

  1. 用户通过 rolebinding绑定role
  2. 用户通过 clusterrolebinding绑定clusterrole
  3. 用户通过 rolebinding绑定clusterrole

1.4、ClusterRole的好处

  1. 假如有6个名称空间,每个名称空间的用户都需要对自己的名称空间有管理员权限,那么需要定义6个role和rolebinding,然后依次绑定,如果名称空间更多,我们需要定义更多的role,这个是很麻烦的,所以我们引入clusterrole,定义一个clusterrole,对clusterrole授予所有权限,然后用户通过rolebinding绑定到clusterrole,就会拥有自己名称空间的管理员权限了,这样就减少了很多工作量。
  2. 注:RoleBinding仅仅对当前名称空间有对应的权限。

2、授权机制

  1. k8s中的授权策略也支持开启多个授权插件,只要一个验证通过即可。
  2. k8s授权处理主要是根据以下请求属性:
    1. user, group, extra
    2. API、请求方法(如get、post、update、patch和delete)和请求路径(如/api)
    3. 请求资源和子资源
    4. Namespace
    5. API Group
  3. k8s支持的授权模式
    1. Node Authorization
    2. ABAC Authorization
    3. RBAC Authorization
    4. Webhook Authorization

2.1、Node Authorization

通过配合NodeRestriction control准入控制插件来限制kubelet访问node,endpoint、pod、service以及secret、configmap、PV和PVC等相关的资源。

2.1.1、配置方式

–authorization-mode=Node,RBAC –admission-control=…,NodeRestriction,…

2.2、ABAC Authorization

这种模式的实现相对比较生硬,就是在master node保存一份policy文件,指定不同用户(或用户组)对不同资源的访问权限,当修改该文件后,需要重启apiserver,跟openstack 的ABAC类似。policy文件的格式如下:


# Alice can do anything to all resources:
{
    "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
    "kind": "Policy",
    "spec": {
        "user": "alice",
        "namespace": "*",
        "resource": "*",
        "apiGroup": "*"
    }
}
# Kubelet can read any pods:
{
    "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
    "kind": "Policy",
    "spec": {
        "user": "kubelet",
        "namespace": "*",
        "resource": "pods",
        "readonly": true
    }
}

# Kubelet can read and write events:
{
    "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
    "kind": "Policy",
    "spec": {
        "user": "kubelet",
        "namespace": "*",
        "resource": "events"
    }
}

2.2.1、使用这种模式需要配置参数

–authorization-mode=ABAC –authorization-policy-file=SOME_FILENAME。

2.3、RBAC Authorization

  1. 通过启动参数使用RBAC:–authorization-mode=RBAC
  2. 使用kubeadm安装k8s默认会enabled。
  3. BAC API定义了四个资源对象用于描述RBAC中用户和资源之间的连接权限
    1. Role
    2. ClusterRole
    3. RoleBinding
    4. ClusterRoleBinding
  4. Role是定义在某个Namespace下的资源,在这个具体的Namespace下使用。
    1. ClusterRole与Role相似,只是ClusterRole是整个集群范围内使用的。
    2. RoleBinding把Role绑定到账户主体Subject,让Subject继承Role所在namespace下的权限。
    3. ClusterRoleBinding把ClusterRole绑定到Subject,让Subject集成ClusterRole在整个集群中的权限。
  5. API Server已经创建一系列ClusterRole和ClusterRoleBinding。
    1. 这些资源对象中名称以system:开头的,表示这个资源对象属于Kubernetes系统基础设施,也就说RBAC默认的集群角色已经完成足够的覆盖,让集群可以完全在 RBAC的管理下运行。
    2. 修改这些资源对象可能会引起未知的后果,例如
      1. 对于system:node这个ClusterRole定义了kubelet进程的权限,如果这个角色被修改,可能导致kubelet无法工作。

2.3.1、通过命令获取对应的Role相关资源进行增删改查

kubectl get roles --all-namespaces

kubectl get ClusterRoles

kubectl get rolebinding --all-namespaces

kubectl get clusterrolebinding

内容

[root@master1 test5]# kubectl get roles --all-namespaces
NAMESPACE              NAME                                             CREATED AT
kube-public            kubeadm:bootstrap-signer-clusterinfo             2022-03-19T02:06:49Z
kube-public            system:controller:bootstrap-signer               2022-03-19T02:06:47Z
kube-system            extension-apiserver-authentication-reader        2022-03-19T02:06:47Z
kube-system            kube-proxy                                       2022-03-19T02:06:49Z
kube-system            kubeadm:kubelet-config-1.18                      2022-03-19T02:06:47Z
kube-system            kubeadm:nodes-kubeadm-config                     2022-03-19T02:06:47Z
kube-system            system::leader-locking-kube-controller-manager   2022-03-19T02:06:47Z
kube-system            system::leader-locking-kube-scheduler            2022-03-19T02:06:47Z
kube-system            system:controller:bootstrap-signer               2022-03-19T02:06:47Z
kube-system            system:controller:cloud-provider                 2022-03-19T02:06:47Z
kube-system            system:controller:token-cleaner                  2022-03-19T02:06:47Z
kubernetes-dashboard   kubernetes-dashboard                             2022-03-19T13:40:13Z


2.4、Webhook Authorization

  1. 用户在外部提供 HTTPS 授权服务,然后配置 apiserver 调用该服务去进行授权。
  2. 参考官方文档
    1. https://kubernetes.io/docs/reference/access-authn-authz/webhook/

2.4.1、apiserver配置参数:

–authorization-webhook-config-file=SOME_FILENAME

3、kubernetes 中的认证机制

  1. kubernetes 支持多种认证机制,可以配置成多个认证体制共存,这样,只要有一个认证通过,这个request就认证通过了。下面介绍官网列举的几种常见认证机制
  2. 参考资料:https://kubernetes.io/docs/reference/access-authn-authz/authentication/

3.1、Service Account Tokens

  1. Service Account Token 是一种比较特殊的认证机制
  2. 适用于上文中提到的pod内部服务需要访问apiserver的认证情况
  3. 默认enabled。

3.1.1、启动参数文件

–service-account-key-file=/etc/kubernetes/pki/apiserver-key.pem
  1. 有启动参数文件,就使用启动参数文件
  2. 没有启动参数文件,默认使用–tls-private-key-file的值,即API Server的私钥。

3.1.2、验证

# 获取所有名称空间的sa账号
kubectl get serviceaccount --all-namespaces

在这里插入图片描述

可以看到k8s集群为所有的namespace创建了一个默认的service account,利用命令describe会发现service account只是关联了一个secret作为token,也就是service-account-token。


kubectl describe serviceaccount/default -n kube-system

在这里插入图片描述


kubectl get secret default-token-7xqxg -o yaml -n kube-system

在这里插入图片描述

可以看到service-account-token的secret资源包含的数据有三部分:

  1. ca.crt:

    1. API Server的CA公钥证书
    2. 用于Pod中的Process对API Server的服务端数字证书进行校验时使用的;
  2. namespace:

    1. Secret所在namespace的值的base64编码: echo -n “kube-system”|base64
    2. 在这里插入图片描述
  3. token:

    1. 该token就是由service-account-key-file的值签署(sign)生成。
    2. 这种认证方式主要由k8s集群自己管理,用户用到的情况比较少。
    3. 我们创建一个pod时,默认就会将该namespace对应的默认service account token mount到Pod中,所以无需我们操作便可以直接与apiserver通信

3.2、OpenID Connect Tokens

类似 OAuth2的认证方式,大致认证过程如下:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s--基础--23.3--认证-授权-准入控制--授权 的相关文章

随机推荐

  • SQL——DML语句

    DML Data Manipulation Language 一 数据的插入 语法 单行插入 INSERT INTO 表名 字段名1 字段名2 values 值1 值2 多行插入 INSERT INTO 表名 字段名1 字段名2 value
  • 数据库之--count/distinct/group by的用法总结

    一 count distinct group by的用法 1 count 函数是用来统计表中记录的一个函数 返回匹配条件的行数 不去重 2 count 语法 1 count 包括所有列 返回表中的记录数 相当于统计表的行数 在统计结果的时候
  • 已解决cython_bbox安装出现的问题

    为了跑FairMOT代码 配置环境时遇到了该问题 我已经安装了cython 然后下载了压缩包 解压后打开cython bbox 0 1 3文件夹 打开文件setup py 将extra compile args Wno cpp 修改为ext
  • python-sqlalchemy中设置autocommit

    这个只需要在连接数据库的时候加上即可 SQLALCHEMY DATABASE URI mysql pymysql username passwrod ip prot database charset utf8 autocommit true
  • Linux查看日志命令,压缩日志不解压直接查看

    日常工作中经常要在linux服务器上查看日志定位问题 本文简单总结下常用查看日志的命令 监控日志命令 tail f file log tailf file log 上一个命令的快捷键 但是有些系统默认没有 查看日志命令 这个命令其实也可以查
  • 数学建模 优质的信息检索渠道和工具

    文章目录 一 前言 二 主要内容 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 优质的信息检索渠道和工具对数学建模比赛获奖有着重要的影响 以下是从理论上分析这一影响的几个主要方面 知识获取
  • vs 2019输出中文乱码解决

    参考 http t csdn cn YDG6B
  • 股市中的内盘、外盘、跌幅、震幅、现手、总手、换手是什么意思?

    外盘即买盘 内盘即卖盘 内盘即卖盘要卖掉 有人买就以这个成交价设为买入价 外盘即买盘要买进 有人卖就以这个成交价设为卖出价 总手就是成交量 1个交易日的买卖总量 即等于外盘 内盘 成交量 总手 量比 在查看分时走势图时候 可根据右键菜单选择
  • hadoop3.0.3搭建与入门(添加删除;调度-节点)

    hadoop版本 apache cloudera CDH版 Hortonworks HDP版 国内对CDH用的多 一般用3 0 单机版 scp hadoop 3 0 3 tar gz jdk 8u181 linux x64 tar gz s
  • 递归算法(二分查找)

    递归也算循环的一种 递归 你打开面前这扇门 看到屋里面还有一扇门 你走过去 发现手中的钥匙还可以打开它 你推开门 发现里面还有一扇门 你继续打开它 若干次之后 你打开面前的门后 发现只有一间屋子 没有门了 然后 你开始原路返回 每走回一间屋
  • RNN循环神经网络的Matlab模拟和训练

    RNN循环神经网络的Matlab模拟和训练 循环神经网络 RNN 是一种适用于序列数据的神经网络 RNN 在处理时间序列数据方面非常适用 如自然语言处理 股票价格预测等 本文将介绍如何使用 Matlab 来进行 RNN 的模拟和训练 在 M
  • 大O表示法及旅行者问题

    算法的运行时间 运行时间增速 不同算法随规模的增大而增大的速度不同 我们需要比较不同算法的运行时间的增速 大O表示法 类比数据结构中的时间复杂度 比较操作数 其体现了算法运行时间的增速 这种表示法体现了算法在最糟情况下的运行时间 这不就是时
  • 全新升级!讯飞星火认知大模型V2.0,你准备好了吗?

    前言 AI大模型正在全球掀起新一轮的技术革命与商业浪潮 从技术突破到应用落地 加速改变着我们的生活与产业 依托通用人工智能领域的持续深耕和系统性创新 科大讯飞于5月6日正式发布星火认知大模型 并于6月9日迅速完成迭代升级 受到用户持续好评
  • 软件测试环境的搭建

    前言 测试环境是QA开展测试工作的前置条件 稳定和可控的测试环境 可以使测试人员在执行测试用例时无需花费额外的时间去维护 有些公司运维或者研发部门会帮忙准备好测试环境 但是QA如果一味依赖其他部门 会局限测试工作的开展 一 什么是测试环境
  • 【PASS】析因设计样本量计算

    b站视频 working
  • 软件设计和硬件开发 部分学习网站

    1 单片机教程网 http www 51hei com 2 博客园 https www cnblogs com 3 各种程序语言基础知识 https www runoob com cprogramming c scope rules htm
  • Linux运维基础--常见命令

    Linux运维基础 常见命令 linux的发行版本介绍 Linux 内核 kernel 版本主要有 4 个系列 分别为 Linux kernel 2 2 Linux kernel 2 4 Linux kernel 2 6 Linux ker
  • 贪心——字典序最小问题

    https vjudge net problem POJ 3617 题目简单理解就是 给定长度为N的字符串为S 要构造一个长度为N的字符串T 起初 T 是一个空串 随后反复进行下列任意操作 从S的头部删除一个字符串 加到T的尾部 从S的尾部
  • 教与学(TlBO)算法路径规划应用

    是一种基于群体的启发式优化算法 不需要任何算法特定参数 这种方法模拟了传统的课堂教学过程 整个优化过程包括教师阶段和学习者阶段 在教师阶段 每个学生都向最优秀的个体进行学习 在学习阶段 每个学生都以随机的方式向其他学生学习
  • k8s--基础--23.3--认证-授权-准入控制--授权

    k8s 基础 23 3 认证 授权 准入控制 授权 1 介绍 Kubernetes的授权是基于插件形式的 其常用的授权插件有以下几种 1 Node 节点认证 2 ABAC 基于属性的访问控制 3 RBAC 基于角色的访问控制 4 Webho