0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探讨使用YAML文件定义Kubernetes应用程序

马哥Linux运维 来源:CSDN 2023-04-20 10:03 次阅读

Kubernetes已经占据如何管理集容器化应用程序的核心位置。因此,存在许多定义Kubernetes应用程序的约定文件格式,包括YAML、JSON、INI等。 这使得我们需要考虑应用程序的最佳策略是什么。此外,我们还必须考虑如何根据所选择的文件结构(特别是安全性)路径来验证应用程序配置。 本文,我们将探讨使用YAML文件定义Kubernetes应用程序,以及可以采取的各种步骤来有效地验证这些配置定义。

Yaml定义K8s配置

与JSON和INI相比,YAML更加紧凑和可读。例如,如果我们要定义一个可以在端口80上可达的pod,那么YAML、JSON和INI中的配置将如下表所示。

17ad738c-df08-11ed-bfe3-dac502259ad0.png

很明显,YAML简化了我们定义Kubernetes应用程序的方式,特别是考虑到一个普通应用程序可能涉及几十个配置文件。此外,YAML的紧凑特性允许您将对象分组在一起,从而减少所需的文件数量。 然而,在定义Kubernetes配置文件时存在重大挑战,特别是在嵌入manifest文件之间的约束和关系时。

例如,我们如何确保按照最佳实践配置内存限制? 在满足边界情况时,缺乏验证不仅会导致应用程序出现意外行为,而且还会暴露出主要的安全漏洞。因此,我们有必要考虑基于yaml配置文件的验证策略,这就是我们将在下面几节中深入研究的内容。 验证内容 应该对YAML文件执行三个级别的验证。这些级别确保根据YAML文件的实际有效性执行验证,直到是否满足安全实践。

第一级别是结构验证,这是在Kubernetes配置文件上执行的基础级别验证。它只需要验证YAML文件,以确保没有语法错误。这一点可以在编写配置文件时由IDE进行验证。

第二层是语义验证。这确保YAML文件的内容转换为所需的Kubernetes资源,从而验证Kubernetes应用程序本身。

最后,第三层也是最深层的验证是安全验证,以确保所定义的Kubernetes应用程序不存在任何漏洞。我们可能已经成功地编写了YAML配置,也成功地实现了所需的Kubernetes资源和连接,但这并不能确保我们的Kubernetes应用程序是很安全的,并遵循最佳实践。

最后两个验证都是Kubernetes配置验证,而且不仅仅是在YAML格式验证方面。因为和应用程序相关,需要特殊验证。执行这种验证需要Kubernetes领域的深入和专业知识,我们将简要介绍如何使用Kubernetes领域专家开发的工具轻松处理它们。

例如,锁定hostPath挂载权限可以确保具有可写hostPath卷的集群中的容器不会被攻击者访问,因为他们可能会获得底层主机上的持久性。这不符合安全最佳实践,为了避免这个问题,我们应该始终确保hostPath属性下的readOnly部分设置为true。 另一个例子是只在必要时才授予pods 主机网络访问权。所有有权限的pod应该被列入白名单。对主机网络的不必要访问增加了潜在的攻击范围。

因此,从上面的两个例子可以看出,即使我们的配置文件通过了结构和语义验证,导致我们的Kubernetes资源被成功编排,安全和功能漏洞可能仍然存在。因此,我们必须考虑如何最好地捕获这些漏洞,然后在生产环境中提醒存在对后果。安全验证是实现此目的的方法。

校验Yaml的最佳实践

