问题背景
一种多租户多Nginx集群部署的上云解决方案示意图如图1所示:
图1 一种多租户多Nginx集群部署示意图
该方案主要包含三部分,分别为API Server,配置中心及集群部署节点,各部分实现的功能为:
- API Server:Nginx集群服务的总入口,负责接收各类管控信息,并将请求信息解析后转发至配置中心;
- 配置中心:负责不同租户Nginx实例的安装部署与配置管理;
- 集群部署节点:不同租户在不同节点上部署Nginx实例,实现实例级别的高可用;
如图1所示,要实现高可用的部署方式,就要求在每一个服务器node节点上部署的Nginx实例分属于不同的租户;要实现每个node节点的Nginx实例分属于不同的租户,就要求在node节点实现租户隔离。这里的租户隔离至少需要包含两个属性,一个是网络资源的隔离,一个是Nginx实例端口占用的隔离。
解决思路
为了在同一台node节点实现租户隔离,目前常见的有以下几种解决方案:
- 物理服务器共享实例:即在一台物理服务器上部署一个共享Nginx实例,由配置中心负责管理每个租户创建的虚拟服务器端口,与物理服务器真实的监听端口之间的映射。
- 虚拟机或容器部署:即在一台物理服务器上,部署多个虚拟机或容器,每个虚拟机或容器分属于不同的租户网络,部署各租户独享的Nginx实例;
- 命名空间部署:即在一台物理服务器上,使用租户网络创建不同的命名空间,在命名空间中部署租户独享的Nginx实例;
这里以命名空间为例,实现一种基于Macvlan的租户隔离的Nginx集群部署实践。
网络拓扑
图2 基于Macvlan实现多租场景下Nginx集群部署网络拓扑示意图
如图2所示,本示例基于BC-Linux7.6操作系统,创建了两台虚拟机node1和node2,ens33为虚拟机上的网卡。其中子网卡ens33.0为虚拟机管理网卡,子网卡ens33.01是命名空间中管理网卡,子网卡ens33.1和ens33.2为不同子网的租户业务网卡,各网卡IP地址规划如下。下一期,我们将从实践角度对集群进行搭建与测试验证,敬请期待~
管理网 | 租户1业务网 | 租户2业务网 | |||||||
Mac0 | Mac1 | Mac3 | Mac5 | Mac6 | Mac8 | Mac2 | Mac7 | Mac4 | Mac9 |
100.76.8.10 | 100.76.8.11 | 100.76.8.13 | 100.76.8.15 | 100.76.8.16 | 100.76.8.18 | 192.168.1.12 | 192.168.1.17 | 172.16.2.24 | 172.16.2.29 |