概述
AdmissionRegistration API
介绍
AdmissionRegistration API 核心功能:用于注册和管理 Kubernetes 的 动态准入控制 Webhook,允许用户在不修改 API Server 代码的情况下扩展准入控制逻辑。
主要分为两类:
- MutatingAdmissionWebhook
- 用于 修改 API 请求对象(如自动注入 Sidecar 容器)
- ValidatingAdmissionWebhook
- 用于 验证 API 请求对象(如检查资源是否符合安全策略)
核心类型
在 admissionregistration.k8s.io/v1 中定义了以下关键资源:
- MutatingWebhookConfiguration
- 用于注册多个 修改型 Webhook。
- 每个 Webhook 指定:
- 触发规则(匹配哪些 API 请求)
- 调用的 Webhook 服务地址
- 失败策略(如拒绝请求或忽略错误)
- ValidatingWebhookConfiguration
- 用于注册多个 验证型 Webhook。
- 结构与
MutatingWebhookConfiguration类似,但 Webhook 不能修改对象。
核心 API 方法
AdmissionRegistration API 通过标准的 Kubernetes REST 接口提供以下操作:
| HTTP 方法 | 路径 | 功能 |
|---|---|---|
GET |
/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations |
列出所有 MutatingWebhookConfiguration |
POST |
同上 | 创建新的 MutatingWebhookConfiguration |
PUT |
/apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/{name} |
更新指定配置 |
DELETE |
同上 | 删除配置 |
GET |
/apis/admissionregistration.k8s.io/v1/validatingwebhookconfigurations |
列出所有 ValidatingWebhookConfiguration |
POST |
同上 | 创建新的 ValidatingWebhookConfiguration |
关键字段解析
(1) WebhookClientConfig
type WebhookClientConfig struct {
URL *string `json:"url,omitempty"` // Webhook 服务 URL(直接调用)
Service *ServiceReference `json:"service,omitempty"` // 通过 Service 调用
CABundle []byte `json:"caBundle,omitempty"` // CA 证书(用于 TLS 验证)
}
- 支持两种调用方式:
- 直接指定 URL(如
https://webhook.example.com:443/admit) - 通过 Kubernetes Service 调用(推荐)
- 直接指定 URL(如
(2) RuleWithOperations
type RuleWithOperations struct {
Operations []OperationType `json:"operations"` // 操作类型:CREATE, UPDATE, DELETE, *
Rule Rule `json:"rule"` // 资源匹配规则
}
-
示例:匹配所有 Pod 的 CREATE/UPDATE 操作:
rules: - operations: ["CREATE", "UPDATE"] apiGroups: [""] apiVersions: ["v1"] resources: ["pods"]
(3) FailurePolicy
type FailurePolicyType string
const (
Ignore FailurePolicyType = "Ignore" // 失败时忽略(继续请求)
Fail FailurePolicyType = "Fail" // 失败时拒绝请求
)
工作原理
- API Server 接收请求(如创建 Pod)
- 检查匹配的 Webhook 规则
- 通过
rules字段过滤
- 通过
- 调用 Webhook 服务
- 发送
AdmissionReview请求
- 发送
- 处理响应
- 根据
allowed和patch字段决定是否允许请求
- 根据