带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(十)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析

3.3.6       WebHook

1. WebHook是什么

 

WebHook与过滤器的作用类似,任何对 CRD进行变更的操作都会交由 WebHook前处理,处理完后,才会转给 Controller 继续处理,WebHook流程如图 3-6所示。

image.png

3—6WebHook 流程


 

根据 Kubernetes官方博客的介绍,WebHook 具有以下两个功能。

(1)  修改(Mutating):CRD 进行修改,如为资源自动打标签等。

(2)  验证(Validating):CRD进行验证,如判断该字段的设定是否在取值范围内。引用 Kubernetes 官方博客的一张图来说明 MutatingValidating 操作所在的位置,如

3-7所示。

 

 

 

 

 

 

 

 


 

具体说明如下。

image.png


3—7    MutatngVaidatng 严作所在的位置


(1)APIServer接收到 API请求。

2)请求经过认证、鉴权。

(3)  执行 MutatingAdmissionWebHookList。

(4)  对请求对象的 Schema进行校验。

(5)  执行 ValidatingAdmissionWebHookList。

(6)  最后写入 ETCD。

 

2. Controller-runtime中的 WebHook框架

 

Controller-runtime为用户提供了一个简单快捷的WebHook框架,可通过该框架,快速创建 WebHook,并将处理函数注入 WebHookServer中,通过 WebHook 的处理函数,即可实现 CRD的修改和验证操作。

(1) Server的创建

通过Controller-runtime提供的WebHookServer包,可快速地构建出一个HTTPServerServer用于接收来自 Kube-APIServer的请求,并将请求转发到对应的 Handler进行处理。

WebHookServer主要用于保存注册的WebHook(见代码清单3-46)。

typeServerstruct{

...

//下⾯的webhooks会跟踪所有已注册的webhooks,以便进⾏依赖注⼊,并在重复的Webhook

注册时提供更好的告警

webhooksmap[string]http.Handler

...


}

 

开发者可通过 WebHook包中的 func(s*Server)Register(pathstring, hookhttp.Handler){},将开发好的 WebHook注册到 Server,WebHook其实就是一个 HTTP求的处理函数。

(2) Handler 的实现

开发者在实现 Handler的时候,只需要实现 WebHook包定义好的 Interface即可(见代码清单3-47)。

//HandlerFunc函数⽤来实现 Handler接⼝

typeHandlerFuncfunc(context.Context,Request)Response

 

在此基础上,WebHook包提供了 Handler 函数返回体的各种封装,开发者可基于这些封装实现自定义的业务逻辑。

对于 AdmissionWebHook,定义了两种最基本的返回体封装函数。

(1)  允许:该封装函数表明对CRD的某种操作是允许的(见代码清单3-48

funcAllowed(reasonstring)Response{returnValidationResponse(true,reason)


}

 

(2)   拒绝:该封装函数表明对CRD的某种操作是拒绝的(见代码清单3-49)。

funcDenied(reasonstring)Response{returnValidationResponse(false,reason) 

}

 

 

3. WebHook示例

 基于前面的介绍,本节将给出一个WebHook的简单示例(见代码清单3-50)。

//创建Manager

mgr,err:=ctrl.NewManager(ctrl.GetConfigOrDie(),ctrl.Options{})

iferr!=nil{

panic(err)

}

 

//创建 WebHook ServerhookServer:= &Server{

Port:8443,

}

if err:=mgr.Add(hookServer);err!=nil{panic(err)

}

 

//创建 WebHook的处理函数

validatingHook:=&Admission{

Handler:admission.HandlerFunc(func(ctxcontext.Context,req

AdmissionRequest)AdmissionResponse{

returnDenied("noneshallpass!")

}),

}

 

//Handler注册到WebHookServer

hookServer.Register("/validating",validatingHook)

 

//启动Manager,启动 WebHookServer

err=mgr.Start(ctrl.SetupSignalHandler())iferr!=nil{

panic(err)

}


相关文章
|
2月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
4月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
4月前
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods 技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
2月前
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
1月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
106 8
|
6月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
2月前
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
3月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
115 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
4月前
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
230 9
Flink在B站的大规模云原生实践

热门文章

最新文章