Kubernetes operator系列:webhook 知识学习

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

  • 本文是 Kubernetes operator学习 系列文章,本节会对 kubernetes webhook 知识进行学习
    • 本文的所有代码,都存储于github代码库:https://github.com/graham924/share-code-operator-study/tree/main/cronJob-operator
    • 希望各位大佬们,点点star,大家的鼓励是我更新的动力
  • Kubernetes operator学习系列 快捷链接
    • Kubernetes operator系列:client-go篇
    • Kubernetes operator系列:CRD篇
    • Kubernetes operator系列:code-generator 篇
    • Kubernetes operator系列:controller-tools 篇
    • Kubernetes operator系列:api 和 apimachinery 篇
    • Kubernetes operator系列:CRD控制器 开发实战篇
    • Kubernetes operator系列:kubebuilder 的安装及简单使用 篇
    • Kubernetes operator系列:kubebuilder 实战演练之deploy-image插件的使用
    • Kubernetes operator系列:webhook 知识学习
    • Kubernetes operator系列:kubebuilder 实战演练 之 自定义CronJob
    • Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob
    • Kubernetes operator系列:零散知识篇

1.kubernetes Admission Control 机制

1.1.Admission Control准入控制是什么

  • kubernetes ApiServer 收到一个请求,在将数据持久化到etcd之前,会依次经过:Authentication认证、Authorization鉴权、Admission Control准入控制
    • Authentication:验证用户或实体的身份,并确保其声称的身份是有效的
    • Authorization:确保当前用户具有对其 访问资源 的访问权限
    • Admission Control:对请求本身进行 验证、转换 和 审查
      在这里插入图片描述

1.2.Admission Control 插件机制

  • Admission Control 是由一系列插件组成的,apiserver的请求,需要通过所有插件,才能最终存储到etcd
  • api server 启动时,使用参数控制插件的开启
    • kubernetes 1.10及以上版本,apiserver使用 参数 --enable-admission-plugins 控制插件启动
    • kubernetes 1.9及以下版本,apiserver使用 参数 --admission-control 控制插件启动
  • 我们今天要学习的webhook,涉及到 Admission Control 的两个插件:MutatingAdmissionWebhook、ValidatingAdmissionWebhook,这两个插件都是默认开启的,我们无需再去更改apiserver启动参数重启

2.Webhook介绍

2.1.webhook是什么

  • 顾名思义,webhook就是 网络钩子,在特殊条件下自动触发执行。
  • 在kubernetes中,通过使用 webhook,用户可以编写自定义的业务逻辑,并将其部署为独立的 HTTP 服务,然后将其注册到 Kubernetes 中。
    • Kubernetes 将根据配置,将到达 apiserver 的请求发送到相应的 webhook 服务,并根据 webhook 返回的结果来决定是否允许请求继续进行,以及是否需要对请求进行修改。

2.2.kubernetes webhook的三种类型

  • 在kubernetes中,webhook共分为三种
    • admission webhook
      • 属于admission control插件,在请求进入admission control插件链时,依次调用
    • authorization webhook
      • 对 API Server 中的请求进行授权判断
    • CRD conversion webhook
      • 用于对 多版本的crd 资源,进行版本间数据转换
  • 其中,controller-runtime 支持 admission webhookCRD conversion webhook 两种
    • 我们进行Operator开发,也只要是涉及到这两种webhook

2.3.为webhook提供证书

  • 为什么需要为webhook提供证书
    • admission webhookCRD conversion webhook,api Server 通过 https post 访问 webhook server, 因此 webhook server 必须要监听在 https 协议上
    • 因此 这三种 webhook 都需要做好证书配置,推荐使用 cert-manager 为Webhook提供证书
  • 安装cert-manager
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.yaml	
    
  • 查看安装结果
    [root@localhost cert-manager]# kubectl get pod -n cert-manager
    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-7fb948f468-r5dj2              1/1     Running   0          142m
    cert-manager-cainjector-75c5fc965c-shtx6   1/1     Running   0          142m
    cert-manager-webhook-757c9d4bb7-vhgt7      1/1     Running   0          142m[root@localhost cert-manager]# kubectl get ValidatingWebhookConfiguration
    NAME                   WEBHOOKS   AGE
    cert-manager-webhook   1          143m[root@localhost cert-manager]# kubectl get MutatingWebhookConfiguration
    NAME                   WEBHOOKS   AGE
    cert-manager-webhook   1          143m
    

