Kubernetes控制平面组件:API Server Webhook 授权机制 详解

news2025/4/16 17:01:57

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:etcd常用配置参数
    • Kubernetes控制平面组件:etcd高可用集群搭建
    • Kubernetes控制平面组件:etcd高可用解决方案
    • Kubernetes控制平面组件:Kubernetes如何使用etcd
    • Kubernetes控制平面组件:API Server详解(一)
    • Kubernetes控制平面组件:APIServer 基于 X509 证书的认证机制
    • Kubernetes控制平面组件:APIServer 基于 静态Token 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 引导Token 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 ServiceAccount 的认证机制
    • Kubernetes控制平面组件:APIServer 基于 OpenID 的认证机制详解
    • Kubernetes控制平面组件:APIServer 基于 Webhook Toeken令牌 的认证机制详解
    • Kubernetes控制平面组件:APIServer 基于匿名请求的认证机制详解
    • kubectl 和 kubeconfig 基本原理
    • kubeadm 升级 k8s集群 1.17到1.20
    • Kubernetes常见问题解答
    • 查看云机器的一些常用配置

本文主要对kubernetes的控制面组件API Server 授权机制中的 Webhook 授权机制进行详细介绍,涵盖Webhook机制基础概念、设计理念、实现原理、授权流程、参数配置等

  • 希望大家多多 点赞 关注 评论 收藏,作者会更有动力编写技术文章

1.基础概念

1.1.Webhook 机制定义

  • Webhook 是 Kubernetes 的扩展机制之一,允许将授权决策委托给外部 HTTP 服务。
  • 当 API Server 收到资源操作请求时,会将请求转发至预先配置的外部 Webhook 服务进行权限验证,并根据其返回结果决定是否允许该操作。

1.2.核心设计理念

  • 解耦性:将授权逻辑从 Kubernetes 核心组件中剥离,通过外部服务实现灵活的策略管理。
  • 动态策略:无需重启 API Server 即可动态更新授权规则,适应快速变化的业务需求。
  • 多租户支持:结合企业级身份认证系统(如 LDAP、OAuth)实现细粒度权限控制。

1.3.与 RBAC 的区别

  • RBAC:基于角色和静态策略,适用于固定权限模型。
  • Webhook:支持动态、外部化策略,适用于复杂场景(如跨系统鉴权、自定义规则)。

1.4.Webhook认证 与 Webhook授权 异同辨析

  • 相同点:
    • 设计理念相同。认证/授权 均有Webhook的扩展机制,都是允许将当前请求发送到第三方服务进行认证/授权,apiserver 根据返回结果决定是否通过 认证/授权
    • 使用方式类似。都是使用kubeconfig格式指定第三方服务的url、cert等信息,供apiserver与之交互使用
  • 不同点:
    • apiserver配置文件参数不同。在apiserver的参数中需要指定第三方服务的配置文件,认证参数:--authentication-token-webhook-config-file,授权参数:--authorization-webhook-config-file
    • 调用时机不同。在API Server处理链路中,认证在前,授权在后。

1.5.API Server启用webhook授权机制

在这里插入图片描述

  • --authorization-mode=Webhook
  • 使用 Webhook 授权机制需显式启用 authorization.k8s.io/v1beta1 API 扩展组:--runtime-config=authorization.k8s.io/v1beta1=true

2.实现原理

2.1 核心组件交互

  • API Server:作为请求入口,负责接收客户端请求,在合适时机将请求封装为 SubjectAccessReview 结构转发至 Webhook
  • Webhook 服务:webhook服务,接收apiserver的 SubjectAccessReview 对象,可以自行处理授权,也可以作为代理调用第三方授权服务,将返回结果封装后将alloweddenied 返回给apiserver。
  • 第三方授权服务:独立的第三方授权服务,一般为企业独立的授权模块,可以通过webhook代理插入apiserver。

如果 第三方授权服务 本身就可以处理 SubjectAccessReview 请求,那也可以省略中间的webhook代理服务

2.2 请求处理流程

  1. 请求接收:客户端发起 API 请求(如 kubectl create)。
  2. 认证与预检:完成 TLS 握手和身份认证(如 ServiceAccount Token)。
  3. Webhook 匹配:根据资源配置(rules)判断是否触发 Webhook。
  4. 请求转发:API Server 将请求封装为 SubjectAccessReview JSON 对象,通过 HTTPS 发送至 Webhook 代理服务。
  5. 策略决策:Webhook 解析请求属性(用户、资源、操作),执行自定义逻辑(如调用外部权限系统)。
  6. 响应处理:返回 allowed: true/false,若拒绝需附带原因(reason)。

