云原生学习路线导航页(持续更新中)
- 本文是 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 实战演练 之 自定义CronJob
- Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob
- Kubernetes 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的请求,需要通过所有插件,才能最终存储到etcd
- api server 启动时,使用参数控制插件的开启
- kubernetes 1.10及以上版本,apiserver使用 参数
--enable-admission-plugins
控制插件启动 - kubernetes 1.9及以下版本,apiserver使用 参数
--admission-control
控制插件启动
- kubernetes 1.10及以上版本,apiserver使用 参数
- 我们今天要学习的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插件链时,依次调用
- admission webhook 包括两种:
MutatingAdmissionWebhook、ValidatingAdmissionWebhook
- authorization webhook
- 对 API Server 中的请求进行授权判断
- CRD conversion webhook
- 用于对 多版本的crd 资源,进行版本间数据转换
- admission webhook
- 其中,controller-runtime 支持
admission webhook
和CRD conversion webhook
两种- 我们进行Operator开发,也只要是涉及到这两种webhook
2.3.为webhook提供证书
- 为什么需要为webhook提供证书
admission webhook
和CRD conversion webhook
,api Server 通过 https post 访问 webhook server, 因此 webhook server 必须要监听在 https 协议上- 因此 这三种 webhook 都需要做好证书配置,推荐使用 cert-manager 为Webhook提供证书
- 安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.yaml
- 查看安装结果
[root@localhost 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[root@localhost cert-manager]# kubectl get ValidatingWebhookConfiguration NAME WEBHOOKS AGE cert-manager-webhook 1 143m[root@localhost cert-manager]# kubectl get MutatingWebhookConfiguration NAME WEBHOOKS AGE cert-manager-webhook 1 143m