背景技术
Serverless Kubernetes,是一种将无服务器计算模型与 Kubernetes 相结合的架构理念。它旨在提供一种基于事件驱动的自动扩展和管理容器化应用程序的方式,使开发者能够专注于应用程序逻辑而不必关心底层的基础设施管理。不同于传统的 Kubernetes,在 Serverless Kubernetes 中,用户无需关注集群和底层服务器管理和运维,只需动态申请应用需要的资源,一站式部署和运维容器应用,真正实现开箱即用,提升开发效率、降低整体资源成本。由于 Serverless Kubernetes 提供了一种简单易用、极致弹性、最优成本和按需付费的 Kubernetes 容器服务,越来越多的企业和开发者将应用程序容器化并部署在 Serverless Kubernetes 平台上。Serverless Kubernetes 一般通过“共享集群+边缘集群”的模式实现架构的免运维及应用的多集群部署,共享集群接入不同地区不同类型的边缘集群,通过多集群管理模式部署应用到不同的边缘集群。虽然共享集群机制可以简化集群的管理及降低成本,但是多个租户共享同一个集群也带来了诸如安全、性能、稳定性、管理和维护等挑战。对于拥有多个租户多种应用程序的集群环境来说,实现有效的多租户隔离变得至关重要。
多租户隔离是指在 Kubernetes 集群中实现多租户的隔离和管理,使得不同租户的应用程序和资源被隔离开来,每个租户拥有独立的控制面和运行环境,彼此之间相互隔离,确保安全性和性能。由于 Kubernetes 设计的复杂性,实现 Kubernetes 集群的多租户隔离具有一定的挑战性。首先,Kubernetes 集群由控制面和数据面构成,在设计时需同时考虑控制面隔离和数据面隔离。控制面是集群的管理平面,负责集群的控制、调度和管理,控制面隔离要确保不同租户无法访问或影响彼此的 Kubernetes API 资源。数据面是集群中负责实际运行应用程序的组件,负责接收和处理来自用户或外部请求的流量,并将其路由到适当的Pod和容器中,数据面隔离要确保不同租户的 Pod 和工作负载之间被充分隔离,包括容器运行时、网络、存储等。其次,不同于传统 Kubernetes 的单一集群模式,Serverless Kubernetes 的“共享集群+边缘集群”多集群模式,架构复杂性使得实现多租户隔离更为困难。基于以上挑战,本文采用云原生理念,提出了一种面向 Serverless Kubernetes 的多租户隔离方法,实现从共享集群到边缘集群、从控制面到数据面的多租户隔离。
技术方案
本文提出了一种面向 Serverless Kubernetes 的多租户硬隔离方法,实现了从共享集群到边缘集群、从控制面到数据面的多租户硬隔离。具体而言,首先在共享集群基于 Virtual Cluster 技术实现多租户控制面隔离,一个租户专享一个虚拟集群,虚拟集群的控制面该租户独享。虚拟集群内的节点,是由 Virtual Kubelet 实现的虚拟节点,虚拟节点租户专享。租户部署到虚拟集群中的工作负载通过 syncer 组件同步到集群外,调度到租户专享的虚拟节点上,接着通过 Virtual Kubelet 调用 Provider(容器服务)部署 Pod 等资源到边缘集群。部署到边缘集群的容器通过 Kata Containers 技术将容器运行在专属的轻量级虚拟机中,实现数据面的运行时隔离。并且,通过 Kube-OVN 组件将容器加入到 VPC 网络实现数据面的网络隔离。该方案的整体架构如下: