Kubernetes operator系列:webhook 知识学习

news2024/11/17 14:38:08

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

  • 本文是 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.coloradmin.cn/o/1521967.html

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

相关文章

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

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

【Python】进阶学习:基于Numpy实现按指定维度拼接两个数组

【Python】进阶学习:基于Numpy实现按指定维度拼接两个数组 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

无限自动出兵-入门版【war3地图编辑器】

文章目录 1、创建单位和地区2、新事件开端3、动作3.1、创建单位3.2、选取单位3.2.1、发布指令 4、最终 1、创建单位和地区 2、新事件开端 创建新的触发器→新事件开端→时间→时间周期事件 3、动作 3.1、创建单位 3.2、选取单位 单位组→选取单位组内单位做动作 矩形区域内的…

idea中database的一些用法

1、查看表结构 方法1,右键,选这个 方法2 双击表后,看到数据,点DDL 方法3 写SQL时,把鼠标放在表名上,可以快速查看表结构 2、表生成对应的实体类 表中右键,选择这2个,选择生成的路…

STM32-Flash闪存

简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程。 读写Flash的用途 1.利用程序存储器的剩余空间来保存掉电不丢失的用户数据。 2.通过在程序中…

win下 VirtualBox 自动启动脚本脚本

文章目录 一、找到VBoxManage二、测试脚本1、打开cmd2、输入命令 (直接把上面找到的VBoxManage.exe 拖入到cmd中,这样就不用输入路径了)3、效果展示 比如虚拟机中的系统名称叫“centos-mini” 三、设置自动启动脚本1、复制刚才测试好的命令到新建文本中2、修改文本名…

【嵌入式实践】【芝麻】【硬件篇-4】从0到1给电动车添加指纹锁:IO电路简单介绍

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹,电动车进入P档等待时计时,计时超过5min则自动锁车,计时过程中按刹车可中断P档状态,同时中断锁车计时。改项目我称之为“芝…

【MatLab】之:Simulink安装

一、内容简介 本文介绍如何在 MatLab 中安装 Simulink 仿真工具包。 二、所需原材料 MatLab R2020b(教学使用) 三、安装步骤 1. 点击菜单中的“附加功能”,进入附加功能管理器: 2. 在左侧的“按类别筛选”下选择Using Simulin…

代码随想录算法训练营第day23|669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 669. 修剪二叉搜索树 力扣题目链接 (opens new window) 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L,…

vue2语法-简略版

内容不全,发现看官方文档效果更好。 介绍 — Vue.js API — Vue.js 二、Vue指令 2.1 内容渲染指令 v-text,v-html 内容渲染指令用来辅助开发者渲染DOM元素的文本内容,常用的内容渲染指令有如下2个: v-text(类似in…

一文全面了解向量数据库

1. 什么是向量数据库?** 首先,我们需要理解什么是向量? 向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“…

Linux内核--基本概念/基本结构和组件

提示:本系列文章重点学习Linux内核 Linux内核--基本概念/基本结构和组件 简介一、基础概念1.六项工作内容2.根文件系统(Root File System):3.交叉编译(Cross-Compilation):4.设备树(…

释放人工智能的力量:GPU服务器托管和高电机柜托管的关键作用

随着人工智能技术的不断发展,GPU服务器托管和高电机柜托管也变得愈发重要。这些技术在人工智能领域发挥着关键作用,为AI算法的训练和推理提供了强大的计算支持。 GPU服务器托管是指将GPU服务器放置在专门的数据中心中,通过云服务提供商提供的…

【敬伟ps教程】制图操作

文章目录 一寸照片制作自动生成全景照片服装操控变形内容识别比例调图画笔高级设置复制技术一寸照片制作 一寸照片规格: 2.5cm*3.5cm 1、新建文档 2、将照片拖拽至2.5*3.5cm文档中,调整至合适大小(人像的面部居中在文档中),可以使用自由变换(Ctrl+T)来调整,按住 Alt 等…

flutter 开发app可以做的事情

热更新文件/图片 预览组件/文件上传分片/动态多语言/兼容web缓存管理页面动画封装公用组件库日志系统/日志规范/错误定位低代码实现/探索/落地网络延迟脚本字体包优化web 页面浏览器刷新没有历史路径,导致报错选择多语言之后,退出再次进入,没…

Tiktok在线网页版和Tiktok安卓解锁版教程(Tiktok免登录国内直接看)

TikTok和抖音作为众所周知的一对兄弟,所开创的市场前景不可估量。它们不仅颠覆了很多传统认知,也直接让更多人接受了这些新奇事物。然而,TikTok的版本受限于国外,需要特定网络环境,一旦识别为国内,将无法使…

pytorch 入门基础知识二(Pytorch 02)

一 微积分 1.1 导数和微分 微分就是求导: %matplotlib inline import numpy as np from matplotlib_inline import backend_inline from d2l import torch as d2l def f(x):return 3 * x ** 2 - 4 * x 定义: 然后求 f(x) 在 x 1 时的导数&#xff…

数据结构:基于数组实现简单的数据缓存区(简单队列)

1 前言 在我们使用CAN或者以太网调试时,经常需要缓存最近n次收到的数据,以便于我们对数据进行分析。 实现这一想法我们很容易就会想到队列,队列就是一种先进先出的数据结构,之前在《数据结构:基于数组的环形队列&…

C#Socket通信实现

1.编写服务端代码,以原石兑换码为例(分别建立两个控制台应用,一个用于服务端,一个用于客户端) using System.Net.Sockets; using System.Net; using System.Text;namespace 网络游戏服务器 {internal class Program{s…

机器学习是什么?

机器学习是一种人工智能(AI)的分支,其主要目标是使计算机系统能够通过数据和经验来改进和学习,而无需明确地编程。在机器学习中,计算机系统会通过对大量数据进行学习和分析,从中发现模式和规律,…