
現在、仮想化ホスト (Ubuntu 上の kvm) と 7 つの VM で構成されるサーバーをインストールしています。一部の VM では MySQL と LDAP が実行され、その他の VM ではさまざまな Web サーバーと Web アプリケーションが実行されます。データベースを実行する VM は、同じ物理サーバー上の他の VM によってのみクエリされます。Web サーバー VM では、10 ~ 20 の Web サイトと Web アプリケーションが実行されます。サーバーはデータセンターに配置され、インターネットに直接接続されます。
私のアイデアは、ホストと VM の間で NAT ネットワークを使用し (内部で LAN を形成)、HostOS にパブリック IP アドレスを割り当てるというものでした。HostOS はファイアウォール (iptables を使用) を実行し、ネットワーク トラフィックを VM に分散します。VM は最初は外部から完全に遮断されるため、このスキームではどちらの VM にもフル機能のファイアウォールを設置する必要はありません。また、必要なパブリック IP アドレスは 1 つだけです。追加の IP アドレスには追加料金が必要で、5 つ以上は持てません。
要求されたホスト名に基づいて VM 間でトラフィックを分散するために、HostOS 上のリバース プロキシを使用できると考えました。
私の質問は2つあります:
- これはホスト OS と VM を設定する適切な方法でしょうか? それとも、リバース プロキシによってサーバーの速度が大幅に低下するでしょうか? 代わりにブリッジ ネットワーク (ほとんどのソースで推奨) を使用し、すべての VM が外部に直接公開されることを受け入れ、それに応じて対策を講じるべきでしょうか?
- ホスト OS で実行するのに適したリバース プロキシは何でしょうか。HAproxy については良い話を聞きました。以前、mod_proxy をセットアップしたことがありますが (まったく異なるシナリオですが)、ほとんどの人が HAproxy を好むと聞きました。それとも、ホスト OS の速度をあまり低下させないように、フットプリントが最小限の超軽量リバース プロキシが必要ですか?
答え1
私は Proxmox でまさにこの種類のアーキテクチャを使用しています。仮想マシン用のパブリック IP が十分ではないため、ブリッジ ネットワークはオプションではありません。プロキシ仮想マシンとして nginx を使用しています。ホスト上で直接構成できますが、仮想マシンを使用するのも悪い考えではありません (ホスト構成を可能な限りシンプルに保つようにしてください)。
答え2
ブリッジネットワークを使用する唯一の方法は、インターネットに接続するすべての VM に IP を割り当てることです。これは、すべての VM を個別に保護する必要があることを意味するため、ホストシステムで 1 つのファイアウォールを使用する方が作業が少なくなる場合があります。そのための優れたチュートリアルもあります。libvirt を使用する場合 (https://jamielinux.com/docs/libvirt-networking-handbook/nat-based-network.html 翻訳: ...)。私の経験(nginx を使用)では、このソリューションでは顕著な速度低下はありませんでした。HAproxy はさらに高速化できると思います。