Proxmox上に隔離されたネットワーク環境を自動構築する MSL Setup のクラスタ対応版(v2.0)をリリースしました
MSL Setup は、Proxmox 上にプロジェクトごとに分離されたネットワーク環境を自動構築し、VPN と組み合わせて安全に公開できるようにするセットアップツールです。
今回の v2.0 は、MSL Setup をシングルノード向けの隔離ネットワーク構築ツールから、クラスタ環境でも使える実用的なマルチノード基盤へ引き上げるリリースになりました。
これにより、別ノード上に存在する VM/CT 同士でも、同じプロジェクトネットワーク内であれば単一ノード上にあるかのように通信できます。さらに、ノード障害時にも VIP / Gateway のフェイルオーバーにより到達性を維持できる構成を取れるようになりました。
また、複数ノード運用で難しくなりがちな Gateway 配置の問題についても、高価なネットワーク機器や複雑な外部ネットワーク設計なしで扱えるようにしています。
これまで通り、簡単なセットアップでクラスタ対応環境を構築できます。
まとめページ
MSL Setup v2.0で得られるもの
高可用性
- ノード障害時にも、keepalived によるノード監視と VIP / VXLAN GW の切り替えにより、隔離ネットワークの到達性維持が可能です
- Pritunl VM は、共有ストレージと Proxmox HA を組み合わせることで、必要に応じて HA 構成を取れます
- 高価なネットワーク機器を使わずに、Proxmox ノード内だけで隔離ネットワークの可用性を高められます
高拡張性
- 最初はシングルノードで導入し、後から Proxmox クラスタ化した場合でも、MSL Setup 側をクラスタ運用に拡張可能な
mslcmコマンドを導入しました - クラスタメンバノードを増やした場合でも、隔離ネットワークをノード横断で共有できるため、同一プロジェクトを複数ホストへ簡易にスケール可能です
- L2 延伸型のため、ホスト追加のたびにプロジェクトごとのサブネットやルーティングを作り直す必要がありません
高保守性
- 上述した高可用性により、ノードを停止し保守を行いたい場合でも、停止対象ノード上のVM/CTを他ノードにマイグレーションしておくことにより、隔離ネットワークの到達性を確保したままサービスの継続を行いつつサーバ保守を行う事が可能です
アーキテクチャ図
図の解説
Qiitaでは.svg画像を綺麗に表示できないため、必要なら以下のリンクから画像を参照ください→アーキ図
変更履歴から見る内容解説
今回の v2.0 では、内部実装として主に以下の変更を行いました。
- Firewall 適用位置を Node レベルから Datacenter レベルへ変更。ノードごとに個別の Firewall ルールを適用する必要がなくなります
- 複数ノードに跨る隔離ネットワーク実現のためSDN backend を Simple zone ベースから VXLAN zoneベースへ移行
- MSL Setupインストール後のSDN設定変更に耐えうる仕組みとして、VXLAN Gateway / 静的経路制御を
/etc/network/interfaces.d/sdnのpost-up/pre-downではなくif-up.d/if-down.dフックへ移行 - 単一ノード構成から将来的な cluster backend への昇格を見据えた
mslcmコマンドの実装
また、vpndmz も VXLAN 化することで、Pritunl VM の配置ノード、Gateway を保持するノード、対象 VM を配置するノードが分散した場合でも、VPN クライアントから対象セグメントへの経路を成立させやすくしています。
アーキテクチャの詳細解説
- 図下方に隔離ネットワーク
VXLAN zone:devpj01-08が全てのノードを横断的に設置されています- クラスタ環境において、どのノード上の VM/CT でも同じプロジェクトの隔離ネットワークに参加でき、別ノードで動作する VM/CT 同士も、あたかも単一ノード上で接続されているかのように通信できます
- 図中段にkeepalivedが各ノードに配置されており、お互いに各ノード状態の死活監視を行っています。また、青字で記載されているVIPと各隔離ネットワーク上のVXLAN GWがあります。これがkeepalivedのノード監視と連動して生きているノード上に自動的にフェイルオーバーする事で、軽量に高可用性を確保しています
- keepalivedでノード障害を検知し、VIP, VXLAN GWを正常動作しているノード上にフェイルオーバーすることにより通信の継続を可能としています
まとめ
MSL Setup v2.0 により、これまでシングルノード向けだった Proxmox 上の隔離ネットワーク環境を、クラスタ環境へ拡張できるようになりました。
単に「複数ノードで動く」というだけでなく、
- 同一プロジェクトネットワークをノード横断で共有できること
- ノード障害時に VIP / Gateway フェイルオーバーで到達性維持を狙えること
- 高価な外部ネットワーク機器なしでも構成できること
がポイントです。
Proxmox を使って、低コストに分離開発環境やデモ環境、チーム向け検証環境を作りたい方には、かなり面白い選択肢になってきたと思います。
Githubリポジトリはこちらです。是非右上のStarredを押してあげて下さい。
日本語版Quickstartへのリンクはこちらです。
補足
- v1.0 の簡単なセットアップ方法は引き継ぎつつ、クラスタを自動検出し必要な設定を各ノードに配布します。その場合、VIP の入力が必要となります
- ノード数に機能的な制限はありませんが、実際に運用可能なノード数はノード間トラフィック量やホスト性能との見合いになります
- フェイルオーバー時は到達性継続を目的としており、通信セッションの透過維持を保証するものではありません
- クラスタ構成の場合、全てのメンバーノードが起動し、クラスタとして正常動作している状態で MSL Setup をインストールしてください
Pritunl VM を HA 構成にしたい場合
- MSL Setup インストール時に VM イメージ保存先として共有ストレージを選択しておく必要があります
- VM イメージ保存ストレージが 1 つしか存在しない場合は、選択できません
- MSL Setup インストール後、Pritunl VM は手動で Proxmox HA リソースへ登録する必要があります
- HA リソースに登録しない場合でも、共有ストレージ上にある VM であれば Live Migration は可能です
Ceph クラスタ利用時の注意
Ceph クラスタ上でも動作試験を実施しており、正常動作を確認しています。
ただし、MSL Setup は Firewall 設定を有効にするため、Ceph 関連の Firewall ルールが事前に設定されていない場合、インストール中に Ceph ストレージが利用不可能となる可能性があります。
Ceph クラスタを利用している場合は、以下のサンプルを参考に、適切な Firewall ルールを事前設定してください。
Example IPSet
Ceph ノード間通信を許可するための IPSet 作成例です。
Datacenter -> Firewall -> IPSET -> Create
- Name:
ceph_peers
Datacenter -> Firewall -> IPSET -> ceph_peers -> IP/CIDR Add
-
192.168.xxx.xxx/32← Replace with your Ceph node IP address -
192.168.xxx.yyy/32← Replace with your Ceph node IP address -
192.168.xxx.zzz/32← Replace with your Ceph node IP address
Example Firewall Rules
Datacenter -> Firewall -> Add
| Enabled | Type | Action | Protocol | Source | Destination | D.Port | Comment |
|---|---|---|---|---|---|---|---|
| Yes | in | ACCEPT | tcp | ceph_peers | ceph_peers | 6800:7300 | Ceph OSD |
| Yes | in | ACCEPT | tcp | ceph_peers | ceph_peers | 6789 | Ceph Monitor1 |
| Yes | in | ACCEPT | tcp | ceph_peers | ceph_peers | 3300 | Ceph Monitor2 |