Kubernetes AdmissionWebhook

什么是AdmissionWebhook?

        什么是AdmissionWebhook,就要先了解K8S中的admission controller, 按照官方的解释是: admission controller是拦截(经过身份验证)API Server请求的网关,并且可以修改请求对象或拒绝请求。简而言之,它可以认为是拦截器,类似web框架中的middleware。

为什么使用 admission webhook?

        kubernetes的admission webhook为开发者提供了非常灵活的插件模式,在kubernetes资源持久化之前用户可以对指定资源做校验、修改等操作。应用场景 eg:接入sidecare、设置默认的servceaccount、设置quota等等。

总体来说,admission-plugins分为三大类:

1.修改类型(mutating)

2.验证类型(validating)

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

这些admission plugin构成一个顺序链,先后顺序决定谁先调用,但不会影响使用。

这里关心的plugin有两个:

一、MutatingAdmissionWebhook, ValidatingAdmissionWebhook

  • MutatingAdmissionWebhook: 做修改操作的AdmissionWebhook 
  • ValidatingAdmissionWebhook: 做验证操作的AdmissionWebhook

引用kubernetes官方博客的一张图来说明MutatingAdmissionWebhook和ValidatingAdmissionWebhook所处的位置:

解释下这个过程:

1.api请求到达K8S API Server

2.请求要先经过认证

  • kubectl调用需要kubeconfig
  • 直接调用K8S api需要证书+bearToken
  • client-go调用也需要kubeconfig

3.执行一连串的admission controller,包括MutatingAdmissionWebhook和ValidatingAdmissionWebhook, 先串行执行MutatingAdmission的Webhook list

4.对请求对象的schema进行校验

5.并行执行ValidatingAdmission的Webhook list

6.最后写入etcd

 应用场景:

  • 自动打标签 比如启动一个应用,应用包括deployment、service、ingress; 怎么快速过滤出哪些资源属于应用? 在K8S中,pod、service、ingress 都是独立的资源,通过给这些资源打上label,是最快速的方式。
  • 自动注入sidecar容器 应用启动后,应用的监控、日志如何处理?借助sidecar容器注入到其pod中
  • 设置默认的servceaccount、设置quota等等。

参考:https://mp.weixin.qq.com/s/Z6ucuqNs2rOaPzwhvW-bmw

参考:https://cloud.tencent.com/developer/article/1445760

原文地址:https://www.cnblogs.com/zhangmingcheng/p/14064255.html