跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes准入控制
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes准入控制 = '''准入控制(Admission Control)'''是Kubernetes安全机制的核心组件之一,它在API请求被持久化到集群状态之前,对请求进行拦截、验证和修改。准入控制通过一系列插件(称为"准入控制器")实现,确保集群操作符合安全策略、资源限制和其他自定义规则。 == 准入控制的工作原理 == Kubernetes API服务器处理请求的流程中,准入控制发生在认证(Authentication)和授权(Authorization)之后,对象持久化之前: <mermaid> sequenceDiagram participant User participant API_Server participant Admission_Controllers participant etcd User->>API_Server: 提交请求(如创建Pod) API_Server->>API_Server: 认证 & 授权 API_Server->>Admission_Controllers: 调用准入控制器链 Admission_Controllers->>API_Server: 允许/拒绝/修改请求 API_Server->>etcd: 持久化通过验证的对象 </mermaid> 准入控制器分为两类: * '''变更型准入控制器(Mutating Admission Controllers)''':可以修改请求对象 * '''验证型准入控制器(Validating Admission Controllers)''':只能验证请求,不能修改 == 内置准入控制器 == Kubernetes默认启用多个准入控制器,常见的有: {| class="wikitable" |- ! 控制器名称 !! 类型 !! 功能描述 |- | NamespaceLifecycle || 验证型 || 防止在终止的Namespace中创建新对象 |- | LimitRanger || 变更型 || 实施资源限制(如CPU/内存默认值) |- | ResourceQuota || 验证型 || 强制执行命名空间资源配额 |- | PodSecurity || 验证型 || 实施Pod安全标准(替代以前的PodSecurityPolicy) |- | DefaultStorageClass || 变更型 || 为未指定存储类的PVC设置默认值 |} == 自定义准入控制 == 通过'''动态准入控制(Dynamic Admission Control)''',用户可以创建自定义逻辑: === 准入Webhooks === 两种类型的Webhooks: * '''MutatingWebhookConfiguration''':变更请求 * '''ValidatingWebhookConfiguration''':验证请求 示例MutatingWebhook配置: <syntaxhighlight lang="yaml"> apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: name: "example.mutating.webhook" webhooks: - name: "example.mutating.webhook" rules: - apiGroups: [""] apiVersions: ["v1"] operations: ["CREATE"] resources: ["pods"] clientConfig: service: namespace: "webhook-namespace" name: "webhook-service" caBundle: "<CA证书>" admissionReviewVersions: ["v1"] sideEffects: None timeoutSeconds: 5 </syntaxhighlight> == 实际案例 == === 案例1:自动注入Sidecar容器 === 使用MutatingWebhook在Pod创建时自动注入监控Sidecar: <syntaxhighlight lang="yaml"> # Webhook返回的JSON补丁示例 [ { "op": "add", "path": "/spec/containers/-", "value": { "name": "monitoring-sidecar", "image": "monitoring:latest", "ports": [{"containerPort": 9090}] } } ] </syntaxhighlight> === 案例2:强制标签校验 === ValidatingWebhook确保所有部署必须包含"team"标签: <syntaxhighlight lang="go"> // 简化版校验逻辑 func validateDeployment(deployment *appsv1.Deployment) bool { labels := deployment.GetLabels() if _, exists := labels["team"]; !exists { return false } return true } </syntaxhighlight> == 数学原理 == 准入控制可以形式化为决策函数: <math> f(request) = \begin{cases} allow & \text{if } \bigwedge_{i=1}^{n} v_i(request) \land \bigwedge_{j=1}^{m} m_j(request) \\ deny & \text{otherwise} \end{cases} </math> 其中: * <math>v_i</math> 是第i个验证函数 * <math>m_j</math> 是第j个变更函数 == 最佳实践 == 1. '''启用必要的默认控制器''':根据集群需求配置--enable-admission-plugins 2. '''Webhook性能优化''':设置适当的timeout和failurePolicy 3. '''幂等性设计''':确保MutatingWebhook可重复应用 4. '''审计日志''':记录准入决策以便故障排查 5. '''渐进式部署''':新Webhook应先配置failurePolicy: Fail == 故障排除 == 常见问题及解决方案: * '''Webhook超时''':检查服务可用性,增加timeoutSeconds * '''证书问题''':确保证书链完整且未过期 * '''循环调用''':避免Webhook修改自己关注的资源 * '''资源版本不兼容''':指定多个admissionReviewVersions 准入控制是构建安全、合规Kubernetes集群的关键防线,通过合理配置可以显著提升集群的安全性和一致性。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)