Kubernetes 多租户网络隔离与策略配置
1. 多租户与网络隔离概述
多租户指的是平台支持多个隔离用户组(即租户)的能力。Kubernetes 本身对多租户的支持并不全面,其多租户概念复杂且难以定义。Kubernetes 多租户文档涵盖了多个方面,如命名空间与访问控制、防止资源竞争的配额设置、存储和网络隔离,以及对集群范围的 DNS 或自定义资源定义等共享资源的处理。本文将重点关注网络隔离,它是实现多租户的一种相对温和的方式。对于更严格的隔离需求,可能需要采用如 vcluster 提供的每个租户一个虚拟控制平面的封装方法。
在过去,网络拓扑的塑造主要由管理防火墙和 iptable 规则的管理员负责。这种模式的挑战在于,管理员需要了解应用程序的网络需求。此外,在微服务环境中,由于存在大量依赖关系,网络图会变得非常复杂,这需要对应用程序有深入的领域知识。因此,开发人员必须与管理员沟通和同步有关依赖关系的信息。虽然 DevOps 模式可以提供帮助,但网络拓扑的定义仍然与应用程序本身有一定距离,并且可能会随时间动态变化。
2. Kubernetes 中的网络分段解决方案
Kubernetes 将网络任务左移,使得使用 Kubernetes 的开发人员能够完全定义其应用程序的网络拓扑。网络分段模式的核心是开发人员如何通过创建“应用程序防火墙”来为应用程序定义网络分段。实现这一功能有两种互补的方法,可以一起应用:
- 使用核心 Kubernetes 功能 :在 OSI 网络栈的 L3/L4 层(主要涉及 IP 和 TCP/UDP)操作。通过定义 NetworkPolicy 资源类型,开发人员可以为工作负载 Pod