考虑到结构验证相当简单,通常编程使用的IDE就集成了该功能。Kubernetes语义和安全验证需要特殊处理,特别是在策略和工具方面。 我们考虑一些最佳实践和策略,以实现YAML文件的全面验证。 您可以执行一个试运行(kubectl apply -f - -dry-run='server ")来验证语义结构,但这仍然是一个额外的步骤,可能会降低总体速度。

但是,试运行要求您能够访问Kubernetes集群。 这种方法的另一种选择是Kubeval,这是一个实用工具,可以用来验证配置文件语义,以确保它们满足Kubernetes的对象定义需求。它可以是CI过程的一部分,并在本地执行扫描,从而确保在投入生产环境之前从语义上验证配置文件。 还可以使用kuscape在CI中实现安全验证。这是一个开源工具,确保您的Kubernetes应用程序定义遵循多种安全框架,如NSA-CISA或MITRE ATT&CK。通过使用kuscape CLI,您可以扫描所有YAML文件的安全漏洞,甚至获得风险评分和风险趋势。它充当YAML验证器,其主要价值是安全验证。

从DevOps到DevSecOps

你可以运行CI流水线中已经讨论过的工具的组合,以实现结构、语义和安全验证。然而,仅仅利用这些工具及其预定义的检查是不够的。 我们从DevOps中学到的一件事是,总是有一个可以采用的改进循环。这就是为什么随着应用程序的发展和安全性需求的变化,你应该不断地检查安全性控制。 新的安全控件应该合并到安全验证步骤中。kuscape是AMRO开发的开源平台,它允许你定义自己的控件框架。尽管开箱即用的框架很健壮,但需要根据业务和Kubernetes资源的具体需求形成策略控制。

只有将安全检验嵌入到构建应用程序中,才能实现这种最佳实践。多亏了像Kubeval和kuscape这样的开源工具,开发团队不断考虑验证,特别是安全验证的障碍已经降低了。

总结

YAML配置文件使得构建Kubernetes应用程序非常简单。然而,YAML在验证方面确实有其局限性。因此,我们有必要了解所有验证策略,以确保构建的Kubernetes应用程序是健康和安全的。 在任何IDE中使用YAML测试验证YAML文件的结构都是相当简单的,但是验证Kubernetes资源对象定义的正确性以及围绕它们的安全措施是很困难的。幸运的是,像kuscape这样的工具弥补了这一差距,在整个应用程序生命周期中不断考虑安全性。 由于安全性是构建容器应用程序的主要关注点之一,这里讨论的验证策略是朝着正确方向迈出的一步。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JSON
    +关注

    关注

    0

    文章

    111

    浏览量

    6819
  • YAML
    +关注

    关注

    0

    文章

    21

    浏览量

    2268

原文标题:如何校验K8S Yaml文件

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用Kubernetes实现零停机应用程序

    费力(实现 VRRP 解决方案、使用 monit 之类的应用程序监控重启、负载均衡 haproxy 之类的)!
    的头像 发表于 09-01 10:04 535次阅读
    如何使用<b class='flag-5'>Kubernetes</b>实现零停机<b class='flag-5'>应用程序</b>

    Kubernetes之路 2 - 利用LXCFS提升容器资源可见性

    节点上安装并启动lxcfs,我们将用Kubernetes的方式,用利用容器和DaemonSet方式来运行 lxcfs FUSE文件系统。本文所有示例代码可以通过以下地址从Github上获得git
    发表于 04-17 14:05

    如何创建Android应用程序的自定义BLE?

    你好,我目前正在尝试开发一个应用程序定义定义配置文件。我不使用CysApp应用程序,因为我必须看到我的产品在十六进制格式的价值,我想开发
    发表于 10-12 13:00

    如何将udev规则和/或netplan config.yaml文件添加到Ubuntu devel rfs?

    ,或者我们是否需要按照“如何在 Flexbuid 中添加新的应用程序组件”来将文件复制到适当的位置,例如 /etc/netplan ?
    发表于 03-24 07:15

    xml和YAML文件的写入_OpenCV3编程入门

    《OpenCV3编程入门》书本配套源代码:xml和YAML文件的写入
    发表于 06-06 15:20 6次下载

    xml和YAML文件的读取_源代码

    《OpenCV3编程入门》书本配套源代码:xml和YAML文件的读取
    发表于 06-06 15:20 6次下载

    怎么样去开发自定义应用程序

    Atmel小贴士 如何开发自定义应用程序
    的头像 发表于 07-11 00:05 2158次阅读

    首次部署 Kubernetes 应用程序需注意的“陷阱”

    根据我的个人经验,大多数人似乎倾向于通过 Helm 或者手动方式将应用程序甩给 Kubernetes,之后就坐等每天轻松调用的美好生活。但在 GumGum 公司的实践当中,我们体会到
    的头像 发表于 10-08 14:43 1548次阅读
    首次部署 <b class='flag-5'>Kubernetes</b> <b class='flag-5'>应用程序</b>需注意的“陷阱”

    新版本Portworx PX-Backup助力Kubernetes有状态应用程序实现跨云数据保护与迁移

    最新Portworx调查显示数据流动性和数据保护为Kubernetes有状态应用程序管理的最大挑战。
    的头像 发表于 11-10 15:06 3564次阅读
    新版本Portworx PX-Backup助力<b class='flag-5'>Kubernetes</b>有状态<b class='flag-5'>应用程序</b>实现跨云数据保护与迁移

    应用程序在崩溃时能启动自定义活动的OHOS库

    包括: 当应用程序在主线程和后台线程中崩溃时启动自定义错误功能。 如果未配置自定义错误能力,则启动默认错误能力。 使用说明 entity/ 文件夹中提供了一个示例项目,它提供了可运行
    发表于 04-11 09:32 0次下载

    KUBERNETES开源平台的定义、工作原理及重要意义

    Kubernetes 是一个开源平台,用于自动进行容器编排,即容器化应用程序的部署、扩展和管理。
    的头像 发表于 06-10 12:00 1504次阅读

    Kubernetes网络模型的基础知识

    Kubernetes 是为运行分布式集群而建立的,分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分,了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查
    的头像 发表于 07-20 09:46 926次阅读

    Jenkins pipeline是如何连接Kubernetes的呢?

    Kubernetes 是一个开源的容器编排平台,可以帮助开发团队管理和部署容器化的应用程序
    的头像 发表于 10-23 11:13 1500次阅读
    Jenkins pipeline是如何连接<b class='flag-5'>Kubernetes</b>的呢?

    springboot的核心配置文件有哪些

    的工作量。 Spring Boot的核心配置文件主要有以下几个: application.properties:Spring Boot应用程序的主要配置文件。它使用Java的键值对格式来定义
    的头像 发表于 12-03 15:30 553次阅读

    使用Jenkins和单个模板部署多个Kubernetes组件

    YAML模板文件(.tpl)来部署多个类似的Kubernetes组件,而不需要为每个组件提供单独的模板文件
    的头像 发表于 01-02 11:40 268次阅读
    使用Jenkins和单个模板部署多个<b class='flag-5'>Kubernetes</b>组件