External Admission Webhooks 作用及使用场景 当需要对某些api请求或者所有请求进行校验或者修改object的时候,可以考虑使用ValidatingAdmissionWebhook或者MutatingAdmissionWebhook,两者的区别:
ValidatingAdmissionWebhook不允许在webhook中对Object进行修改,只是返回结果是true或false MutatingAdmissionWebhook运行在webhook中对Object进行修改 启用 在1.10之前的版本,需要使用 --admission-control 启用相关配置,并且是按配置的顺序来决定运行顺序,因此需要用户对于Admission Controllers 完全了解。
在1.10之后的版本,上述配置已经废弃,建议使用--enable-admission-plugins=MutatingAdmissionWebhook,ValidatingAdmissionWebhook,并且用户指定的顺序并不会影响实际运行顺序,更加友好。
官方的Using Admission Controllers - Kubernetes有关于这方面的详细说明。
流程 kube-apiserver –> 认证鉴权 –> Admission Controller –> webhook
使用 创建admission服务,以供kube-apiserver调用 package main import ( "crypto/tls" "encoding/json" "flag" "io/ioutil" "net/http" admissionv1beta1 "k8s.io/api/admission/v1beta1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/klog" ) type patchOperation struct { Op string `json:"op"` Path string `json:"path"` Value interface{} `json:"value,omitempty"` } var scheme = runtime.