Kubernetes 1.30:验证入站请求策略正式发布
内容提要
Kubernetes 1.30发布了ValidatingAdmissionPolicy,作为验证入站请求的新声明性替代方案。文章介绍了如何使用该策略替代简单的webhook,以确保容器安全设置符合要求。通过示例展示了创建和绑定策略的过程,并进行验证。最后强调了新特性的清晰性和可读性,以及监控策略执行的指标。
延伸解读
从 Webhook 迁移到声明式策略的注意事项
文章通过将验证 runAsNonRoot 等安全设置的 webhook 替换为 ValidatingAdmissionPolicy,展示了声明式策略的等价性。但迁移时需注意:策略表达式基于 CEL,字段名大小写敏感,如 privileged 误写为 Privileged 会导致类型检查警告。此外,策略在拒绝请求时默认在第一个失败表达式后停止评估,而 webhook 可能聚合所有错误,这会影响错误信息的完整性和调试体验。
利用变量和可选库提升策略可读性
文章指出,从 Kubernetes 1.28 起,Variable Composition 允许将重复子表达式提取为变量,CEL 可选库则能优雅处理可选字段。重构后的策略将 containers 和 securityContexts 定义为变量,并使用 optional.of 比较,使策略更简洁易读。这提示读者在编写复杂策略时,应优先使用这些特性来减少重复、降低维护成本,而不是堆砌冗长的表达式。
策略监控依赖 API Server 指标
与 webhook 不同,ValidatingAdmissionPolicy 不是独立进程,无法暴露自身指标。文章建议使用 API Server 的指标进行监控,并给出了 PromQL 示例,如计算策略检查耗时的 95 分位数和评估速率。需要注意的是,这些指标目前处于 alpha 阶段,未来版本可能变化。读者在规划监控时,应关注指标稳定性,并参考官方指标文档。
Q&A
Kubernetes 1.30中引入的ValidatingAdmissionPolicy有什么作用?
ValidatingAdmissionPolicy用于验证入站请求,作为验证入站请求的新声明性替代方案,确保容器安全设置符合要求。
如何创建和绑定ValidatingAdmissionPolicy?
可以通过定义policy的yaml文件并使用kubectl命令创建和绑定ValidatingAdmissionPolicy。
ValidatingAdmissionPolicy与webhook有什么区别?
ValidatingAdmissionPolicy是声明性的替代方案,相比于webhook,它提高了策略的清晰性和可读性。
ValidatingAdmissionPolicy的监控指标如何获取?
可以使用API服务器的指标来监控ValidatingAdmissionPolicy的执行,例如使用Prometheus查询语言。
ValidatingAdmissionPolicy的验证表达式是如何工作的?
验证表达式通过检查容器的安全上下文,确保特定的安全设置被正确配置。
在Kubernetes中如何处理验证失败的请求?
可以通过设置ValidatingAdmissionPolicy的action为Deny来拒绝验证失败的请求。