3.参数配置

可以直接看官方文档:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/webhook/

3.1.配置文件格式

  • Webhook 模式需要一个 HTTP 配置文件,通过 --authorization-webhook-config-file=SOME_FILENAME 的参数声明。
  • 配置文件的格式使用 kubeconfig。 在该文件中,“users” 代表着 API 服务器的 Webhook,而 “cluster” 代表着远程服务。
  • 使用 HTTPS 客户端认证的配置例子:
# Kubernetes API 版本
apiVersion: v1
# API 对象种类
kind: Config
# clusters 代表远程服务
clusters:
  - name: name-of-remote-authz-service
    cluster:
      # 对远程服务进行身份认证的 CA
      certificate-authority: /path/to/ca.pem
      # 远程服务的查询 URL。必须使用 'https'。不可以包含参数。
      server: https://authz.example.com/authorize

# users 代表 API 服务器的 webhook 配置
users:
  - name: name-of-api-server
    user:
      client-certificate: /path/to/cert.pem # 要使用的 webhook 插件的证书
      client-key: /path/to/key.pem          # 与证书匹配的密钥

# kubeconfig 文件必须有 context。需要提供一个给 API 服务器。
current-context: webhook
contexts:
- context:
    cluster: name-of-remote-authz-service
    user: name-of-api-server
  name: webhook

3.2.请求载荷

  • 在做认证决策时,API 服务器会 POST 一个 JSON 序列化的 authorization.k8s.io/v1beta1 SubjectAccessReview 对象来描述这个动作。
  • 这个对象包含了描述用户请求的字段,同时也包含了需要被访问资源或请求特征的具体信息。
// 请求SubjectAccessReview:资源类
{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "spec": {
    "resourceAttributes": {
      "namespace": "kittensandponies",
      "verb": "get",
      "group": "unicorn.example.org",
      "resource": "pods"
    },
    "user": "jane",
    "group": [
      "group1",
      "group2"
    ]
  }
}

// 请求SubjectAccessReview:非资源类
{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "spec": {
    "nonResourceAttributes": {
      "path": "/debug",
      "verb": "get"
    },
    "user": "jane",
    "group": [
      "group1",
      "group2"
    ]
  }
}

3.3.请求响应

// 响应:通过授权
{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "status": {
    "allowed": true
  }
}

// 响应:未通过授权,但未显式拒绝,如果还有其他授权服务,会继续调用
{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "status": {
    "allowed": false,
    "reason": "user does not have read access to the namespace"
  }
}

// 响应:未通过授权,并且显式拒绝,如果还有其他授权服务,不会再继续调用
{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "status": {
    "allowed": false,
    "denied": true,
    "reason": "user does not have read access to the namespace"
  }
}

4.实操案例

  • 可以参考 Kubernetes控制平面组件:APIServer 基于 Webhook Toeken令牌 的认证机制详解 中的实操案例,认证和授权的webhook使用方式基本一致,仅仅是apiserver的配置文件参数不同而已

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python爬虫】简单案例介绍2

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍1-CSDN博客 目录 跨页 3.2 环境准备 跨页 当对单个页面的结构有了清晰的认识并成功提取数据后,接下来就需要考虑页面之间的跨页问题。此时我们便迎来了下一个关键任务:如何实现跨页爬取&#xf…

【神经网络】python实现神经网络(四)——误差反向传播的基础理论

一.反向传播 本章将介绍能够高效计算权重参数的梯度的方法——误差反向传播法,这里简单介绍一下什么是反向传播,加入有个函数y = f(x),那么它的反向传播为图下这个样子: 反向传播的计算顺序是,将输入信号E乘以节点的局部导数,然后将结果传递给下一个节点。这里所…

I/O进程(全)

