7.3. Webhook 准入插件
除了 Red Hat OpenShift Service on AWS 默认准入插件外,也可以通过称为 webhook 服务器的 webhook 准入插件来实施动态准入,从而扩展准入链的功能。Webhook 服务器通过 HTTP 在定义的端点调用。
Red Hat OpenShift Service on AWS 中有两个类型的 webhook 准入插件:
- 在准入过程中, 变异(mutating)准入插件可以执行任务,如注入关联性标签。
- 在准入过程结束时,验证(validating)准入插件会用来确保对象被正确配置。例如,确保关联性标签与预期一样。如果验证通过,Red Hat OpenShift Service on AWS 会按照配置来调度对象。
当 API 请求到来时,变异或验证准入插件会使用配置中的外部 webhook 列表,并并行调用它们:
- 如果所有 webhook 都批准请求,准入链将继续。
- 如果任何 webhook 拒绝了请求,则拒绝准入请求。而拒绝的原因是第一个拒绝的原因。
- 如果多个 webhook 拒绝准入请求,则只有第一个拒绝原因返回给用户。
-
如果在调用 webhook 时遇到错误,请求将被拒绝。或者根据错误策略的设置,webhook 会被忽略。如果错误策略被设置为
Ignore
,则失败时请求将被无条件接受。如果策略被设置为Fail
,失败时请求将被拒绝。使用Ignore
可能会为所有客户端造成无法预计的行为。
下图演示了调用多个 webhook 服务器的序列准入链进程。
图 7.1. 带有变异准入插件和验证准入插件的 API 准入链
webhook 准入插件用例示例。在这个示例中,所有 pod 都必须具有一组通用标签。在本例中,变异准入插件可以注入标签,验证准入插件可以检查标签是否如预期。随后,Red Hat OpenShift Service on AWS 会调度包含所需标签的 pod,并拒绝那些不需要的 pod。
Webhook 准入插件常见使用案例包括:
- 命名空间保留。
- 限制由 SR-IOV 网络设备插件管理的自定义网络资源。
- Pod 优先级类验证。
注意
Red Hat OpenShift Service on AWS 中的最大默认 webhook 超时值为 13 秒,且无法更改。