2. Kubernetes 准入控制基础
2.1 什么是准入控制
准入控制(Admission Control)是 Kubernetes API Server 请求处理链中的一个关键环节,位于请求经过认证(Authentication)和授权(Authorization)之后、对象被持久化到 etcd 之前。准入控制器会拦截发往 API Server 的请求,并根据预定义的规则决定是否允许该请求继续执行。
Kubernetes 内置了多种准入控制器,例如 NamespaceLifecycle、LimitRanger、ResourceQuota、PodSecurity 等。从功能上划分,准入控制分为两类:
- Mutating(变更)准入控制:允许修改请求对象的内容,例如注入 Sidecar 容器、设置默认资源限制。
- Validating(验证)准入控制:仅校验请求对象是否符合策略,不允许修改对象内容,例如检查镜像来源是否在白名单内。
两类准入控制器按顺序执行:先执行所有 Mutating 控制器,再执行所有 Validating 控制器。这种设计确保对象在被最终验证前已经过必要的默认值填充和策略注入。
2.2 Mutating 与 Validating Webhook 的区别
Webhook 是 Kubernetes 提供的扩展机制,允许集群管理员通过 HTTP 回调将自定义的准入控制逻辑集成到 API Server 的处理链中。MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 是两种内置的准入控制器,它们分别负责调用外部 Webhook 服务。
| 对比维度 | Mutating Webhook | Validating Webhook |
|---|---|---|
| 执行阶段 | 先执行(在 Validating 之前) | 后执行(在 Mutating 之后) |
| 核心能力 | 可以修改请求对象(Patch) | 只能校验,不能修改对象 |
| 典型用途 | 注入 Sidecar、设置默认值、修改资源字段 | 策略校验、合规检查、安全准入 |
| 失败策略 | 支持 Fail 或 Ignore |
支持 Fail 或 Ignore |
| 超时设置 | 默认 10 秒,可配置 | 默认 10 秒,可配置 |
| 请求体 | 包含 AdmissionRequest 和 AdmissionResponse |
包含 AdmissionRequest 和 AdmissionResponse |
2.3 Webhook 在集群中的作用
Webhook 在 Kubernetes 集群中承担着策略执行、安全加固、自动化运维等关键职责。以下是 Webhook 在集群中的主要作用:
- 安全准入:阻止特权容器、禁止 hostNetwork 使用、限制镜像来源、强制 Pod 安全标准。
- 资源治理:自动注入资源请求/限制、添加节点亲和性规则、注入 Pod 反亲和性。
- 运维自动化:自动注入日志采集 Sidecar、监控 Agent、服务网格 Sidecar(如 Istio)。
- 多租户隔离:强制命名空间标签、注入网络策略、限制跨命名空间访问。
- 合规审计:记录所有变更操作、校验是否符合组织策略、生成审计日志。
2.4 Webhook 配置示例
以下是一个 MutatingWebhookConfiguration 的配置示例,展示了如何注册一个外部 Webhook 服务:
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: example-mutating-webhook
webhooks:
- name: mutate.example.com
clientConfig:
service:
name: webhook-service
namespace: webhook-system
path: /mutate
caBundle: <base64-encoded-ca-cert>
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
admissionReviewVersions: ["v1"]
sideEffects: None
timeoutSeconds: 10
failurePolicy: Fail
namespaceSelector:
matchLabels:
webhook-injection: enabled
2.5 本章小结
准入控制是 Kubernetes 集群安全与策略执行的核心机制,Mutating 和 Validating Webhook 分别承担了对象修改和策略校验的职责。理解 Webhook 在 API Server 请求链中的位置、执行顺序以及配置方式,是后续优化 Webhook 超时设置、提升 Operator 处理容量的基础。下一章将深入分析 Webhook 超时对 Operator 性能的具体影响。