搜索

4.7.2. Admission Webhooks

download PDF

在 OpenShift Container Platform 中,您可以使用准入 webhook 对象,在 API 准入链中调用 Webhook 服务器。

您可以配置两类准入 Webhook 对象:

配置 webhook 和外部 Webhook 服务器超出了本文档的范围。但是,webhook 必须与一个接口关联才能与 OpenShift Container Platform 正常工作。

重要

Admission webhook 只是一个技术预览功能。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需红帽技术预览功能支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview/

当对象实例化时,OpenShift Container Platform 会发出一个 API 调用来接受该对象。在准入过程中,变异准入控制器 可以调用 Webhook 来执行任务,如注入关联性标签。在准入过程结束时,验证准入控制器 可以调用 webhook 来确保正确配置了对象,如验证关联性标签。如果验证通过,OpenShift Container Platform 会按照配置来调度对象。

当 API 请求进入时,变异或验证准入控制器将使用配置中的外部 webhook 列表,并并行调用它们:

  • 如果所有 webhook 都批准请求,准入链将继续。
  • 如果有任何 webhook 拒绝了请求,则准入请求将被拒绝,且其实现的原因是 第一个 webhook 拒绝原因。

    如果多个 webhook 拒绝准入请求,则只有第一个 webhook 才会返回给用户。

  • 如果在调用 Webhook 时遇到错误,该请求将被拒绝,或忽略 Webhook。

准入控制器和 webhook 服务器之间的通信需要使用 TLS 保护。生成 CA 证书并使用证书为 webhook 服务器使用的服务器证书签名。PEM 格式的 CA 证书使用某种机制(如 Service Serving 证书 Secret )提供给准入控制器。

下图说明了此过程有两个准入 Webhook,它们调用多个 webhook。

API 准入阶段

准入 Webhook 的一个简单示例用例是资源的各种验证。例如,您有一个基础架构要求所有 pod 都有一组通用的标签,如果 pod 没有这些标签,则您不想保留任何 pod。您可以编写 webhook 来注入这些标签和另一个 Webhook,以验证标签是否存在。然后,OpenShift Container Platform 将调度具有标签的 pod,并传递验证并拒绝因为缺少标签而未通过的 pod。

一些常见用例包括:

  • 变异资源,将 side-car 容器注入 pod。
  • 限制项目以阻止项目中的一些资源。
  • 自定义资源验证,以对依赖字段执行复杂验证。

4.7.2.1. Admission Webhook 的类型

集群管理员可以在 API 服务器的 准入链中包括 变异准入 webhook 或验证准入 webhook。

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

Mutating Admission Webhook 配置示例

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

1
指定变异准入 Webhook 配置。
2
准入 webhook 对象的名称。
3
要调用的 webhook 的名称。
4
如何连接、信任和将数据发送到 webhook 服务器的信息。
5
创建前端服务的项目。
6
前端服务的名称。
7
用于准入请求的 webhook URL。
8
为 webhook 服务器使用的服务器证书签名的 PEM 编码的 CA 证书。
9
定义 API 服务器何时应使用此控制器的规则。
10
触发 API 服务器调用此控制器的操作:
  • create
  • update
  • delete
  • connect
11
指定如果 webhook 准入服务器不可用时策略应如何操作。Ignore (允许/失败打开)或 Fail (块/失败关闭)。

在准入过程 的验证阶段会调用验证准入 Webhook。在此阶段,可以在特定的 API 资源强制不能改变,以确保资源不会再次更改。Pod Node Selector 也是验证准入的一个示例,通过确保所有 nodeSelector 字段都受到项目的节点选择器限制。

Validating Admission Webhook 配置示例

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

1
指定验证准入 Webhook 配置。
2
webhook 准入对象的名称。
3
要调用的 webhook 的名称。
4
如何连接、信任和将数据发送到 webhook 服务器的信息。
5
创建前端服务的项目。
6
前端服务的名称。
7
用于准入请求的 webhook URL。
8
为 webhook 服务器使用的服务器证书签名的 PEM 编码的 CA 证书。
9
定义 API 服务器何时应使用此控制器的规则。
10
触发 API 服务器调用此控制器的操作。
  • create
  • update
  • delete
  • connect
11
指定如果 webhook 准入服务器不可用时策略应如何操作。Ignore (允许/失败打开)或 Fail (块/失败关闭)。
注意

失败打开可能会导致所有客户端的行为无法预计。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.