
Ich installiere derzeit einen Server, der aus einem Virtualisierungshost (KVM auf Ubuntu) und 7 VMs besteht, von denen einige MySQL und LDAP ausführen, andere verschiedene Webserver und Webanwendungen. Die VMs, auf denen die Datenbanken laufen, werden nur von den anderen VMs auf demselben physischen Server abgefragt. Die Webserver-VMs werden etwa 10 bis 20 Websites und Webanwendungen ausführen. Der Server wird in einem Rechenzentrum aufgestellt und direkt mit dem Internet verbunden.
Meine Idee war, NAT-Netzwerke zwischen Host und VMs zu verwenden (wodurch intern ein LAN entsteht) und dem HostOS die öffentliche IP-Adresse zuzuweisen. Das HostOS betreibt die Firewall (mit iptables) und verteilt den Netzwerkverkehr an die VMs. Die VMs wären zunächst vollständig von außen abgeschirmt, sodass es bei diesem Schema nicht erforderlich wäre, auf einer der VMs eine voll funktionsfähige Firewall zu haben. Außerdem bräuchte ich nur eine öffentliche IP-Adresse. Für zusätzliche IP-Adressen muss ich extra zahlen und ich kann nicht mehr als 5 haben.
Ich dachte, ich könnte einen Reverse-Proxy auf dem HostOS verwenden, um den Datenverkehr basierend auf den angeforderten Hostnamen auf die VMs zu verteilen.
Meine Frage ist zweigeteilt:
- Ist dies eine sinnvolle Methode, um das Host-Betriebssystem und die VMs einzurichten? Oder verlangsamt ein Reverse-Proxy den Server zu sehr? Sollte ich stattdessen einfach Bridge-Networking verwenden (von den meisten Quellen empfohlen), akzeptieren, dass alle meine VMs direkt der Außenwelt ausgesetzt sind, und entsprechende Maßnahmen ergreifen?
- Was wäre ein guter Reverse-Proxy, der auf dem Host-Betriebssystem ausgeführt werden kann? Ich habe Gutes über HAproxy gehört. Ich habe mod_proxy schon einmal eingerichtet (allerdings in einem völlig anderen Szenario), aber ich habe gehört, dass die meisten Leute HAproxy bevorzugen. Oder brauche ich einen ultraleichten Reverse-Proxy, der möglichst wenig Platz beansprucht, um das Host-Betriebssystem nicht zu sehr zu verlangsamen?
Antwort1
Ich verwende genau diese Art von Architektur mit Proxmox. Bridge-Networking war keine Option, da ich nicht genügend öffentliche IPs für die virtuellen Maschinen habe. Ich verwende nginx als Proxy-VM. Sie können es direkt auf dem Host konfigurieren, aber die Verwendung einer virtuellen Maschine ist auch keine schlechte Idee (versuchen Sie, die Host-Konfiguration so einfach wie möglich zu halten).
Antwort2
Die einzige Möglichkeit für Sie, Bridge Networking zu nutzen, besteht darin, für jede VM, die mit dem Internet verbunden werden soll, eine IP zu haben. Da dies bedeutet, dass Sie jede VM einzeln absichern müssen, ist es möglicherweise weniger aufwändig, nur eine Firewall auf Ihrem Hostsystem zu verwenden. Es gibt auch gute Tutorials dafür, wenn Sie libvirt verwenden (https://jamielinux.com/docs/libvirt-networking-handbook/nat-based-network.html). Meiner Erfahrung nach (mit nginx) gab es mit dieser Lösung keine merkliche Verlangsamung. Ich gehe davon aus, dass HAproxy sogar noch schneller sein könnte.