K8s中Webhook的使用

k8s webhook讲解及示例

大家好,今天我们要探讨的是Kubernetes(K8s)中的Mutating Webhooks和Validating Webhooks,以及它们在外部准入控制中的角色。在K8s中,当我们创建、更新或删除K8s资源时,可以利用Webhook机制进行准入控制,从而对资源进行精细化管理。

首先,我们来了解下Mutating Webhooks和Validating Webhooks的区别。Mutating Webhooks,也就是变更Webhooks,允许我们在资源真正落盘前对其进行修改。例如,我们可以对传入的YAML配置进行变更,如设置默认值、添加标签(labels)或注解(annotations)等。而Validating Webhooks则负责校验资源配置是否符合我们的预期和规则,这是两种Webhooks的基本职能。

现在,让我们深入了解一下这两种Webhooks的工作机制。K8s的官方文档提供了Webhooks的详细说明,将Webhooks描述为对请求进行HTTP回调的机制。这里有两种类型的Webhooks:验证性的(Validation)和变更性质的(Mutating)。我们可以针对这两种Webhooks进入具体的文档查看详细的解释和使用方法。

在实践中,我们主要通过Group/Version/Kind(GVK)来使用这些Webhooks。通过参考K8s官方文档和代码库中的测试示例,我们可以获取到如何定义和实现Webhooks的具体方法。例如,通过定义AdmissionReview函数来处理传入的API对象,并根据请求的版本来执行相应的逻辑。

接下来,让我们看一下实际的示例代码。在这些示例中,我们可以看到如何接收一个AdmissionReview对象,并对其进行处理。AdmissionReview对象包含了请求的Pod YAML配置,我们可以在响应中对这些配置进行修改或验证。示例代码还展示了如何根据不同的场景,如延迟响应、拒绝请求或添加标签等,来设置Webhooks的逻辑。

此外,示例中还介绍了如何处理不同版本的请求,通过委托给旧版本的处理逻辑来实现版本兼容。这些示例代码提供了一个很好的参考,帮助我们理解Webhooks的实现细节。

总的来说,通过今天的分享,我们详细了解了K8s中Mutating Webhooks和Validating Webhooks的作用和实现方法。通过利用这些Webhooks,我们可以在资源被提交到K8s之前对其进行详细的检查和修改,从而实现更加灵活和精细化的资源管理。希望这次的分享能帮助大家更好地理解和使用K8s的Webhooks功能。谢谢大家!



https://www.google.com/search?q=k8s+webhook%E8%AE%B2%E8%A7%A3%E5%8F%8A%E7%A4%BA%E4%BE%8B

了解Kubernetes三大门神之一Webhook, Admission Webhook是为了增强安全性的

分成两种,Admission WebhookMutating Webhook


k8s 中webhook有什么作用?源代码在哪个目录下?如何使用?


在 Kubernetes(k8s)中,Webhook 是一种机制,用于在某些事件发生时触发自定义的操作。Webhook 可以用于验证、修改或拒绝 Kubernetes 对象的请求。常见的 Webhook 类型包括 Admission Webhook 和 Mutating Webhook。

  • Admission Webhook: 用于验证和拒绝请求。可以用于实施自定义策略,例如访问控制、安全策略等。

  • Mutating Webhook: 用于修改请求中的对象。可以用于自动修改或补充创建或更新的对象。

源代码位置:
Kubernetes Webhook 的源代码通常位于 Kubernetes 源代码树的 staging/src/k8s.io/api/admission 目录中。

使用方式:
使用 Webhook 需要以下步骤:

  1. 创建 Webhook Server: 编写 Webhook 服务器的代码,用于处理来自 Kubernetes API Server 的请求。

  2. 创建 AdmissionConfiguration 或 MutatingWebhookConfiguration: 创建相应的 Kubernetes 对象,告诉 Kubernetes 在哪里找到 Webhook。

  3. 部署 Webhook Server: 部署 Webhook 服务器,确保它能够被 Kubernetes API Server 访问。

  4. 测试: 测试 Webhook 是否正常工作。

具体实现和配置可能因使用的语言和框架而异。您可以查阅 Kubernetes 文档以获取更详细的指南和示例代码。


Admission WebhookMutating Webhook具体有什么不同?请举例说明


Admission WebhookMutating Webhook 是两种不同类型的 Kubernetes Webhook,它们在处理请求时有着不同的功能和用途。

  1. Admission Webhook:

    • 作用: Admission Webhook 用于在 Kubernetes 对象创建、更新或删除之前,对请求进行验证、审批或拒绝。它允许您定义自定义的策略,确保请求符合您的安全性、合规性或其他自定义标准。

    • 示例场景: 实施访问控制、验证对象规范、审批策略等。例如,可以使用 Admission Webhook 阻止某些用户或服务账户创建特定类型的 Pod。

  2. Mutating Webhook:

    • 作用: Mutating Webhook 用于在 Kubernetes 对象创建或更新时,修改请求中的对象。它可以用于自动修正或补充对象的属性,而无需用户手动操作。

    • 示例场景: 自动注入 sidecar 容器、设置默认标签、修改容器规格等。例如,可以使用 Mutating Webhook 在每个创建的 Pod 中注入特定的 sidecar 容器。

示例场景

假设有一个 Admission Webhook 和 Mutating Webhook 用于处理 Pod 创建请求:

  • Admission Webhook 示例:

    • 场景: 阻止某个特定的命名空间创建具有特定标签的 Pod。
    • 操作: Admission Webhook 验证请求中的标签,并拒绝不符合条件的请求。
  • Mutating Webhook 示例:

    • 场景: 在每个创建的 Pod 中自动添加一个注释。
    • 操作: Mutating Webhook 修改请求中的 Pod 对象,添加指定的注释。

这些示例突显了 Admission Webhook 用于审批和验证请求,而 Mutating Webhook 用于在创建或更新时修改对象。


Kubernetes三大门神都有什么?


在 Kubernetes 中,”三大门神” 通常指的是 Admission Controllers,它们是 Kubernetes API Server 中的插件,用于对请求进行控制和验证。三个主要的 Admission Controllers 包括:

  1. Namespace Lifecycle (Namespace) Admission Controller:

    • 作用: 管理命名空间的生命周期,负责确保命名空间的创建、更新和删除符合规范和策略。
    • 示例功能: 防止命名空间的创建或删除,强制执行命名空间的命名规范。
  2. ResourceQuota Admission Controller:

    • 作用: 负责实施资源配额,限制每个命名空间中的对象数量和资源使用。
    • 示例功能: 防止一个命名空间中创建过多的 Pod 或其他资源,确保资源的合理分配和使用。
  3. Pod Security Policies (PSP) Admission Controller:

    • 作用: 实施 Pod 安全策略,强制执行安全标准以保护集群安全。
    • 示例功能: 防止创建不安全的 Pod,强制执行容器的安全上下文和访问控制规则。

这些 Admission Controllers 通过拦截请求并在其被持久化到 etcd 之前进行验证和处理,确保集群中的操作符合安全性和配置策略。在实际使用中,可以根据需求启用或禁用这些 Admission Controllers。


[云原生]深入了解K8S准入控制

kubernetes中开发自定义webhook