3.admission webhook

  • admission webhook 包括两个阶段:

    • MutatingAdmissionWebhook:请求修改阶段,可以对 请求资源的元数据 进行修改,比如为一些没有值的字段设置默认值等
    • ValidatingAdmissionWebhook:请求验证阶段,不会再修改 资源的数据,而是对资源字段数据进行一些检验,比如 资源metadata.name长度不可超过52个字符等
  • 二者调用顺序

    • 从下图可以看出,MutatingAdmissionWebhook 阶段在前,ValidatingAdmissionWebhook 阶段在后
      在这里插入图片描述
  • 开发 MutatingAdmissionWebhook、ValidatingAdmissionWebhook

    • MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 其实就是一个web服务,可以通过 https 访问一些路径,实现修改和验证。所以自行开发也可以
      • 自行开发webhook实例:kubernetes的webhook开发(一篇搭好开发架构)
    • kubebuilder 可以通过命令,自动帮我们生成 二者所需要的所有内容,我们只需要编写业务逻辑即可
      • kubebuilder 开发webhook的使用方法,可以去:
      • Kubernetes operator系列:kubebuilder 实战演练 之 自定义CronJob
      • Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob
      • 使用kubebuilder开发kubernetes核心资源的webhook

4.CRD conversion webhook

  • 除了admission webhook,我们开发Operator的时候,还会用到一种webhook,即 CRD conversion webhook
  • 当创建了一个多版本的 CRD API,要求多个版本之间能够相互转换,相互兼容,就需要额外启动一个服务,暴露转换功能接口,供apiserver调用
  • CRD conversion webhook可以在kubernetes集群外启动,也可以在集群内启动,只需要做好证书配置,让apiserver能够正确访问即可
  • conversion webhook具体的开发方法,见下面的文章
    • Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《OWASP TOP10漏洞》

0x01 弱口令 产生原因 与个人习惯和安全意识相关,为了避免忘记密码,使用一个非常容易记住 的密码,或者是直接采用系统的默认密码等。 危害 通过弱口令,攻击者可以进入后台修改资料,进入金融系统盗取钱财&#xff0…

Unity Timeline学习笔记(2) - PlayableTrack

PlayableTrack 是可自定义播放的轨道。我们可以通过进入轨道后调用自己的函数方法,使用起来也是比较顺手的。 添加轨道 我们点击加号添加 这样就有一个空轨道了,然后我们创建两个测试脚本。 添加脚本 分别是Playable Behaviour和PlayableAsset脚本。…

202112 CSP认证 | 登机牌条码

登机牌条码 这个题的难度相比于神经脉冲网络感觉是往两个方向,该题没有太多的注重时间和空间的优化,重难点在于实现矩阵除法,也就是算法逻辑。 借鉴了这个链接实现:登机牌条码 详细图解 链接详细讲述了如何实现矩阵除法以及矩…

3分钟阿里云数据库购买、数据库创建和连接教程

阿里云数据库怎么使用?阿里云服务器网aliyunfuwuqi.com整理阿里云数据库从购买到使用全流程,阿里云支持MySQL、SQL Server、PostgreSQL和MariaDB等数据库引擎,阿里云数据库具有高可用、高容灾特性,阿里云提供数据库备份、恢复、迁…

快递查询轻松搞定:一键查询,物流信息尽在掌握

在快节奏的现代生活中,快递已成为我们日常不可或缺的一部分。但你是否曾因为繁多的快递单号而烦恼,想要轻松掌握每一个包裹的物流信息?现在,一款名为“快递批量查询高手”的神器应运而生,它将帮助你轻松搞定快递查询&a…

语义分割前言

1.常见数据集 1.1PASCAL VOC 其标注图片为单通道图像,其0~255像素值为其取值范围,背景为0,目标区域内根据目标的类别索引信息进行填充。 1.2MS COCO 其标注图像的标注文件为坐标信息。 官网有给出一个关于标注文件的格式说明&#xff0…

计算机毕业设计-springboot+vue前后端分离电竞社交平台管理系统部分成果分享

4.5系统结构设计 本系统使用的角色主要有系统管理员、顾客、接单员,本系统为后台管理系统,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统,查看后台首页,模块管理(顾客信息&am…

SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决 ⏱️ 创作时间&a…

位运算#蓝桥杯

位运算#蓝桥杯 文章目录 位运算#蓝桥杯1、小蓝学位运算2、异或森林3、位移4、笨笨的机器人5、博弈论 1、小蓝学位运算 #include<bits/stdc.h> using namespace std; using LL long long; const LL N 1e97; template<int kcz> struct ModInt { #define T (*this)…

小程序(H5)连接微信公众号

报错信息 配自定义菜单 微信公众号没有配“白名单” 配业务域名

echats柱状图\折线图:数量级自动调整;动态设置多维度

通过构造echarts返回体EchartsData.class&#xff0c;在返回体内开发功能代码&#xff0c;实现echarts数据的改动。 特点&#xff1a; 1、y轴数据的数量级自动调整&#xff0c;使图表变化趋势更明显&#xff1b; 2、支持多维度数据【可以有1-N多个维度】 // EchartsData对象构…

Yolo系列算法-理论部分-YOLOv5

0. 写在前面 YOLO系列博客&#xff0c;紧接上一篇Yolo系列算法-理论部分-YOLOv4-CSDN博客 1. YOLOv5-美而全的产品 YOLOv5的诞生&#xff0c;直接将目标检测算法向终局推进&#xff0c;Ultralytics团队在COCO数据集上预训练的目标检测架构和模型直接开源&#xff0c;其中包含了…