I/O 一、标准IO 1.概念 在C库中定义的一组用于输入输出的函数 2.特点 (1).通过缓冲机制减少系统调用,提高效率 (2.)围绕流进行操作,流用FILE *来描述(3).标准IO默认打开了三个流,stdin(标准输入)、stdout(标…

vue2使用ezuikit-js播放萤石视频

需求:需要在大屏上播放萤石视频,用到官方的ezuikit-js插件实现,并实现视频播放切换功能。有个问题至今没有解决,就是萤石视频的宽高是固定的,不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…

【笔试强训day19】

目录 第一题:小易的升级之路 描述 输入描述: 输出描述: 输入: 输出: 第二题:礼物的最大价值 描述 输入: 返回值: 备注: 第三题:对称之美 题目描述…

STM32电机库 电机控制特性

ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…

【Linux】42.网络基础(2.4)

文章目录 2.3 TCP协议2.3.10 拥塞控制2.3.11 延迟应答2.3.12 捎带应答2.3.13 面向字节流2.3.14 粘包问题2.3.15 TCP异常情况2.3.16 TCP小结2.3.17 基于TCP应用层协议 2.3 TCP协议 2.3.10 拥塞控制 虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚…

SPI接口DAC设备驱动与应用程序开发

本文章相关专栏往期内容,SPI子系统专栏: SPI通信协议与Linux设备驱动框架解析SPI传输与驱动框架的实现spidev.c:SPI设备驱动的核心实现逻辑 PCI/PCIe子系统专栏: 专栏地址:PCI/PCIe子系统PCIe设备MSI/MSI-X中断源码分析…

第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解

题面链接Htlang/2025lqb_python_b 个人觉得今年这套题整体比往年要简单许多,但是G题想简单了出大问题,预估50101015120860,道阻且长,再接再厉 代码仅供学习参考,满分为赛后洛谷中的测评,蓝桥杯官方测评待…

旧版 VMware 虚拟机迁移至 KVM 平台-案例2

项目背景 需将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,具体要求如下: 格式转换:将 VMDK 转换为 QCOW2 格式。磁盘扩容:将原 40GB 磁盘扩展至 60GB。密码重置:修改 aiden 用户…

若依代码生成器原理velocity模板引擎(自用)

1.源码分析 代码生成器:导入表结构(预览、编辑、删除、同步)、生成前后端代码 代码生成器表结构说明: 若依提供了两张核心表来存储导入的业务表信息: gen_table:存储业务表的基本信息 ,它对应于配置代码基本信息和生成信息的页…

OpenCV直方图均衡化全面解析:从灰度到彩色图像的增强技术

目录 一、直方图均衡化基础:原理与核心思想 二、彩色图像的直方图均衡化:挑战与解决方案 三、进阶技巧与注意事项 四、应用场景与典型案 一、直方图均衡化基础:原理与核心思想 1. 直方图的本质与作用 直方图是图像像素强度分布的统计图表…

Web前端之Vue+Element实现表格动态复杂的合并行功能、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行方法&#xff08;写死&#xff09;动态合并行&#xff0c;行数计算方法当太合并行&#xff0c;合并方法方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <e…

【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup&#xff0c;目的是为了进一步提…

嵌入式进阶:如何选择合适的开发平台?

随着现代工业、物联网以及人工智能技术的迅速发展&#xff0c;嵌入式系统已经由简单的控制器向复杂的高性能系统迈进。从传统家电到智能机器人、从自动驾驶汽车到工业自动化&#xff0c;每一项应用都对嵌入式系统的响应速度、运行稳定性和能耗管理提出了更高要求。在这种背景下…

酶动力学参数预测,瓶颈识别……中科院深圳先进技术研究院罗小舟分享AI在酶领域的创新应用

蛋白质&#xff0c;作为生命的基石&#xff0c;在生命活动中发挥着关键作用&#xff0c;其结构和功能的研究&#xff0c;对创新药物研发、合成生物学、酶制剂生产等领域&#xff0c;有着极其重要的意义。但传统蛋白质设计面临诸多难题&#xff0c;蛋白质结构复杂&#xff0c;序…

kafka4.0浅尝辄止

最近工作中接触消息队列比较多&#xff0c;前几周又看到kafka4.0发布&#xff0c;故写一篇博客对消息队列做一个复盘。 目录 消息队列对比1. Apache Kafka 4.02. RabbitMQ3. RocketMQ4. ActiveMQ5. Apache Pulsar6. NSQ kafka4.0鲜明的新特性Java 版本要求升级API 更新与精简移…

数据库原理及应用mysql版陈业斌实验三

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 实验三多表查询 1.实验数据如下 student 表&#xff08;学生表&#…

OpenHarmony - 小型系统内核(LiteOS-A)(二)

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;二&#xff09; 三、基础内核 3.1、中断及异常处理 基本概念 中断是指出现需要时&#xff0c;CPU暂停执行当前程序&#xff0c;转而执行新程序的过程。即在程序运行过程中&#xff0c;出现了一个必须…

数字化引擎再升级:小匠物联十周年庆典与全链路创新实践

4月11日&#xff0c;浙江宁波的小匠物联十周年庆典拉开帷幕。本次活动以“拾阶而上&#xff0c;智创未来”为主题&#xff0c;从全员签到、心愿书写&#xff0c;到董事长致辞、切蛋糕及全体合影&#xff0c;每一个环节都精心设计&#xff0c;展现出企业在家用物联网领域的卓越技…