准入控制器
用途:
拦截apiserver请求,对请求进行验证或者修改,比如说添加标签,效验自定义资源字段是否准确或许增加默认值,超卖设置,增加sidecar容器等等
分类:
-
内置准入器,默认开启的noderestriction准入器,主要是限制对节点一些标签的修改操作
-
动态准入器,HTTP回调机制,类似于拦截器
-
ValidatingAdmissionWebhook准入控制器 主要作用就是对操作做验证性质的准入,并行操作
-
MutatingAdmissionWebhook准入控制器 主要作用就是对操作做修改性质的准入,串行操作,不具备明确的顺序,需要注意操作对象的范围,防止出现预期之外的修改操作。
-
开发:
准入控制器其实就是一个http服务,可以通过下面demo开发一个简单的webhook服务,也可以借助开源的k8swebhook脚手架进行快速开发Demo
import (
"encoding/json"
"io"
admissionv1 "k8s.io/api/admission/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
"net/http"
)
func main() {
h := http.HandlerFunc(