Kubernetes 网络的设计方式必须能够适应未来的集群和应用程序需求。
Kubernetes 网络组织常犯的一个错误是使用不属于组织网络的 CIDR 范围。将来,当他们希望集群位于混合网络中时,最终会进行迁移。
在最终确定网络设计之前,最好与组织的网络团队进行讨论。这样,即使您不是混合网络的一部分,也可以划分和保留 IP 范围。
每个云提供商都为 Node 和 Pod 网络提供了多种选择。
例如,Google Kubernetes Engine 提供多集群服务、具有来自同一 VPC 的可路由 Pod IP 的 VPC 原生集群,以及对等 VPC。
AWS EKS 提供了基于 VPC 本机和辅助范围的 Pod 联网选项。
但是,如果您不想公开 Pod IP,则可能需要在集群中使用类似 IP 伪装代理之类的东西,以便传出流量始终将节点 IP 作为源标识。
此外,入口和出口流量设计也是必不可少的。可能需要从群集应用连接 API 网关、本地系统、代理服务器和第三方 API。
您的设计应包括所有访问要求,以便在实现过程中不会遇到任何访问限制。
2. Kubernetes 安全性、合规性和基准
以下是通用的 Kubernetes 安全最佳实践。
- 根据组织的策略了解合规性要求和安全基准。如果您使用的是托管服务,请确保它符合组织的合规性策略。
- 您可以查看 Kubernetes 的 CIS 基准测试。此外,Aquasec 还有一个名为 Kube-bench 的实用程序,用于根据 kubernetes 集群检查 CIS 基准测试。
- 是否会有任何 PCI/PII 数据应用程序?如果是,则根据组织策略在访问和存储方面隔离这些应用。
- 实现 Pod 安全性(禁用容器 root 访问、特权访问、只读文件系统等)。
- 安全地访问容器注册表。
- 实施网络策略以控制 Pod 到 Pod 的流量,并根据访问要求隔离应用。
- 精心设计的 CI/CD 管道,确保群集中仅部署已批准的容器映像。如果映像扫描无法满足安全要求,则应扫描容器以查找漏洞,并使 CI 过程失败。
- 在开始实施之前,与组织的安全专家进行讨论,并签署设计和工具。
3. Kubernetes 集群访问
设计和记录 kubernetes 集群的访问方式非常重要。
以下是关键注意事项。
- 限制手动 cluster-admin 访问。相反,只能通过自动化允许群集管理员访问。
- 实施 RBAC 的授权,并将其与组织的 IAM 集成。
- 允许通过具有有限权限的服务帐户访问 kubernetes API。
- 使用 CNCF 工具(如 Open Policy Agent或 Kyverno)实施基于策略的访问,以实现细粒度的访问控制
- 考虑 openID connect 的选项
- 有良好的审核机制来检查角色并删除未使用的用户、角色、服务帐户等。
设计访问级别,以便可以将职责移交给使用群集的其他团队。这将为每个人节省时间,您可以更专注于工程标准,而不是重复完成任务。
4. Kubernetes 高可用性和扩展性
高可用性是 Kubernetes 集群中的另一个关键因素。
在这里,您需要考虑跨不同可用区的工作节点可用性。
此外,请考虑 Pod 拓扑分布约束,以将 Pod 分布在不同的可用区中。
当我们谈论扩展时,它不仅仅是实例或 Pod 的自动扩展。
这是关于如何在不中断任何服务的情况下优雅地缩减和纵向扩展应用程序。
根据需要在 Kubernetes 上托管的应用类型,您可以设计部署,以便在缩减和修补活动期间正常逐出 Pod。
此外,请考虑在生产之前进行混沌工程实验,以检查集群和应用的稳定性。
5. Kubernetes 入口
Ingress 是 Kubernetes 集群的重要组成部分。
此外,还有不同类型的入口控制器。
可以尝试适合组织的合规性策略和缩放要求的最佳选项。
- 为平台工具提供单独的入口控制器。
- 入口端点的 SSL 管理。
- 不要尝试通过同一入口路由所有应用。如果您的应用程序与日俱增,它们最终可能会在一个大的配置文件中产生问题。
6. Kubernetes 备份和恢复策略
无论是托管服务还是自定义 kubernetes 实现,备份集群都是必不可少的。
当我们说备份时,它主要是备份 etcd。
你应该有一个非常好的设计来自动备份 kubernetes 集群及其相关组件。
此外,还需要还原群集的设计。
还有一些选项可以采用JSON格式的现有对象进行转储。您可以使用转储来还原相同或不同集群中的对象。
7. Kubernetes 节点和容器镜像修补和生命周期管理
修补是一个重复的过程。
当涉及到 kubernetes,有节点和容器修补。
请确保在 CI/CD 管道中实现 DevSecOps 原则。
以下是一些最佳实践,
- 与容器扫描工具集成的自动化管道,用于按月计划修补容器映像。
- 一个自动化管道,可在不停机的情况下执行节点修补。
- 用于管理容器映像生命周期的自动化管道。您不希望在注册表中保留这么多过时的版本。
8. Kubernetes 集群升级
通常,您可以通过两种方式执行集群升级
- 升级现有群集(就地升级)
- 创建新集群并将应用迁移到新集群。
您需要一个非常好的自动化管道设计来执行集群升级。
在升级过程中,可能会发生网络、DNS 和其他组件更改。这完全取决于设计和组织政策。