--- title: Rancher Webhook ---
Rancher-Webhook 是 Rancher 的重要组件,它与 Kubernetes 结合使用,用于增强安全性并为 Rancher 管理的集群启用关键功能。 如 [Kubernetes 文档](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/)中所述,它与 Kubernetes 的可扩展准入控制器集成,允许 Rancher-Webhook 检查发送到 Kubernetes API Server 的特定请求,添加自定义和 Rancher 相关的验证,以及 Rancher 相关请求的变化。Rancher-Webhook 使用 `rancher.cattle.io` `ValidatingWebhookConfiguration` 和 `rancher.cattle.io` `MutatingWebhookConfiguration` 管理要验证的资源,并覆盖任何手动编辑。 Rancher 将 Rancher-Webhook 作为单独的 deployment 和服务部署在 local 和下游集群中。Rancher 使用 Helm 管理 Rancher-Webhook。需要注意的是,Rancher 可能会覆盖用户对 Helm 版本所做的修改。要安全地修改这些值,请参阅[自定义 Rancher-Webhook 配置](#自定义-rancher-webhook-配置) 每个 Rancher 版本都设计为与某个具体版本的 Webhook 兼容,为方便起见,下面提供了各版本的兼容列表。 **注意:** Rancher 负责管理 webhook 的部署和升级。在多数情况下,不需要用户干预来确保 webhook 版本与你正在运行的 Rancher 版本兼容。 | Rancher Version | Webhook Version | Availability in Prime | Availability in Community | |-----------------|-----------------|-----------------------|---------------------------| | v2.7.17 | v0.3.13 | ✓ | N/A | | v2.7.16 | v0.3.12 | ✓ | N/A | | v2.7.15 | v0.3.11 | ✓ | N/A | | v2.7.14 | v0.3.11 | ✓ | N/A | | v2.7.13 | v0.3.8 | ✓ | N/A | | v2.7.12 | v0.3.7 | ✓ | N/A | | v2.7.11 | v0.3.7 | ✓ | N/A | | v2.7.10 | v0.3.6 | ✓ | ✓ | | v2.7.9 | v0.3.6 | ✗ | ✓ | | v2.7.8 | v0.3.6 | ✗ | ✓ | | v2.7.7 | v0.3.6 | ✓ | ✓ | | v2.7.6 | v0.3.5 | ✓ | ✓ | | v2.7.5 | v0.3.5 | ✓ | ✓ | | v2.7.4 | v0.3.4 | ✓ | ✓ | | v2.7.3 | v0.3.3 | ✓ | ✓ | | v2.7.2 | v0.3.2 | ✓ | ✓ | | v2.7.1 | v0.3.0 | ✓ | ✓ | | v2.7.0 | v0.3.0 | ✓ | ✓ | ## 为什么我们需要它? Rancher-Webhook 对于让 Rancher 保护集群免受恶意攻击并启用各种功能至关重要。 Rancher 依赖 Rancher-Webhook 作为其功能的组成部分。如果没有 Webhook,Rancher 将不是一个完整的产品。 它为 Rancher 管理的集群提供了必要的保护,防止安全漏洞并确保集群的一致性和稳定性。 ## Webhook 验证哪些资源? 你可以在 [webhook 仓库](https://github.com/rancher/webhook/blob/release/v0.4/docs.md)中找到 webhook 当前验证的资源列表。这些文档按组/版本(顶级标题)和资源(下一级标题)进行组织。可以通过查看与特定版本标签关联的 `docs.md` 文件来找到特定于一个版本的检查。请注意,`v0.3.6` 之前的 webhook 版本没有此文件。 ## 绕过 Webhook 有时,你必须绕过 Rancher 的 webhook 验证才能执行紧急还原操作或修复其他关键问题。避开操作是彻底的,这意味着在使用它时不会应用任何 webhook 验证或更改。不可能指定绕过某些验证,而让其他验证仍然可用。它们要么全部被绕过,要么全部处于活动状态。 :::danger Rancher 的 webhook 提供关键的安全保护。只有在所有其他选项都用尽之后,管理员才需要在特定情况下绕过 webhook。此外,应仔细控制绕过 webhook 的权限,切勿将该权限授予非管理员用户。 ::: 要绕过 webhook,请模拟 `rancher-webhook-sudo` 服务账号和 `system:masters` 组(两者都是必需的): ```bash kubectl create -f example.yaml --as=system:serviceaccount:cattle-system:rancher-webhook-sudo --as-group=system:masters ``` ## 自定义 Rancher-Webhook 配置 你可以通过 Helm 安装 Rancher-Webhook 时添加自定义 Helm values。在 Rancher-Webhook chart 的安装过程中,Rancher 会检查自定义的 Helm values。这些自定义值必须在 `cattle-system` 命名空间中,名称为 `rancher-config` 的 ConfigMap 的 data 属性下,增加 `rancher-webhook` 的配置定义。此键的值必须是有效的 YAML。 ```yaml apiVersion: v1 kind: ConfigMap metadata: name: rancher-config namespace: cattle-system labels: app.kubernetes.io/part-of: "rancher" data: rancher-webhook: '{"port": 9553, "priorityClassName": "system-node-critical"}' ``` Rancher 会在检测到对 ConfigMap 值的更改时重新部署 Rancher-Webhook Chart。 ### 在 Rancher 安装过程中自定义 Rancher-Webhook 使用 Helm 安装 Rancher chart 时,可以在 local 集群中将自定义的 Helm values 添加到 Rancher-Webhook。Rancher-Webhook Chart 中的所有值都可以通过 `webhook` 名称下的嵌套变量访问。 这些值在安装过程中会同步到 `rancher-config` ConfigMap 中。 ```bash helm install rancher rancher-