Kubernetes 基础设施是支持 Kubernetes 环境的资源(包括服务器、物理或虚拟机、云平台等)的组合。Kubernetes是一个流行的容器编排开源平台,它是自动化容器生命周期(从部署到退役)所需的许多操作任务的实践。
在底层,Kubernetes 的基础设施和架构围绕着集群的概念展开,集群是一组在 Kubernetes 术语中称为“节点”的机器。当您使用 Kubernetes 部署容器化工作负载时,您会将它们部署到集群上。节点代表负责运行容器化工作负载的机器,可能是物理机或虚拟机。每个Kubernetes 集群都有一个主节点和至少一个这样的工作节点,尽管通常一个集群会有几个或更多工作节点。
另一个重要的 Kubernetes 概念是“pod”。根据官方文档,Pod 是 Kubernetes 中最小的可部署单元,它们在集群的节点上运行。换个角度来看,pod 代表应用程序的各种组件。一个 pod 通常运行一个容器,尽管在某些情况下它可以运行多个容器。
最后,Kubernetes 集群架构的另一个基本元素是控制平面。这包括 API 服务器和其他四个组件,它们可以根据您所需的状态有效地管理您的节点(或机器)。
Kubernetes 基础架构要求是什么?
运行 Kubernetes 所需的基础架构要求取决于您使用它的具体用途。您可以在笔记本电脑上的虚拟机中运行 Kubernetes 版本,例如,用于开发或测试目的。您可以类似地在托管服务上快速设置环境。但是,许多生产用例将需要更多的资源来支持您正在运行的应用程序。大规模、高度分布式的系统可能跨多个云和本地服务器运行,以实现性能目标或确保高可用性。这些情景将需要对适当的基础设施资源进行更多投资。
什么是基础设施即代码和 Kubernetes?
基础设施即代码是使用编程语言配置和操作现代基础设施的实践,类似于软件应用程序的开发和维护方式。有时被称为配置管理工具,即代码工具的基础架构为传统 IT 运营引入了更多自动化,并允许DevOps团队特别专注于优化开发时间、部署频率、系统性能、可靠性、弹性和安全性等领域。他们之所以能够做到这一点,是因为基础架构即代码允许他们在重复的基础架构管理任务上花费更少的时间。
由于 Kubernetes 类似地自动化了运行容器化应用程序所需的大量操作工作,因此有些人认为它是基础设施即代码,尽管它实际上被认为是一个容器编排工具。与基础设施即代码一样,Kubernetes 允许您为集群声明所需的状态,并自动执行许多实现或返回该状态所需的任务。一些组织和团队将基础架构即代码(或配置管理)工具与 Kubernetes 结合使用,以满足管理其云基础架构等需求。
如何保护 Kubernetes
Kubernetes 安全是容器安全整体方法的一个方面。后一个领域的目标最终是保护软件开发生命周期的所有方面(包括您的 CI/CD 管道,如果适用)。Kubernetes 本身包含许多重要的安全功能,尽管它们通常需要针对您的环境和威胁模型进行配置(并随着时间的推移进行优化)以最大程度地降低风险。
一个很好的例子是基于角色的访问控制,或 RBAC。这使管理员可以精细控制用户能够在环境中访问和执行的操作,从而降低特权升级攻击和其他威胁的风险。然而,旧版本的 Kubernetes 默认情况下没有开启 RBAC。即使您运行的是最新版本,您也需要确保为每个用户正确设置了设置,并且只授予绝对必要的访问或特权。定期审查这些也是一个好主意。
托管 Kubernetes 开源项目的组织云原生计算基金会发布了一篇关于Kubernetes 安全性的九种不同最佳实践的博客文章——包括正确设置 RBAC 并确保您使用的是最新版本。(这是任何软件平台的一般最佳实践。)他们还建议使用Kubernetes 命名空间功能来增加隔离,以及通过关闭对敏感端口的访问和限制对 Kubernetes 的访问来强化集群上运行的节点API。
安全和基础设施运营专家通常还建议确保在生产环境中运行容器化应用程序时,确保有适当的工具来监控和记录日志。这是为了帮助确保您在环境变得越来越复杂时保持必要的可见性和可审计性。
管理 Kubernetes 的最佳方法
实施和管理 Kubernetes 有多种选择。最佳选择取决于您的用例、可用的技能和资源以及其他因素。启动和运行开源平台可能需要大量的内部专业知识。一般来说,Kubernetes 和云原生开发通常最适合已经采用 DevOps 和其他现代软件实践和技术的团队。
缺乏必要的内部技能来自行有效管理 Kubernetes 的组织可能需要考虑基于底层开源平台的商业或托管选项之一。补充工具(例如基础设施即代码和安全工具)和第三方支持也有许多选项。