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,其中需要使用之前创建的证书