我目前正在安装一个由虚拟化主机(ubuntu 上的 kvm)和 7 个 VM 组成的服务器,其中一些运行 MySQL 和 LDAP,其他运行不同的 Web 服务器和 Web 应用程序。运行数据库的 VM 只会被同一物理服务器上的其他 VM 查询。Web 服务器 VM 将运行大约 10-20 个网站和 Web 应用程序。服务器将放置在数据中心,直接连接到互联网。
我的想法是在主机和虚拟机之间使用 NAT 网络(在内部形成 LAN),并为 HostOS 分配公共 IP 地址。HostOS 将运行防火墙(使用 iptables)并将网络流量分发到虚拟机。虚拟机最初将完全与外界隔离,因此在此方案中,无需在任一虚拟机上安装功能齐全的防火墙。此外,我只需要一个公共 IP 地址。我必须为额外的 IP 地址支付额外费用,而且最多不能有 5 个。
我认为我可以使用 HostOS 上的反向代理根据请求的主机名在虚拟机之间分配流量。
我的问题有两个:
- 这是设置主机操作系统和虚拟机的合理方法吗?还是反向代理会大大降低服务器速度?我是否应该只使用桥接网络(大多数来源都推荐),接受所有虚拟机都直接暴露在外部并采取相应措施?
- 在 hostOS 上运行哪种反向代理比较好?我听说过 HAproxy 的很多好故事。我之前设置过 mod_proxy(虽然是在完全不同的场景中),但我听说大多数人更喜欢 HAproxy。或者我需要一些占用空间最少的超轻量反向代理,以免过多地降低 hostOS 的速度?
答案1
我在 Proxmox 中使用了这种架构。桥接网络不是一个选项,因为我没有足够数量的虚拟机公共 IP。我使用 nginx 作为代理虚拟机,您可以直接在主机上配置它,但使用虚拟机也不失为一个好主意(尽量保持主机配置尽可能简单)。
答案2
使用桥接网络的唯一方法是为连接到互联网的每台虚拟机设置一个 IP。由于这意味着您必须单独保护每台虚拟机,因此在主机系统上只使用一个防火墙可能会减少工作量。如果您使用 libvirt (https://jamielinux.com/docs/libvirt-networking-handbook/nat-based-network.html)。根据我的经验(使用 nginx),此解决方案没有明显的减慢速度。我认为 HAproxy 的速度可能更快。