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.mzph.cn/news/749642.shtml

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

相关文章

免费接口调用 招标信息自动抽取|招标信息|招标数据解析接口

一、开源项目介绍 一款多模态AI能力引擎,专注于提供自然语言处理(NLP)、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大,支持本地化部署,并鼓励用户体验和开发者共同完善&#xf…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章,就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法,选用合适的测试工具和被测系统,实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

软件实例,餐厅酒水寄存管理系统软件,酒水寄存登记表软件操作教程

软件实例,餐厅酒水寄存管理系统软件,酒水寄存登记表软件操作教程 一、前言 以下软件操作以 佳易王酒水寄存管理系统软件V16.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、酒水寄存管理系统软件可以管理多个品类的物…

AI健身教练-引体向上-俯卧撑计数-仰卧起坐姿态估计-康复训练姿态识别-姿态矫正

在AI健身应用中,通过关键点检测技术可以实现对用户动作的精准捕捉和分析,从而进行统计计数和规范性姿态识别。 统计计数:比如在做瑜伽、健身操等运动时,系统可以通过对人体关键点(如手部、脚部、关节等)的…

复习 --- windows 上安装 git,使用相关命令

文章目录 很少使用windows的git工具,这次借助这个任务,记录下使用过程,其他的等有空在整理。 其中,还使用了浏览器的AI小助手,复习了git相关的命令:图片放最后

ROS——集成开发环境搭建

1.4 ROS集成开发环境搭建 和大多数开发环境一样,理论上,在 ROS 中,只需要记事本就可以编写基本的 ROS 程序,但是工欲善其事必先利其器,为了提高开发效率,可以先安装集成开发工具和使用方便的工具:终端、ID…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后,经过一年多的等待,YOLOv9终于面世了!YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来,该领域的研究者们已经对YOLO进行了多次更…

EOS 与ESD 区别

ESD: 英文:Electrical Static Discharge; 定义:不同静电电位的两个物体之间的电荷转移;中文释为静电放电。静电是一种客观的自然现象; EOS: 英文:Electrical Over Stress 定义&#xf…

钉钉小程序 - - - - - 如何通过一个链接打开小程序内的指定页面

方式1 钉钉小程序 scheme dingtalk://dingtalkclient/action/open_mini_app?miniAppId123&pagepages%2Findex%2Findex%3Fx%3D%25E4%25B8%25AD%25E6%2596%2587 方式2 https://applink.dingtalk.com/action/open_mini_app?type2&miniAppIdminiAppId&corpIdcorpId&…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念:自然语言处理,是让机器理解人的语言的过程。 作用:通过使用自然语言处理,机器可以理解人的语言,从而进行语义分析,例如:从一句话中判断喜怒哀乐;从一段文…

Unity类银河恶魔城学习记录10-12 p100 Improve aliments - chill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

说下你对TCP以及TCP三次握手四次挥手的理解?

参考自简单理解TCP三次握手四次挥手 什么是TCP协议? TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接&a…

VMware的安装和Ubuntu的配置安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、linux是什么?二、基础知识虚拟机 三、安装VMware总结 前言 提示:这里可以添加本文要记录的大概内容: Linux是一个功能…

Java项目:55 springboot基于SpringBoot的在线视频教育平台的设计与实现015

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 在线视频教育平台分为管理员和用户、教师三个角色的权限模块。 管理员所能使用的功能主要有:首页、个人中心、用户管理、教师管理、课程信…

数据指标体系方法—UJM模型

了解 UJM UJM 模型,全称为 User-Journey-Map 模型,即用户旅途地图。 UJM 模型是用户在使用产品过程中的生命旅程,指用户从首次接触直至下单以及享受产品或服务期间,用户与企业产品或者平台互动的全过程。 用户旅途常常会和用户…

想兼职赚钱?盘点6个靠谱兼职,赚钱更轻松!

1,微头条搬砖 微头条搬砖是一个门槛不高的赚钱方式,而且不需要你有多么好的原创能力,去收集一些热门文章的素材进行文章伪原创,十分钟就能搞定,只要你的文章有爆点,足够吸人眼球,就能够获取不低…

给Python初学者的一些技巧

以下是一些Python实用技巧和工具,希望能对大家学习有所帮助。 交换变量 x 6 y 5 x, y y, x print x >>> 5 print y >>> 6 if 语句在行内 print "Hello" if True else "World" >>> Hello 连接 下面的最后一种方…

区块链技术中的共识机制算法:以权益证明(PoS)为例

引言: 在区块链技术的演进过程中,共识机制算法扮演着至关重要的角色。除了广为人知的工作量证明(PoW)外,权益证明(Proof of Stake,PoS)也是近年来备受关注的一种共识算法。 …

Spring学习

Maven 的配置文件是一个强约定的XML格式文件&#xff0c;它的文件名一定是pom.xml。 1、POM (Project Object Model) 一个 Java 项目所有的配置都放置在 POM 文件中&#xff0c;大概有如下的行为&#xff1a; 定义项目的类型、名字管理依赖关系定制插件的 1.maven坐标 <…