ここから本文です

Docker Networkingの基礎知識――ソフトウェア定義型時代の到来

ITmedia エンタープライズ 9/8(木) 12:08配信

 2000年代前半、筆者はLinuxサーバを使った業務システムの導入プロジェクトに参画しました。32ビットのx86サーバ台数が数十台規模とそれほど多くはなく、要求されるLinuxサーバのインストールとOS設定も、それほど難しいものではありませんでした。しかし業務システム全体としては、ネットワークセグメントが多数存在し、各セグメントに所属するサーバのハードウェアコンポーネント、ストレージ、ネットワーク機器を全て監視する必要があります。全社ネットワークの論理構成と矛盾がないようにLinux OSのネットワークとハードウェア監視エージェントを適切に設定しなければなりませんでした。擬似障害のアラート発信可否のテストなどを含め、統合監視ができているかどうかも全サーバで入念にチェックする必要があり、非常に骨の折れる作業でした。

【画像:Dockerにおけるネットワーキング】

 この業務システムには、ファイアウォール機器、ネットワークスイッチ、負荷分散装置、さらにはWebサーバ、アプリケーションサーバ、データベースサーバからなる、いわゆる「3層構成」が含まれていました。当時の3層構成は、ハイパーバイザ型の仮想化環境ではなく、物理サーバ上にLinuxをインストールし、OSのIPアドレス、デフォルトゲートウェイ、ルーティングなどを設定していました。

 また、物理サーバに搭載された物理NIC(ネットワークインタフェースカード)のポート障害に備えるため、複数の物理NICを束ねるボンディング構成(物理NICの一つが故障しても残りの物理NICのポートで通信を継続できるように設定)にし、冗長構成の物理スイッチをLANケーブルで接続し、さらにVLAN設定などを行うことで論理的なネットワークを構成していました。

 当時の全社システムは、複数の物理NICを搭載した物理サーバ、物理スイッチ、Linux OSにおけるNICの冗長構成の設定、OSが提供するルーティングやゲートウェイ設定で構成されており、今から思えば、「ハードウェア定義型ネットワーキング」ともいえる非常に固定的なシステムでした。

 現在でも、このようなネットワーク障害に備えた物理サーバの構成や複数のネットワークセグメントが多数存在する全社システムは、一部のシステムが仮想化によってサーバ集約を実現できているため、物理サーバは一部が簡素化されているものの、システム要件に応じたネットワークの全体構成の複雑さは、あまり当時と変わっていないのが現実です。

 筆者が携わっている科学技術計算向けの超並列計算サーバ(超高速計算が要求されるスーパーコンピュータシステムなど)や、Hadoopと呼ばれるビッグデータ基盤ソフトウェアによるスケールアウト型基盤などのように、システム要件が限定的な個別システムの場合、比較的単純なネットワーク構成をとることが少なくありません。

 一方、前項の図に見られる業務システムは、2000年代前半の仮想化を含まない一般的な3層構成としては典型的な構成ですが、基幹業務系のシステムや関連部署のシステムなど、複数のネットワークセグメントが用途ごとに分かれており、ゲートウェイ設定、ルーティングの設定などが入り乱れています。また、関連会社とのサービス連係、特に、業界で伝統的に利用されている専用のレガシーな通信プロトコル(例えば、低速なモデム機器と公衆回線を使って卸売業と小売業が受発注で行うJCA手順や金融機関で使われている古い全銀協手順など)がTCP/IPを使うWebシステムと共に使われる場合は、ネットワーク機器構成が複雑になるだけでなく、非TCP/IP通信が可能な専用のサーバシステムの導入も検討しなければなりません。

 ちなみに、2016年現在でも流通、製造、金融業において、非TCP/IPのレガシーなプロトコルを使った大規模な無停止型サーバシステムが導入されています。ネットワーク機器構成の複雑性を低減させるだけでなく、業種や商習慣によって必要とされるレガシープロトコルへの対応も視野に入れる必要があります。

●ネットワーキングはハードウェア定義型からソフトウェア定義型へ

 2000年代中盤からのハイパーバイザ型の仮想化ソフトウェアの普及により、ネットワーク設定は非常に柔軟性の高いものに変化しました。具体的には、仮想化ソフトウェア上で作成した仮想マシンに対して、物理サーバに搭載されたNICポートとは独立した複数の仮想的なLANセグメントを作成したり、クラウド基盤ソフトウェアのOpenStack上では、異なるネットワークセグメントや仮想ルータからなる「ソフトウェア定義型ネットワーク」をユーザーがセルフサービスポータル画面から作成できるようになったりと、物理的なネットワーク機器の制限に縛られないネットワーク構成が求められるようになりました。

 物理的なNICやネットワークスイッチがなくなるわけでは決してありませんが、ネットワークを取り巻く環境は、制御するレイヤがハードウェア定義型からソフトウェア定義型へと変わってきています。特に、近年導入が進むOpenStackなどのIaaSのクラウド基盤では、従来の固定的な仮想化基盤に比べ、ソフトウェア定義型ネットワーキングと情報セキュリティに関する深い知識が問われるようになってきています。

●Dockerにおけるネットワーキング

 仮想化ソフトウェアやクラウド基盤では、仮想ブリッジ、仮想ルータ、さらに物理NICのポートが所属するネットワークセグメントとは別に定義したユーザー用の仮想的なネットワークセグメントなどを適切に管理できなければなりません。

 Dockerにおいても、仮想化ソフトウェアやクラウド基盤ソフトウェアと同様に、ソフトウェア定義型のネットワーキングを理解しなければなりません。例えば、単一の物理サーバ上で稼働するDockerコンテナ同士の通信や、別々の物理ホストで稼働するDockerコンテナ同士の通信を実現する「Swarm」(スウォーム)と呼ばれるDocker特有のクラスタの構築、さらには、同一LANセグメントに所属する複数のホストOS環境において、ホストOSとDockerコンテナを同一LANセグメントに所属させることで、異なるホストOS上で稼働するDockerコンテナ同士の通信を可能にする「ホストOSのブリッジインタフェースを利用した接続」など、コンテナ同士あるいはコンテナと外部システムが通信を行うための様々な仕組みが存在します。

 またDocker環境では、OpenStackで採用されている仮想スイッチを実現するソフトウェアなどを駆使することで、柔軟性の高いネットワーク構成を作成することもできます。

最終更新:9/8(木) 12:08

ITmedia エンタープライズ