k8s之webhook

什么是Admission Controller

admission controller是k8s api的拦截器,将拦截到的请求进行过滤或修改处理

Admission webhook是啥

webhook就是一个HTTP回调,接收admission请求,处理并返回

用户可以定义两种webhook:

  • validating admission webhook对应的k8s资源为ValidatingWebhookConfiguration;用于对请求进行验证,是否允许调用
  • mutating admission webhook对应的k8s 资源为MutatingWebhookConfiguration;用于对请求进行修改,如注入一个Sidecar。webhook回调,接收API Server发送的admissionReview请求,并返回 admissionResponse。

使用webhook有什么要求?

  • kubernetes版本最低是v1.9
  • api server使能(enable)了MutatingAdmissionWebhook和ValidatingAdmissionWebhook
--admission_control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,MutatingAdmissionWebhook,ValidatingAdmissionWebhook
  • admissionregistration.k8s.io/v1beta1 API处于enable状态,即使用
kubectl api-versions | grep admissionregistration.k8s.io/v1beta1
  • master能够通过service dns访问到服务
    • master节点安装flanneld,确保master 节点上可以访问到pod ip
    • master节点需要安装kube-proxy,并且设置数据--proxy-mode=userspace,确保 外部网络(即非K8S集群内的网络)可以访问cluster IP

如何自己写一个webhook

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

参考1