动态准入 Webhook 概述

来自 Kubernetes 准入控制机制

准入 Webhook 是 HTTP 方式的回调,接收准入请求并对其进行相关操作。可定义两种类型的准入 Webhook,Validating 准入 Webhook 和 Mutating 准入 Webhook。使用 Validating Webhook,可以通过自定义的准入策略来拒绝请求;使用 Mutating Webhook,可以通过自定义默认值来修改请求。

Istio 使用 ValidatingAdmissionWebhooks 验证 Istio 配置,使用 MutatingAdmissionWebhooks 自动将 Sidecar 代理注入至用户 Pod。

Webhook 设置过程需要了解 Kubernetes 动态准入 Webhook 相关的知识。查阅 Kubernetes API 的相关资料,请参考 Mutating Webhook ConfigurationValidating Webhook Configuration

验证动态准入 Webhook 前置条件

请参阅平台设置说明了解 Kubernetes 提供的详细的设置说明。如果集群配置错误,Webhook 将无法正常工作。集群配置后,当动态 Webhook 和相关特性不能正常工作时,您可以通过以下步骤进行检查。

  1. 验证当前使用正确的 kubectl 和 Kubernetes 服务 支持的版本(1.23, 1.24, 1.25, 1.26):

    1. $ kubectl version --short
    2. Client Version: v1.19.0
    3. Server Version: v1.19.1
  2. admissionregistration.k8s.io/v1beta1 应是启用状态

    1. $ kubectl api-versions | grep admissionregistration.k8s.io/v1
    2. admissionregistration.k8s.io/v1
    3. admissionregistration.k8s.io/v1beta1
  3. 验证 kube-apiserver --enable-admission-plugins 配置中插件 MutatingAdmissionWebhookValidatingAdmissionWebhook 是否被启用。通过检查指定规范中的标志(--enable-admission-plugins)。

  4. 验证 Kubernetes API Server 与 Webhook 所在 Pod 的网络连通是否正常。例如错误配置 http_proxy 可能干扰 API Server 正常运行(详细信息请参阅 PRIssue)。