如何验证Kubernetes YAML文件?

作者:Piotr     编译:沈建苗


本文介绍了如何确保我们已创建的文件不仅是有效的YAML,更重要的是它还遵守Kubernetes开发的最佳实践。

本文旨在充当验证Kubernetes清单文件的指南。如果您是开发人员、软件架构师、安全专家,或只是有兴趣想进一步了解创建和管理Kubernetes清单文件的质量保证流程,本文就适合您。

“向左移”理念

“向左移”(shift left)潮流起初是为了让开发人员能够负责并掌控软件生命周期的端到端流程。

如果做法得当,这意味着创建工具和支撑性组织结构,从而让开发团队可以全面拥有和控制它们创建和维护的软件,从而取得成功。如果做法不当,通常意味着将所有责任“转嫁”给开发人员,寄希望于最好的结果。按照向左移理念,创建和管理Kubernetes工件的过程也应该是开发团队的责任。

Kubernetes已经拥有强大而复杂的资源验证过程,借助以下工具:

• 准入控制器

• 通过Open Policy Agent、Kyverno或Kubewarden等工具,执行策略

• pod安全策略(1.21中已弃用)

这些工具很出色,但它们属于集群operator层,更适合作为一个平台,而不是作为完全适合标准开发人员工作流程的工具。

接下来介绍各种工具和方法,它们将验证过程的起点转移到开发工作流程,从而大大提高了整个系统的质量。

将验证向左移的目的是,让非法状态无效。这对于像YAML这样的非静态类型语言来说很难做到,但若使用合适的工具,可以做到这点。

您将学到什么?

阅读本文后,您将了解到:

• 将验证向左移对最终产品带来的影响

• 验证Kubernetes YAML文件的不同方法有哪些?

• CI/CD管道中验证过程实现自动化有什么好处?

• 了解专门用于验证不同类型的YAML文件的工具

先决条件

如果您想上手YAML,将需要以下:

• VS Code,带远程开发扩展(https://github.com/Microsoft/vscode-remote-release)

• docker desktop(https://www.docker.com/products/docker-desktop)或任何替代者(需要能够运行容器)

• 克隆该存储库(https://github.com/Piotr1215/generate-k8s-yaml)

请注意,存储库使用devcontainer,附带运行内置示例所需要的所有工具和配置。因此镜像很庞大,所以在运行容器之前对镜像进行相应的修改。

我们需要验证什么?

不妨更仔细地看一看验证过程。我们可以将验证过程分为三个不同的类别:

• YAML语法的结构验证。这是验证文件是不是有效YAML的最简单步骤。这始终是个好的起点;如果我们的文件有YAML错误,我们希望尽快知道,要是可以完全防止错误,那就更好了。

• K8s模式的语义验证。下一步是验证文件是不是正确的Kubernetes YAML文件。这个验证是由Kubernetes自动完成的,但这在整个过程中有点太晚了。记住,我们要向左移。kubeval(https://www.kubeval.com/)是这个领域一款值得关注的工具。

• 资源的实用验证。最后这一类是指验证过程从不同的上下文查看文件。我们希望检查文件和配置,查找有无安全漏洞、性能问题以及是否遵守最佳实践、版本控制方案等。最适合执行这类验证的工具是策略。我想着重介绍这个领域的两款工具:trivy和datree。它们都带来了独特的视角和功能。

图1. K8s YAML验证

使用trivy检查安全

trivy可以扫描YAML文件,以查找安全漏洞和错误配置等问题。每项检查都有网页解释背后的原因及严重程度。这里唯一的问题是,检查是“静态的”,我们无法直接影响要不要跳过这其中任何一项检查。

图2. trivy扫描K8s部署文件

使用datree执行策略

datree采用了一种不同的方法,开发人员可以打开和关闭策略。

您可以看到,datree先检查文件是不是有效的YAML,然后对照Kubernetes模式来验证内容。这符合我们的结构验证->语义验证->实用验证流程!

图3. datree策略检查

每项检查都与一个可配置的策略集相关联。可以打开和关闭策略,以满足个性化验方案的要求。


图4. datree策略

这使我们向这个目标更接近了一步:将验证过程向左移,并使开发人员可以控制整个过程。

使用CI/CD管道实现自动化

每个重复性开发过程的最终目的是实现自动化。将来自datree和trivy的验证规则添加到我们的CI管道很容易。它们提供了与所有主要的git提供商(比如GitHub和GitLab)以及Helm安装插件集成的丰富功能。

结语

对开发人员来说,Kubernetes仍有诸多不足之处。我很高兴看到一些工具已开发出来,以解决Kubernetes端开发方面的一些痛点。datree之类的工具特别关注并支持向左移理念。

开发人员全面控制他们的软件生命周期、工具和组织结构,旨在帮助和支持开发团队实现创建出色的软件这一使命。我们所有人将从这样的未来中受益。

参考链接:https://hackernoon.com/how-to-validate-kubernetes-yaml-files

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址