题干与适用场景
本题面向平台安全工程师。Kubernetes v1.36 引入 alpha 的清单式准入控制。策略从 API Server 本地目录加载,在处理请求前生效,因此方案必须在 etcd 不可用时工作,并提供文件式恢复路径。
面试官考察点
- 启动策略与 API 管理策略的职责分离。
- 原子校验、回滚和启动失败行为。
- 防止特权删除策略和 webhook 配置。
- 多 API Server 的配置分发与漂移检测。
- 运维逃生通道、审计和故障测试。
要保护哪些资源?
确认只保护 ValidatingAdmissionPolicy,还是也保护 binding、webhook 与 mutating 配置。匹配规则和影响范围会随答案改变。
谁拥有恢复权限?
API 不可用或策略阻止自身修复时,权威路径必须是 API Server 主机或不可变配置流水线。定义谁能改、如何审核。
有多少 API Server?
每个实例读取自己的文件。集群需要内容寻址制品、滚动顺序和配置哈希指标;单实例也要原子替换。
30 秒回答框架
“我会先安装一条经过审核的清单策略,再启用 API 管理策略。它拒绝修改或删除带保护标签的对象,名称使用保留的 .static.k8s.io 后缀。每个 API Server 接收相同版本目录并暴露配置哈希。文件变更先校验再原子切换;运行时错误保留上一版,启动时错误则快速失败。运维通过主机配置路径恢复,不能依赖被阻止的 API。”
分步骤深入解答
建立启动信任边界
在每个 API Server 启用 ManifestBasedAdmissionControlConfig,通过现有准入配置文件设置 staticManifestsDir。清单来自只读且完整性校验的制品。所有静态对象名称以 .static.k8s.io 结尾,让指标和审计记录区分文件对象与 API 对象。
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: ValidatingAdmissionPolicy
configuration:
staticManifestsDir: /etc/kubernetes/admission/static编写保护规则
启动策略匹配准入策略、binding 和 webhook 配置的 UPDATE、DELETE。只有旧对象带 platform.example.com/protected=true 时才拒绝。普通试验仍可进行,基线受到保护。
让更新具备事务性
API Server 校验整个变更集合后原子切换。运行时校验失败则保留上一版并记录错误。启动时任何清单无效都应在接收请求前失败;静默启动会重新制造要解决的启动空窗。
运营多实例集群
把相同内容寻址 bundle 渲染到每个 API Server,一次只滚动一个实例。比较配置哈希标签和准入决策指标。哈希不一致代表漂移,应停止发布并恢复已知 bundle。
保留逃生通道
静态策略不能依赖 Service、paramKind 或其他 API 对象,因为集群状态可能尚未存在。保留带审计的主机级文件替换路径,并测试过宽或畸形策略能否在不调用 API 时回退。
高质量示范回答
“我会把静态目录作为根信任,向每个 API Server 分发签名的版本化 bundle,用静态策略拒绝修改带标签的准入资源。.static.k8s.io 名称让来源可见。运行时编辑先校验再原子切换,启动时无效 bundle 直接拒绝服务。每台服务器导出配置哈希,漂移时停止灰度。恢复走审计过的主机变更,不走 API,并覆盖启动、删除尝试、畸形更新、重启和混合 bundle 测试。”
常见错误
- 用另一条 API 策略保护策略 → API 无法保护自身配置 → 把保护锚定在静态文件。
- 错误编辑直接替换活动集合 → 语法错误会移除全部保护 → 校验全集合并保留上一版。
- 带无效清单启动 → 服务器在缺少基线时运行 → 接收请求前快速失败。
- 假设 API Server 共享文件 → 实例可能执行不同策略 → 分发 bundle 并比较哈希。
- 移除所有运维逃生通道 → 策略 bug 变成事故 → 保留特权且有审计的主机恢复路径。
评分标准与自检
评分启动安全、策略匹配、原子更新、集群一致性、恢复和测试。强回答应说明静态配置为何能在无循环准入的情况下保护 API 对象,以及为何必须保留非 API 恢复通道。
追问及应对
API Server 在发布中重启怎么办?
保留旧 bundle,把静态准入成功加载作为 readiness 条件,重新接流量前比较报告的哈希。
静态策略能引用 Service webhook 吗?
不能。功能须在没有集群状态时自包含;可用 URL-only webhook 或不依赖 API 资源的 CEL 策略,并说明可用性取舍。
如何测试阻止自身删除的策略?
创建受保护测试对象,通过 API 尝试更新和删除,确认拒绝与审计记录,再从恢复路径替换静态 bundle,验证对象可恢复管理。
发布不变量是什么?
每台提供服务的 API Server 都执行相同的已批准 bundle 哈希,并且即使 API 拒绝配置修改,仍有至少一条经过审计的恢复路径。