96SEO 2026-02-23 14:41 9
K8s的核心组件就那些几个Deployment、Pod、Service、Ingress、ConfigMap、Secret、……

在Kubebuilder的官方文档中也有提到webhook的内容但是比较简单而且有些参考文章是基于CRD做的Webhook示例此处我将演示核心组件Pod的Webhook。
从我的角度看Webhook就是一个回调动作举个例子方便理解例如我们希望在pod创建的时候在annotation中增加一个标签如author:geoff之类的就可以利用这个webhook实现当创建调用链完成之后利用“回调”在这个创建动作之后丝滑地加入“增加annotation的额外动作”。
可以结合Js的回调、java的AOP切片来理解。
我们看看其中的原理
Admission阶段往Webhook发送一个“请求”并接受来自Webhook的“响应”。
我们此时不妨大胆推测一下实现这两点要做些什么呢我可以不负责任推测一下步骤
Controller配置一个请求请求会往Webhook接受、处理并返回Webhook开发一个接收这个请求的Handler类似Java的controller
事实也正如我们瞎想的哪样确实核心就是这两个动作。
这里我们看到一共有两种Admission
这个算是提前准备了需要注意的是k8s集群的版本和cert-manage需要注意下不然版本差别过多可能会有些意想不到的问题
在集群上安装cert-maneger其中v1.7.1就是cert-manager版本。
https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml#
看对应的Pod是否被成功创建可能一开始pod的replicas0因为集群节点是image
kind-clusters-mutil-config.yaml
./kind-clusters-mutil-config.yaml##
/mnt/c/Users/${current_user}/.kube/config
k8s-operator/kubebuilder-webhook-demo
auth_proxy_client_clusterrole.yaml
leader_election_role_binding.yaml
从这里之前和创建Operator的步骤基本是一致的从这里开始要开始有点不一样了
定义API此处要实现Pod的Webhook因此直接按Pod的Api创建
之后的option我们不创建Resource和Controller因此都选择n
之后的option我们不创建Resource和Controller因此都选择n
auth_proxy_client_clusterrole.yaml
leader_election_role_binding.yaml
修改config/default/kustomize.yaml
webhook打开webhook、cert-manager相关配置如下图所示但是要注意属性缩进对齐不然会报错
修改config/default/kustomize.yaml的配置
注释config/rdbc/kustomize.yaml的role配置
修改config/default/webhookcainjection_patch.yaml:
1.我们为了不搞这么复杂我们只关心MutatingAdmision因此可以直接注释掉ValidateAdmission
注释config/default/webhookcainjection_patch.yaml中ValidateAdmission配置
因为核心组件Pod的Webhook和一般的CRD的webhook不一样此处生成的pod_webhook.go只有Default()这个function因此我们需要直接重写整个代码最重要的是Handle()方法。
athttp://www.apache.org/licenses/LICENSE-2.0Unless
(contextencoding/jsonfmtnet/httpcorev1
k8s.io/api/core/v1sigs.k8s.io/controller-runtime/pkg/clientlogf
sigs.k8s.io/controller-runtime/pkg/logsigs.k8s.io/controller-runtime/pkg/webhook/admission
logf.Log.WithName(pod-resource)//
定义核心组件pod的webhook的主struct类似于java的Class
kubebuilder:webhook:path/mutate-core-v1-pod,mutatingtrue,failurePolicyfail,sideEffectsNone,groupscore,resourcespods,verbscreate;update,versionsv1,namempod.kb.io,admissionReviewVersionsv1
admission.Errored(http.StatusBadRequest,
变量marshaledPod是一个Map可以直接修改pod的一些属性marshaledPod,
admission.Errored(http.StatusInternalServerError,
打印fmt.Println()fmt.Println(string(marshaledPod))return
admission.PatchResponseFromRaw(req.Object.Raw,
全部注释掉替换一个简单的测试Function。
这个测试也是有讲究的有兴趣可以研究一下。
athttp://www.apache.org/licenses/LICENSE-2.0Unless
k8s-operator/kubebuilder-webhook-demo/api/v1......
(corev1.Pod{}).SetupWebhookWithManager(mgr);
mgr.GetWebhookServer().Register(/mutate-core-v1-pod,
1.和上面一样因为我们是创建Pod的Webhook不需要自定义Controller注释掉。
更新yaml这里和之前main.go和xxx_webhook.go的注释有点关生成的代码是依据注释实现的
generate这一步比较重要执行后会生成config/webhook/mainfests.yaml文件切记执行
增加一个kind-load方便将本地image上传到本地k8s集群中
增加kind-load,可以将image上传到kind创建的集群容器中
其中IMG是一个可以自行设置镜像名的变量此处为k8s-podwebhook-demo:1.0。
构建镜像有时候会失败可能是网络问题多试几遍IMG需要指定不然后面部署还是有问题
local镜像上传到Kind创建的k8s集群所在的所有node中如果本地是
这个MutatingAdmission的作用是注册一个endpoint使得Pod在被创建后往这个endpoint发送一个https请求这也是为什么需要证书的原因。
事实上main.go中
mgr.GetWebhookServer().Register(/mutate-core-v1-pod,
Webhook但是一般而言我们不直接创建Pod而是创建一个deployment因为deployment最后也是会创建pod的。
当然直接创建Pod也是可以的这里创建一个pod-demo-ngnix.yaml文件去创建一个简单的pod这个Pod只是一个基本的Ngnix镜像。
使用kubebuilder开发kubernetes核心资源的webhook
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback