高端网站建设哪家公司好,公众号同步到dede网站,长春自助建站模板,星子网房产租房云原生学习路线导航页#xff08;持续更新中#xff09; 本文是 Kubernetes operator学习 系列文章#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码#xff0c;都存储于github代码库#xff1a;https://github.com/graham924/share-code-operator-st…云原生学习路线导航页持续更新中 本文是 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 实战演练 之 自定义CronJobKubernetes operator系列kubebuilder 实战演练 之 开发多版本CronJobKubernetes 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的请求需要通过所有插件才能最终存储到etcdapi 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 webhook 和 CRD conversion webhook 两种 我们进行Operator开发也只要是涉及到这两种webhook
2.3.为webhook提供证书
为什么需要为webhook提供证书 admission webhook 和 CRD conversion webhookapi Server 通过 https post 访问 webhook server, 因此 webhook server 必须要监听在 https 协议上因此 这三种 webhook 都需要做好证书配置推荐使用 cert-manager 为Webhook提供证书 安装cert-managerkubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.yaml 查看安装结果[rootlocalhost 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[rootlocalhost cert-manager]# kubectl get ValidatingWebhookConfiguration
NAME WEBHOOKS AGE
cert-manager-webhook 1 143m[rootlocalhost cert-manager]# kubectl get MutatingWebhookConfiguration
NAME WEBHOOKS AGE
cert-manager-webhook 1 143m3.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 实战演练 之 自定义CronJobKubernetes 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