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.mfbz.cn/a/458941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pixelmator Pro:专业级图像编辑,触手可及mac版

Pixelmator Pro是一款功能强大的图像编辑软件,专为Mac操作系统设计。它拥有直观的界面和丰富的工具,能够满足用户各种图像处理需求。 Pixelmator Pro软件获取 首先,Pixelmator Pro支持多种文件格式,包括JPEG、PNG、GIF、BMP、TIF…

1.Python数据分析—数据分析与挖掘详讲

1.Python数据分析—数据分析与挖掘详讲 一个人简介二数据分析与挖掘概述三什么是数据分析和挖掘四数据分析与挖掘在不同领域的应用4.1医疗领域:4.1.1 建立疾病数据库:4.1.2 临床决策支持:4.1.3 疾病预警和监控: 4.2 电子商务领域&…

将Linux curl命令转换为windows平台的Python代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset(),动物将返回到的默认姿势。 Current …

SpringBoot扩展篇:Spring注入 @Autowired @Resource

Spring注入 Autowired & Resource 1. 概述1.1 职责1.2 流程概述 2. Demo3. AutowiredAnnotationBeanPostProcessor注册4. 注册元数据4.1 AutowiredAnnotationBeanPostProcessor#postProcessMergedBeanDefinition4.2 AutowiredAnnotationBeanPostProcessor#findAutowiringMe…

Android 仿天通卫星对准(卫星在圆形卫星轨道上转动)效果实现

效果图 View源码 package com.android.circlescalebar.view;import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics…

人工智能入门学习笔记1:什么是人工智能

一、什么是人工智能 人工智能(Artificial Intelligence),是一个以计算机科学(Computer Science)为基础,由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科,研究、开发用于模拟、延伸和扩展人的智能的理论、…

springboot+ssm基于vue.js的客户关系Crm管理系统

系统包含两种角色:管理员、用户,主要功能如下。 ide工具:IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架:ssmspringboot都有 前端:vue.jsElementUI 详细技术:springbootSSMvueMYSQLMAVEN 数据库…

英文参考文献中,p 和 pp分别表示什么,该如何去使用?

在英文参考文献中,p 和 pp 是用来表示页码范围的常见缩写。它们各自的含义如下: p:代表“page”(页),通常用于表示一个单独的页码。例如,如果参考文献中的引用出现在某书的第12页,那…

mac电脑解决无法打开软件

文章目录 报错内容解决方法一方法二方法三 报错内容 macOS无法验证此App是否包含恶意软件。 解决方法一 打开系统偏好设置>安全性与隐私>通用,这个时候有个按钮,“仍然允许”点击即可。 方法二 按住Control键点按应用, 然后打开&#xff0c…

Sublime查看ANSI编码文档乱码问题

原因为没有安装对应的解码插件。 选择安装插件包 选择插件包:ConvertToUTF8或者GBK,我试了第一个插件包不行,安装GBK插件包后OK。

Redis 持久化-AOF

AOF(Append Only File),以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新…

vue-创建vue项目记录

安装node.js 先安装node.js的运行环境node.js的下载地址 安装后就可以使用npm命令 1、清除npm缓存:npm cache clean --force 2、禁用SSL:npm config set strict-ssl false 3、手动设置npm镜像源:npm config set registry https://registry.…

BMW配送流程:通过EDI对接VDLP

BMW的汽车配送流程始于汽车“生产结束”,结束于“交付给宝马经销商”。BMW与其物流服务供应商之间没有直接的接口,EDI信息将会通过BMW的EDI供应商提供的VDLP(车辆分销物流平台)进行交换。 近期我们收到来自国内某汽车行业供应商L公…

C# Chart曲线控件专题

1.控件基本设置 chart1.ChartAreas[0].AxisY.IsStartedFromZero false; //设置Y轴自适应chart1.Series["瞬时值"].BorderWidth 2; // 设置曲线宽度为2个像素,注意[]中写入的Series的Namechart1.Series["瞬时值"].Color Color.Red; // 设置曲…

2024年第16届全国大学生广告艺术大赛,引领创新与设计风潮!

全国大学生广告艺术大赛(简称大广赛)自 2005 年第一届举办至今,遵循“促进教改、启迪智慧、强化能力、提高素质”的竞赛宗旨,成功举办了 13 届共 14 次赛事,全国共有 1500 多所高校参与其中,超过百万学生提…

新书推荐|职业教育赛教一体化课程改革系列教材之spark大数据分析

由武汉唯众智创科技有限公司统一规划并参与编写的“职业教育赛教一体化课程改革系列教材”-《spark大数据分析》正式出版上线,(其它八本为《云计算技术与应用》《大数据技术与应用Ⅰ》《网络综合布线》《物联网.NET开发》《物联网嵌入式开发》《物联网移动应用开发》…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:RelativeContainer)

相对布局组件,用于复杂场景中元素对齐的布局。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 规则说明 容器内子组件区分水平方向,垂直方向: 水平方向为left&…

英语润色:DeepL Write 人工智能写作助手

分享一个语言润色方面非常受用的翻译软件,网址: https://www.deepl.com/write Figure 1 Figure 2 Figure 3 “Machine learning approaches have been extensively applied to improve the accuracy and reliability of potentials, addressing inhere…

XSS_lab(level11-level18)

level11: 还是url这里,输入:<script>alert(1)</script> 与上一题相似 构建:?t_link1&t_history2&t_sort3&t_ref4 我们发现t_sort是可用的 构建:?t_sort1" type"button" οnclickalert(1) // 把双引号过滤了 这里无法使用实体编码…