返回

深入解析 Kubernetes MutatingAdmissionWebhook

见解分享

Kubernetes MutatingAdmissionWebhook 是一种 Admission Controller,可在将数据持久化到 Kubernetes API 服务器之前拦截到服务器的请求。与传统的 Admission Controller 相比,它具有更大的灵活性,因为可以将其部署为独立服务,无需在 kube-apiserver 中编译为二进制文件。

MutatingAdmissionWebhook 的主要功能是修改请求中的资源对象,从而在持久化到 API 服务器之前验证和调整它们。这使其成为执行各种任务的强大工具,例如:

  • 数据验证: 确保资源对象符合特定的规则和限制。
  • 自动补全: 在创建或更新资源对象时添加缺失或可选字段。
  • 增强: 将附加数据或行为注入资源对象中。

MutatingAdmissionWebhook 的工作原理

MutatingAdmissionWebhook 是通过 Kubernetes Admission Control Framework 实现的。当 API 服务器收到请求时,它会检查是否有针对该请求的任何 MutatingAdmissionWebhook。如果有,服务器会将请求发送到 Webhook,并等待其响应。

Webhook 可以选择修改请求中的资源对象,并将其修改后的版本返回给 API 服务器。如果 Webhook 返回错误,则请求将被拒绝。

MutatingAdmissionWebhook 的优势

MutatingAdmissionWebhook 具有以下优点:

  • 灵活性: 可以将其部署为独立服务,无需在 kube-apiserver 中编译为二进制文件。
  • 可重用性: 可以跨多个集群和命名空间重用。
  • 可扩展性: 可以水平扩展以处理高负载。
  • 可观察性: 可以监控和记录 Webhook 的活动,以进行故障排除和审计。

部署 MutatingAdmissionWebhook

部署 MutatingAdmissionWebhook 涉及以下步骤:

  1. 创建 CustomResourceDefinition (CRD) 以定义 Webhook 资源。
  2. 创建一个服务来公开 Webhook 的 HTTP 端点。
  3. 创建一个 Deployment 或 StatefulSet 来运行 Webhook 容器。
  4. 将 Webhook 注册到 Kubernetes API 服务器中。

有关详细说明,请参阅 Kubernetes 文档。

MutatingAdmissionWebhook 的示例

以下是一个简单的 MutatingAdmissionWebhook 示例,它在创建或更新 Deployment 资源对象时自动设置其 .spec.replicas 字段:

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingAdmissionWebhook
metadata:
  name: my-webhook
  labels:
    app: my-webhook
spec:
  rules:
  - apiGroups:
    - apps
    apiVersions:
    - v1
    resources:
    - deployments
    operations:
    - CREATE
    - UPDATE
  failurePolicy: Fail
  matchPolicy: Equivalent
  sideEffects: None
  admissionReviewVersions:
  - v1
  webhook:
    clientConfig:
      service:
        name: my-webhook-service
        namespace: my-namespace
        path: /mutate

结论

MutatingAdmissionWebhook 是一个强大的工具,可用于在数据持久化之前拦截和修改 Kubernetes API 服务器中的请求。它提供了更大的灵活性、可重用性和可扩展性,使其成为执行各种任务的理想选择,例如数据验证、自动补全和增强。通过了解其工作原理、优势和部署步骤,可以有效利用 MutatingAdmissionWebhook 来增强 Kubernetes 集群的安全性和功能。