代表性面试主题

如何安全使用 Kubernetes ValidatingAdmissionPolicy?

后端困难
Offer.cc 编辑团队发布 更新

题干

你需要阻止生产 Deployment 使用未批准镜像和不安全的主机设置。如何设计并发布 Kubernetes ValidatingAdmissionPolicy,同时不阻塞故障恢复?

题干与适用场景

Kubernetes ValidatingAdmissionPolicy 使用 CEL 评估 API 请求。策略定义与绑定配合使用,绑定选择资源并定义执行动作。它提供靠近 API Server 的校验路径,但范围过宽或策略不可用可能拒绝合法的恢复操作。

假设生产命名空间有标签,镜像来源可在准入字段中取得,平台工程师负责策略。设计必须区分硬性安全规则与告警,支持试运行,并保留有审计的紧急路径。

面试官考察点

面试官关注策略定义与绑定是否分离、失败行为是否明确、资源匹配是否收窄、例外模型是否可测试。强回答会讨论 CEL 类型检查、版本化发布、审计指标,以及策略引擎或依赖数据不可用时的行为。

普通回答只写一个拒绝坏 YAML 的表达式。强回答会解释范围、动作级别、兼容性、可观测性和回滚。

回答前需要澄清的问题

  • 涉及哪些 API group、版本、命名空间和操作?
  • 规则检查镜像身份、摘要固定、主机访问,还是全部?
  • 试点阶段应拒绝、警告还是仅审计?
  • 哪些控制器或系统命名空间需要例外,谁负责批准?
  • 策略阻止事故修复时,恢复路径是什么?

如果规则依赖 CEL 无法可靠访问的外部状态,应保持策略本地化,并用独立控制器完成复杂检查。如果例外范围很大,策略会产生虚假安全感。

30 秒回答框架

“我会定义小而有类型的 CEL 规则,只绑定到生产工作负载和相关操作。先以审计或警告模式运行,按负责人统计违规,再逐条转为拒绝。例外要窄、可审计,并有经过演练的紧急路径。我会监控准入延迟、拒绝率和恢复成功率;策略不安全时回滚绑定。”

分步骤深入解答

  1. 定义不变量。 分别编写镜像仓库白名单、摘要要求和生产禁止 hostNetwork 的规则,避免一个难测难解释的大表达式。
  2. 类型检查 CEL。 针对资源 schema 验证表达式,覆盖缺失字段、列表、更新和删除操作,把 fixture 纳入评审流程。
  3. 用绑定收窄范围。 只匹配生产命名空间、必要工作负载和需保护的操作,让团队可以独立采用不同规则。
  4. 选择执行动作。 先审计或警告,负责人修复后再拒绝,并把动作写入变更历史。
  5. 设计例外。 只豁免指定系统身份或命名空间,要求过期或批准记录,并对使用例外告警。
  6. 安全回滚。 策略定义版本化,回滚时禁用绑定而不是删除历史,确认文档化路径可让紧急 Deployment 继续。

替代方案包括访问外部数据的校验 webhook,或用于标准化的变更加校验组合。确定性、本地化且必须靠近 API Server 执行的不变量适合内建策略。

高质量示范回答

“我会创建三个策略:仓库白名单、镜像摘要必须存在、生产 Deployment 禁止 hostNetwork。绑定只匹配带标签的生产命名空间。试点先审计一周,给负责人发送违规报告,修正误报后再启用拒绝。平台和 break-glass 身份是唯一例外,要求过期时间和审计事件。我会告警准入延迟和被拒绝的恢复变更;事故暴露不安全规则时,通过禁用绑定回滚。”

常见错误

  • 错误表现: 匹配所有命名空间和操作 → 失败原因: 系统控制器和恢复路径被阻塞 → 修正方法: 收窄绑定范围。
  • 错误表现: 把警告当作强制执行 → 失败原因: 用户误以为已获得安全保证 → 修正方法: 明确动作级别和升级条件。
  • 错误表现: 对缺失字段使用无类型 CEL → 失败原因: 更新和旧 API 版本行为不同 → 修正方法: 类型检查并测试缺失字段。
  • 错误表现: 让例外永久存在 → 失败原因: 绕过会变成真正的策略 → 修正方法: 要求过期时间、负责人和审计。

追问及应对

策略表达式有语法错误怎么办?

Kubernetes 会验证策略定义并报告错误,不会接受无效表达式。仍应使用 fixture 评审,并在行为确认前让绑定保持审计模式。

规则需要外部漏洞数据库怎么办?

不要假设 CEL 可以获取任意外部状态。使用负责新鲜度、超时和失败语义的控制器或 webhook;本地不变量继续由内建策略执行。

拒绝规则阻止修复时,值班工程师如何恢复?

提供范围窄、有审计、带过期的 break-glass 身份或命名空间,记录批准,并对使用告警。强制前先演练。

什么时候应该移除策略?

误报持续过高、准入延迟威胁 API Server,或不变量已经由更强控制接管时,禁用或移除绑定。保留历史和指标。

公开来源

同类题目