webhook是什么(gitwebhook)
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创的分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等本篇概览本文是《kubebuilder实战》系列的第七篇,之前的文章咱们完成了一个Operator的设计、开发、部署、验证过程,为了让整个过程保持简洁并且篇幅不膨胀,实战中刻意跳过了一个重要的知识点:webhook,如今是时候学习它了,这是个很重要的功能;本篇由以下部分构成:介绍webhook;结合前面的elasticweb项目,设计一个使用webhook的场景;准备工作生成webhook开发(配置)开发(编码)部署验证Defaulter(添加默认值)验证Validator(合法性校验)关于webhook熟悉java开发的读者大多知道过滤器(Servlet Filter),如下图,外部请求会先到达过滤器,做一些统一的操作,例如转码、校验,然后才由真正的业务逻辑处理请求:
Operator中的webhook,其作用与上述过滤器类似,外部对CRD资源的变更,在Controller处理之前都会交给webhook提前处理,流程如下图,该图来自《Getting Started with Kubernetes | Operator and Operator Framework》:
再来看看webhook具体做了哪些事情,如下图,kubernetes官方博客明确指出webhook可以做两件事:修改(mutating)和验证(validating)
kubebuilder为我们提供了生成webhook的基础文件和代码的工具,与制作API的工具类似,极大地简化了工作量,咱们只需聚焦业务实现即可;基于kubebuilder制作的webhook和controller,如果是同一个资源,那么它们在同一个进程中;设计实战场景为了让实战有意义,咱们为前面的elasticweb项目上增加需求,让webhook发挥实际作用;如果用户忘记输入总QPS,系统webhook负责设置默认值1300,操作如下图:
为了保护系统,给单个pod的QPS设置上限1000,如果外部输入的singlePodQPS值超过1000,就创建资源对象失败,如下图所示:
源码下载本篇实战中的源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
这个git项目中有多个文件夹,kubebuilder相关的应用在kubebuilder文件夹下,如下图红框所示:
kubebuilder文件夹下有多个子文件夹,本篇对应的源码在elasticweb目录下,如下图红框所示:
准备工作和controller类似,webhook既能在kubernetes环境中运行,也能在kubernetes环境之外运行;如果webhook在kubernetes环境之外运行,是有些麻烦的,需要将证书放在所在环境,默认地址是:/tmp/k8s-webhook-server/serving-certs/tls.{crt,key}为了省事儿,也为了更接近生产环境的用法,接下来的实战的做法是将webhook部署在kubernetes环境中为了让webhook在kubernetes环境中运行,咱们要做一点准备工作安装cert manager,执行以下操作:kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.yaml上述操作完成后会新建很多资源,如namespace、rbac、pod等,以pod为例如下:[root@hedy ~]# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE cert-manager cert-manager-6588898cb4-nvnz8 1/1 Running 1 5d14h cert-manager cert-manager-cainjector-7bcbdbd99f-q645r 1/1 Running 1 5d14h cert-manager cert-manager-webhook-5fd9f9dd86-98tm9 1/1 Running 1 5d14h ...操作完成后,准备工作结束,可以开始实战了;生成webhook进入elasticweb工程下,执行以下命令创建webhook:kubebuilder create webhook \ --group elasticweb \ --version v1 \ --kind ElasticWeb \ --defaulting \ --programmatic-validation上述命令执行完毕后,先去看看main.go文件,如下图红框1所示,自动增加了一段代码,作用是让webhook生效:
上图红框2中的elasticweb_webhook.go就是新增文件,内容如下:package v1 import ( "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" ) // log is for logging in this package. var elasticweblog = logf.Log.WithName("elasticweb-resource") func (r *ElasticWeb) SetupWebhookWithManager(mgr ctrl.Manager) error { return ctrl.NewWebhookManagedBy(mgr). For(r). Complete() } // EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! // kubebuilder:webhook:path=/mutate-elasticweb-com-bolingcavalry-v1-elasticweb,mutating=true,failurePolicy=fail,groups=elasticweb.com.bolingcavalry,resources=elasticwebs,verbs=create;update,versions=v1,name=melasticweb.kb.io var _ webhook.Defaulter =
为什么每天做梦(频繁梦到前任是怎么回事)连续两天做的梦自己都觉得是噩梦,明明自己已成家生娃了偏偏梦镜里自己仿佛还是单身但是又有现在这个孩子,梦见自己怀孕了打胎了,有的是前任的偏偏前任都不知道打胎的事情,又有另外一个入不了
猫屎为什么那么臭(怎样去除屋子里猫臭味)相信每位铲屎官都有被猫屎臭醒的经历,这么可爱的小猫咪,拉屎怎么会那么臭呢?但你知道吗,猫咪的祖先们在野外生存的时候,拉的屎可是几乎木有味道的啊!为何生活条件更好的今天,家猫的屎会臭
为什么wifi受限(wifi受限怎么解决办法)Wifi出现黄色感叹号怎么办?经常使用无线wifi上网的朋友们都知道有时候会遇到wifi受限制的情况,这时候怎么弄都连接不上不能使用,经常断网,各种糟心。下面,我们就来看看Win8
感冒为什么头晕(为什么感冒整个人晕晕的)头痛的原因有许多,感冒发烧,血压异常,贫血,头部有障碍,煤气中毒,酒精中毒,便秘,神经疲劳等都会引发头胀痛。如果是身体异常导致的头部胀痛,需要及时治疗才能缓解。生活中难免会有头胀痛
为什么早上刷牙(早上刷牙恶心是什么原因)相信很多人都有这样的体验,那就是每天早上刷牙的时候都有恶心干呕的情况。正常情况下是不会有这种问题发生的,排除是女性怀孕这一可能,就要小心注意啦,有可能是一些疾病在背后作祟。不管怎样
鱼头为什么不能吃(女孩子为什么不能吃鱼头)在我们的饮食结构中,主要分为淀粉类蔬菜类和肉类,其中肉类和水产所占的比例排第三,主要为人体提供蛋白质和维生素,以及部分的矿物质元素,比如和血液息息相关的铁元素,构成骨骼的钙元素等,
眉毛为什么浓(为什么眉毛很浓密)导语不知大家有没有观察过身边人的眉毛,你会发现每个人的眉毛形状长短稀疏都不一样。有的人眉毛非常浓密,甚至两条眉毛都快连到一起,而有的人眉毛则非常稀疏,只有普通人的一半。在古时候,人
办户口需要多久(自己单办户口本需要多久)3月16日,陈先生向记者展示拿到的新户口本。文图半岛全媒体记者孙桂东3月15日,青岛发布了落户新政,大幅放宽了落户限制。3月16日,市南区八大峡派出所就迎来了首批办理落户的群众,仅
奶粉一罐吃多久(婴儿奶粉一罐吃多久)你家娃的配方奶粉喝到几岁?前段时间聊到这个话题,留言区里一些回答蛮让人意外的。左右滑动查看更多不少孩子都六七岁了,还在喝四段配方奶粉???糕妈一直在普及,孩子吃饭营养比较均衡的话,
大便蹲多久(蹲厕所蹲几分钟合适)排便是每个人都要经历的,因此被当做跟呼吸一样自然,殊不知排便也需要有排便的规律,这样才是对健康最为有利的事情,本文就来介绍一下一天的最佳排便时间是多会?人体最佳排便时间1清晨一天当
罗非鱼蒸多久(清蒸罗非鱼是冷水蒸还是热水蒸)今天天气不错,跟小伙伴去河里钓鱼,最后的鱼获还是不错的。我也拿了新鲜的罗非鱼回来,做了一道清蒸罗非鱼,这样蒸出来的罗非鱼鱼肉鲜嫩又入味,真好吃。做法和步骤分享给大家哟1将罗非鱼去鱼