8.4. Webhook 准入插件类型

集群管理员可以通过 API 服务器准入链中的变异准入插件或验证准入插件调用 webhook 服务器。

8.4.1. 变异准入插件

变异(mutating)准入插件在准入过程的变异期间被调用,这允许在保留资源内容前修改资源内容。一个可通过变异准入插件调用的 webhook 示例是 Pod Node Selector 功能,它使用命名空间上的注解来查找标签选择器并将其添加到 pod 规格中。

变异准入插件配置示例

apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration 1
metadata:
  name: <webhook_name> 2
webhooks:
- name: <webhook_name> 3
  clientConfig: 4
    service:
      namespace: default 5
      name: kubernetes 6
     path: <webhook_url> 7
    caBundle: <ca_signing_certificate> 8
  rules: 9
  - operations: 10
    - <operation>
    apiGroups:
    - ""
    apiVersions:
    - "*"
    resources:
    - <resource>
  failurePolicy: <policy> 11
  sideEffects: None

1
指定一个变异准入插件配置。
2
webhook 对象的名称。将 <webhook_name> 替换为适当的值。
3
要调用的 webhook 的名称。将 <webhook_name> 替换为适当的值。
4
如何连接、信任和将数据发送到 webhook 服务器的信息。
5
创建前端服务的命名空间。
6
前端服务的名称。
7
用于准入请求的 webhook URL。将 <webhook_url> 替换为适当的值。
8
为 webhook 服务器使用的服务器证书签名的 PEM 编码的 CA 证书。将 <ca_signing_certificate> 替换为采用 base64 格式的适当证书。
9
定义 API 服务器何时应使用此 webhook 准入插件的规则。
10
一个或多个触发 API 服务器调用此 webhook 准入插件的操作。可能的值包括 createupdatedeleteconnect。将 <operation><resource> 替换为适当的值。
11
指定如果 webhook 服务器不可用时策略应如何执行。将 <policy> 替换为 Ignore (在失败时无条件接受请求)或 Fail (拒绝失败的请求)。使用 Ignore 可能会为所有客户端造成无法预计的行为。
重要

在 OpenShift Container Platform 4.3 中,由用户创建或通过变异准入插件的控制循环创建的对象可能会返回非预期的结果,特别是在初始请求中设置的值被覆盖时,我们不建议这样做。

8.4.2. 验证准入插件

在准入过程的验证阶段会调用验证准入插件。在此阶段,可以在特定的 API 资源强制不能改变,以确保资源不会再次更改。Pod Node Selector 也是一个 webhook 示例,它由验证准入插件调用,以确保所有 nodeSelector 字段均受命名空间的节点选择器限制。

验证准入插件配置示例

apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingWebhookConfiguration 1
metadata:
  name: <webhook_name> 2
webhooks:
- name: <webhook_name> 3
  clientConfig: 4
    service:
      namespace: default  5
      name: kubernetes 6
     path: <webhook_url> 7
    caBundle: <ca_signing_certificate> 8
  rules: 9
  - operations: 10
    - <operation>
    apiGroups:
    - ""
    apiVersions:
    - "*"
    resources:
    - <resource>
  failurePolicy: <policy> 11
  sideEffects: Unknown

1
指定验证准入插件配置。
2
webhook 对象的名称。将 <webhook_name> 替换为适当的值。
3
要调用的 webhook 的名称。将 <webhook_name> 替换为适当的值。
4
如何连接、信任和将数据发送到 webhook 服务器的信息。
5
创建前端服务的命名空间。
6
前端服务的名称。
7
用于准入请求的 webhook URL。将 <webhook_url> 替换为适当的值。
8
为 webhook 服务器使用的服务器证书签名的 PEM 编码的 CA 证书。将 <ca_signing_certificate> 替换为采用 base64 格式的适当证书。
9
定义 API 服务器何时应使用此 webhook 准入插件的规则。
10
一个或多个触发 API 服务器调用此 webhook 准入插件的操作。可能的值包括 createupdatedeleteconnect。将 <operation><resource> 替换为适当的值。
11
指定如果 webhook 服务器不可用时策略应如何执行。将 <policy> 替换为 Ignore (在失败时无条件接受请求)或 Fail (拒绝失败的请求)。使用 Ignore 可能会为所有客户端造成无法预计的行为。