note.wcoder.com
wcoder GitHub

Table of Contents

webhook

admission 入场

webhook1.9beta 1.16 GA
crd 1.7 beta 1.16 GA

webhook 的本质是个 http server,因此,需要用代码实现这么一个 server,供 apiserver 调用

admission webhook 的作用我简单的总结下,当用户的请求到达 k8s apiserver 后,apiserver 根据 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 的配置,先调用 MutatingWebhookConfiguration 去修改用户请求的配置文件,最后会调用 ValidatingWebhookConfiguration 来验证这个修改后的配置文件是否合法。

我们可以利用 mutating 的机制,将一些特殊的配置自动加上,而不用用户来操心。同时也可以在 validating 中编写代码设置自己的规则,看请求是否合法。

  1. 修改类型(mutating)

  2. 验证类型(validating)

  3. 既是修改又是验证类型(mutating&validating)


api请求到达K8S API Server,请求要先经过认证,执行一连串的admission controller,包括MutatingAdmissionWebhook和ValidatingAdmissionWebhook, 先串行执行MutatingAdmission的Webhook list,对请求对象的schema进行校验,并行执行ValidatingAdmission的Webhook list,最后写入etcd

apiserver 如何知道它要访问 webhook server?

  • 配置 ValidatingWebhookConfiguration
  • 配置 MutatingWebhookConfiguration

相关操作

kubectl exec登入pod
kube-apiserver --help |grep enable-admission-plugins

kubectl get MutatingWebhookConfiguration
kubectl get ValidatingWebhookConfiguration

kubectl api-versions | grep admissionregistration.k8s.io/v1beta1

如何自己写一个webhook?

需要完成几个事情:

  • 创建TLS Certificate,即证书
  • 编写服务端代码,服务端代码需要使用证书
  • 根据证书创建k8s sercret
  • 创建k8s Deployment和Service
  • 创建k8s WebhookConfiguration,其中需要使用之前创建的证书

https://github.com/morvencao/kube-mutating-webhook-tutorial

深入理解 Kubernetes Admission Webhook

编译开源的 admission webhook
玩转K8S AdmissionWebhook

← Previous Next →
Less
More