Kubernetes提供了一种编排容器化服务的方法,因此如果您没有按顺序实践你的容器,那么集群一开始就不会处于良好状态。
容器最佳实践
- 使用精简基础镜像
1 | what:容器是内置在系统镜像中的应用程序堆栈。从业务逻辑到内核的所有内容都打包在一起。最小的镜像会占用尽可能多的OS,并迫使您显式添加所需的任何组件。 |
- 使用提供最佳正常运行时间的注册表
1 | what:注册表是镜像的存储库,使这些镜像可供下载和启动。在指定部署配置时,您需要指定从何处获取路径为<registry> / <remote name>:<tag>的镜像: |
- 使用ImagePullSecrets对您的注册表进行身份验证
1 | what:ImagePullSecrets是Kubernetes对象,可让您的群集通过注册表进行身份验证,因此注册表可以选择谁可以下载镜像。 |
管理集群
- 使用命名空间隔离环境
1 | what:命名空间是Kubernetes中最基本,最强大的分组机制。它们几乎像虚拟集群一样工作。默认情况下,Kubernetes中的大多数对象仅限于一次影响单个名称空间。 |
- 通过Labels 管理您的集群
1 | what:Labels是组织集群的最基本且可扩展的方法。它们允许您创建用于分隔Kubernetes对象的任意key:value对。例如,您可以创建一个标签密钥,将处理敏感信息的服务与不处理敏感信息的服务区分开。 |
- 使用注释来跟踪重要的系统更改等
1 | what:注释是可以附加到pod的任意键值元数据,就像标签一样。但是,Kubernetes不会读取或处理批注,因此围绕您可以和不能使用批注进行注释的规则相当宽松,并且不能用于选择。 |
让集群更加安全
- 使用RBAC实施访问控制
1 | what:RBAC(基于角色的访问控制)使您可以控制谁可以查看或修改群集的不同方面。 |
- 使用Pod安全策略防止危险行为
1 | what:Pod安全策略是一种资源,非常类似于Deployment或Role,可以通过kubectl以相同的方式创建和更新。每个都有一个标志集合,可用来防止集群中特定的不安全行为。 |
- 使用网络策略实施网络控制/防火墙
1 | what:网络策略是允许您明确声明允许哪些流量的对象,而Kubernetes将阻止所有其他不符合标准的流量。 |
- 使用Secrets来存储和管理必要的敏感信息
1 | what:Secrets是您如何在Kubernetes中存储敏感数据,包括密码,证书和令牌。 |
- 使用镜像扫描识别和修复镜像漏洞
1 | what:扫描仪检查镜像中安装的组件。从操作系统到应用程序堆栈的所有内容。扫描程序对于找出镜像所包含的软件版本中存在哪些漏洞非常有用。 |
保持集群稳定
Kubernetes代表很高的技术栈。您拥有在嵌入式内核上运行的应用程序,在VM中运行的应用程序(在某些情况下甚至在裸机上),以及Kubernetes自己的服务共享硬件。考虑到所有这些因素,在物理和虚拟领域中很多事情都会出错,因此尽可能降低开发周期的风险非常重要。Kubernetes周围的生态系统已经开发了一系列最佳实践,以使事情尽可能保持一致。
- 遵循CI / CD方法
1 | what:持续集成/持续部署是一种过程哲学。相信对代码库进行的每次修改都应增加增量值,并准备投入生产。因此,如果代码库中的某些内容发生了更改,则可能要启动服务的新版本,以运行测试。 |
- 使用Canary方法进行更新
1 | what:Canary是一种将服务更改从代码库中的提交带给用户的方法。您启动了一个运行最新版本的新实例,然后将用户缓慢迁移到新实例,从而逐渐获得了对更新的信心,而不是一次全部交换。 |
- 实施监控并将其与SIEM集成
1 | what:监视意味着跟踪和记录您的服务正在做什么。 |
- 使用服务网格管理服务间通信
1 | what:服务网格是管理服务间通信的一种方法,可以有效地创建在实施服务时使用的虚拟网络。 |
- 使用准入控制器解锁Kubernetes中的高级功能
1 | what:准入控制器是一种很好的万能工具,可用于管理集群中发生的一切。它们允许您设置Kubernetes在启动时将参考的Webhook。它们有两种形式:变异和验证。突变准入控制器会在部署启动之前更改其配置。验证准入控制器会与您的webhook一致,以允许启动给定的部署。 |