一 官网
(1)什么是准入控制器? -->'重要'
(2)为什么需要准入控制器? -->'重要'
(3)如何启用一个准入控制器? -->'重要'
(4)怎么关闭准入控制器?
(5)哪些插件是默认启用的? -->'知道'
(6)每个'准入控制器的作用'是什么? -->'了解核心'
二 进入主题
(1)准入控制器的概念
准入控制器是'一段代码',它会在'请求'通过'认证和授权'之后、'对象被持久化之前'-->'拦截'到达 API 服务器的'请求'
详细:经过'token认证'(身份认证)和'rbac'(权限校验),对象持久化之前'没有存入etcd之前',进行拦截做一些事情
(2)准入控制器的特点
如果任'何一个阶段-->api请求到对象持久化的过程中'的任何'准入控制器'拒绝'deny'了该请求,则'整个请求'将立即'被拒绝',并向终端'client'用户返回一个'错误(error)'
例如:etcd集群如何是偶数个'默认只能是奇数个',就会'提示'不让'etcd集群'应用创建成功
(3)特殊的准入控制器
限制: '准入控制器'被'编译'进 kube-apiserver '二进制文件',只能在api-server'启动时启动',并且只能由'集群管理员配置'
++++ 有两个'特殊的'准入控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook ++++
特殊的地方:'MutatingAdmissionWebhook' 和 'ValidatingAdmissionWebhook'不是和api-server耦合在一起,而是通过Admission webhooks的方式实现'动态配置'
+++ '二者的特点' +++
变更(mutating)控制器可以'修改'被其'接受的对象',验证(validating)控制器则不行,主要是'校验'
它们根据 API 中的配置,'分别执行'变更和验证准入控制 webhook
(4)adminssion webhook是什么?
备注: webhook需要'开发人员'来完成,编写的化需要具备'GoLang'的基础知识
k8s api特殊的请求'生命周期'解释
(1)根据请求中的资源的版本、group等信息路由到一个'具体的api上的endpoints'上面去
(2)在'请求的过程中'会做一些"认证和授权"
(3)经过mutating准入控制器、会转发到对应的'准入控制器的webhooks'-->'开发者自己实现的'
(4)经过校验,校验scheme信息-->'原因:开发者写的不一定符合标准'
(5)进入'validting adminssion comntroller' --> 对应准入控制器的web hook (也是开发者实现)--> 例如:校验副本数、如果副本数是偶数,则拒绝,则返回请求,client就会看到相应的报错信息
(6)所有的'准入控制器都走完了',才会'存入etcd'当中去
备注:准入控制过程分为'两个阶段';第一阶段,运行'变更准入'控制器,第二阶段运行'验证准入'控制器
补充: 某些控制器'既是'变更准入控制器'又是'验证准入控制器
(5)创建配置一个 Admission Webhook
1.16.2之后和1.19.x版本之后'默认开启的'
说明: 如果'默认开启'又进行'显示声明'也'不会报错'
测试: 1.18.4和1.19.3'默认开启'
检查集群中是否启用了准入注册 API
自己写一个 web hook