首页/新闻资讯/正文详情

Go Operator Webhook 实战:admission webhook 编写到生产

发布时间:2026/9/26 11:52:01 来源:云帆数科 栏目:资讯中心
Go Operator Webhook 实战:admission webhook 编写到生产
Go Operator Webhook 实战admission webhook 编写到生产Webhook 让 K8s 在持久化前/后做校验与修改。这篇文章带你从原理到实现一次性完成。一、Webhook 类型Admission Webhookmutating修改、validating校验CRD Conversion Webhook版本转换ImagePolicyWebhookkubelet 启动时校验镜像二、流程kubectl → APIServer → Mutating Webhook → APIServer → Validating Webhook → ETCD三、生成 Webhookkubebuilder create webhook--groupmyapp--versionv1--kindMyApp--defaulting--programmatic-validation生成api/v1/myapp_webhook.gowebhook字段main.go注册四、Mutating Webhookfunc(r*MyAppDefaulter)Default(ctx context.Context,obj*myappv1.MyApp)error{ifobj.Spec.Replicasnil{d:int32(1)obj.Spec.Replicasd}ifobj.Spec.Image{obj.Spec.Imagedefault:latest}returnnil}五、Validating Webhookfunc(r*MyAppValidator)ValidateCreate(ctx context.Context,obj*myappv1.MyApp)error{ifobj.Spec.Image{returnerrors.New(image is required)}ifobj.Spec.Replicas!nil*obj.Spec.Replicas10{returnerrors.New(replicas should 10)}returnnil}六、注册funcmain(){mgr,_:ctrl.NewManager(ctrl.GetConfigOrDie(),ctrl.Options{Port:9443,Host:0.0.0.0,})ctrl.NewWebhookManagedBy(mgr).For(myappv1.MyApp{}).WithValidator(MyAppValidator{}).WithDefaulter(MyAppDefaulter{}).Complete()mgr.Start(ctrl.SetupSignalHandler())}七、TLS 配置# 生成本地 certmkcert localhost# 或catEOF|cfssl gencert-caca.pem -ca-key ca-key.pem-configca-config.json-hostnamewebhost -|cfssljson-barewebhookEOF八、Service ServiceMonitorkind:Servicemetadata:name:webhook-servicespec:selector:{app:my-operator}ports:-port:443targetPort:9443MutatingWebhookConfiguration:apiVersion:admissionregistration.k8s.io/v1kind:MutatingWebhookConfigurationwebhooks:-name:myapp.my.domainsideEffects:NoneclientConfig:service:{name:webhook-service,port:443,path:/mutate-myapp-v1}rules:-operations:[CREATE,UPDATE]apiGroups:[my.domain]apiVersions:[v1]resources:[myapps]九、踩坑清单WEBHOOK 必须 tls证书管理难1.16 之前需要 sa RBACWebhook 重启影响集群响应十、实战Operator Webhookerr:ctrl.NewControllerManagedBy(mgr).For(v1.MyApp{}).Owns(v1.Pod{}).Complete(r)十一、未来趋势Dynamic Admission ControlWebhook 进一步缓存化十二、总结与展望Webhook Operator 是 K8s 自定义平台的灵魂。掌握它们能写出云原生管控系统。十三、参考文献Kubebuilder 文档admissionregistration.k8s.io API

相关推荐

静态排流水解析:编译器如何决定指令的发射顺序
静态排流水解析:编译器如何决定指令的发射顺序

"辩经"到了第六篇,得先承认一件事:这个系列的话题,一个比一个容易被教材带了节奏。超标量处理器听了不少,"静态排流水"这个词,估计很多人第一次听到时脑子里的第一反应是:排流水不是硬… · 2026/9/26 11:51:54

Python程序控制台假死?快速编辑模式QuickEdit的排查与禁用指南
Python程序控制台假死?快速编辑模式QuickEdit的排查与禁用指南

1. 快速编辑模式是怎么把 Python 程序“卡死”的 1.1 先还原事故现场 写自动化脚本或者跑爬虫任务时,我经常在控制台里刷日志,动辄几百行实时滚动。有一天一个同事跑过来问我:“程序怎么假死了?刚才还好好的,我不小心… · 2026/9/26 11:51:54

AI专业工具链实战:从Python环境到RAG应用开发全指南
AI专业工具链实战:从Python环境到RAG应用开发全指南

1. 从课程作业到落地项目:这套工具链到底解决什么问题2026年,AI相关专业的课程体系已经和几年前完全不一样了。以前可能一门Python基础课加一门机器学习导论就能混到大三,现在从大一下学期开始,你就要面对大模型应用开发、RAG系统… · 2026/9/26 11:51:48

内质网应激与未折叠蛋白反应研究:UPR抗体工具选型与实验全攻略
内质网应激与未折叠蛋白反应研究:UPR抗体工具选型与实验全攻略

做细胞生物学研究的人,几乎都躲不开内质网应激和未折叠蛋白反应。我当年第一次把这两个方向作为课题主线时,天真的以为无非就是加个药、敲个基因、跑两张Western blot,结果第一轮实验就给我上了一课:选了一支只认ATF6全长蛋白的抗… · 2026/9/26 13:38:56

基于SpringBoot的博客论坛系统实战:从数据库设计到JWT鉴权与Redis缓存
基于SpringBoot的博客论坛系统实战:从数据库设计到JWT鉴权与Redis缓存

很多人把基于Java SpringBoot的博客论坛系统当成一个“烂大街”的课设选题,我最初也这么认为。直到自己把一个带源码、文档、运行视频和讲解视频的完整博客论坛系统从零做完,才发现这个项目远比想象中更能检验一个Java开发者的综合能力——它不只是一堆增… · 2026/9/26 13:38:56

Python OpenCV运动物体检测:原理、代码与工程调优
Python OpenCV运动物体检测:原理、代码与工程调优

不废话,直接讲干货。今天要说的这个东西,是我在实际项目里反复打磨过的“Python-OpenCV运动物体检测”方案。它不是那种跑个demo就完事的玩具,而是能扛住真实场景干扰、经得起参数折腾的实用套路。无论你是刚接触OpenCV的新手,还是… · 2026/9/26 13:38:56

【claude code实践】Subagents 配置实战:代码审查、测试与架构分析场景下的 settings.json 骨架
【claude code实践】Subagents 配置实战:代码审查、测试与架构分析场景下的 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 13:38:50

RAG上线翻车?TaoToken统一Key接入Cline排查8个配置细节,准确率回升32%
RAG上线翻车?TaoToken统一Key接入Cline排查8个配置细节,准确率回升32%

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 13:38:50

AI CC Switch 解决了什么?TaoToken 统一 Key 接入 Claude Code 与 Codex 的配置骨架
AI CC Switch 解决了什么?TaoToken 统一 Key 接入 Claude Code 与 Codex 的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 13:38:43

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码