コンテンツにスキップ

8. ネットワークの自動化

7.5. ネットワーク仮想化(SDN)

7.5.1. ルータやスイッチの構造

ルータやスイッチの処理の種類や機能は大きくデータプレーン、コントロールプレーン、マネジメントプレーンの3つに分類される。

役割

分類 機能
データプレーン ルーティングテーブル/MACアドレステーブルの検索, パケットカプセル化非カプセル化, IEEE802.1Qタグ追加削除, NAT変換, フィルタリングなど
コントロールプレーン ルーティングテーブル/MACアドレステーブルの作成, ARPのアドレス解決など

マネジメントプレーンはネットワーク機器の構成/設定の管理を行う部分となる。 ユーザに機器の操作/管理の機能を提供する。

7.5.2. SDNの概要

SDNはソフトウェアによりネットワークを管理/制御、構成するための技術/考え方。 SDNではデータプレーンの処理とコントロールプレーンの処理を分けて考える。 SDNコントローラでコントロールプレーンの処理を一括で行う特徴がある。

SDN構成では各ネットワーク機器上ではデータプレーンのみが動作する。

SDNコントローラ

7.5.2.1. SDNのアーキテクチャ

アーキテクチャ

インフラストラクチャ層はデータ転送を実際に行うネットワーク機器のレイヤ。 これらの機器の制御には、OpenFlowやNETCONFなどの標準プロトコルや、機器ごとに設定されたAPIを利用する。 この部分のAPIはSouthbound APIと呼ばれる。 SBIにはOpenFlow、OpFlex、Telnet、SSH、SNMP、NETCONF、RESTCONFなどがある。

コントロール層はSouthboundのプロトコル(SBI)やAPIを使用した機器の制御をするレイヤ。 同時にインフラストラクチャ層のネットワーク機器のネットワーク機能を抽象化したAPIをアプリケーション層に提供する。 この部分のAPIはNorthbound API(NBI)を呼ばれる。

アプリケーション層はSDNコントローラに設定するアプリケーションが該当するレイヤ。 SDNを操作するアプリケーションはSDNコントローラとセットで提供される。 APIを通じてネットワークの様々な処理をSDNコントローラへ指示する層となる。

7.5.3. OpenFlow

OpenFlowはSDNを実現する技術の1つでONFにより規定されたSouthbound APIに相当するプロトコル。 この技術ではコントロールプレーンとデータプレーンの処理を分離させることができる。

OpenFlowではSDNコントローラのOpenFlowコントローラ、機器側のOpenFlowスイッチにより実現される。

OpenFlow

7.5.3.1. OpenFlowの特徴

OpenFlowではOpenFlowコントローラでフローテーブルと呼ばれるデータ転送の通信ルールを規定したテーブルを作成し、ネットワーク上のOpenFlowスイッチに配布する。 各OpenFlowスイッチはそのフローテーブルに従ってデータ転送/通信を行い、これはホップバイホップ方式と呼ばれる。

OpenFlowの特徴は以下の通り。

  • フローテーブルの設定により柔軟なネットワークが構築可能
  • フローテーブルの維持/設定/管理が難しい
  • すべての機器がOpenFlowに対応している必要がある

7.5.3.2. OpenDaylight

OpenDaylightはOSSのSDNコントローラでベンダー機器の垣根を超えることを目標に作られたもの。

7.6. ネットワークの自動化

7.6.1. ネットワーク自動化/プログラマビリティ

クラウドサービスやネットワークの複雑化により従来のネットワーク管理者が手動で機器を設定するのは非常に手間がかかるようになってきた。

こうした背景からネットワーク自動化プログラマビリティが重要視されている。

7.6.2. REST API

REST APIはREST思想に基づいて作成されたAPIで、ネットワーク自動化のための設定にも利用されている。

7.6.2.1. REST

RESTは以下項目を満たすAPIと定義されている。

  • クライアント/サーバ構成
  • ステートレス
  • キャッシュの可否の制御が可能
  • 統一されたインターフェイス
  • 階層化されたシステム構成
  • コードオンデマンド

7.6.2.2. HTTP

多くのREST APIはHTTPプロトコルを使用している。 リソース操作はリソースを識別するURIとリソース命令のHTTPメソッドで行われる。

  • URI ... https://hogehoge.com/api/v1/のようなリソース位置を示す文字列
  • HTTPメソッド ... リソースに対して行いたいアクション(CRUD)
CRUD HTTPメソッド 説明
Create POST/PUT 作成
Read GET 読み取り
Update PUT 更新
Delete DELETE 削除

7.6.2.3. JSON

REST APIでやりとりされるデータ形式にはJSON, XML, YAMLなどがある。 最近はJSONが使われることが多い。

7.6.3. 構成管理ツール

7.6.3.1. 従来の構成管理の問題

従来の構成の問題は以下手順を全ての機器に行う必要がある点にある。 そのため構成管理を手動で行うのは困難となっていた。

  • 対象デバイスにログインする
  • 設定コマンドの実行
  • 設定した内容をファイルに保存して保管
  • 修正を行ったらファイルを更新して保管

上記の問題や構成ドリフトが発生しないように、構成管理ツールが開発された。

7.6.3.2. 構成管理ツールの概要

構成管理ツールを用いたアーキテクチャでは各機器の設定ファイルを共有フォルダで一元管理する。 そのためネットワーク管理者は共有ファイル上の設定ファイルを編集するだけで機器に変更を加えることができる。

7.6.3.3. Ansible/Puppet/Chef

構成管理ツールにはAnsibleやPupper, Chefなどがある。

AnsibleはRedHatが開発するOSSの構成管理ツール。 構成管理サーバから各ネットワーク機器に設定を送るPush型の通信形態となっている。 各機器にエージェントをインストールしなくても設定を送れるエージェントレスな構造となっている。 また構成ファイルはYAMLを使って記述する。

PuppetはPuppet Labsが開発するOSSの構成管理ツール。 ネットワーク機器が構成管理サーバから設定を取得するPull型の通信形態となっている。 クライアント側にもソフトウェアのインストールが必要なエージェントモデルとなっている。 なお設定の取得の際はHTTP/HTTPSでTCP8140番ポートを使用して接続を行う。

ChefはChef社が開発するOSSの構成管理。 管理対象がChefに対応している必要があるため通信機器の管理にはあまり使われないPull型の形式。 制御ファイルはRubyで記述される。

構成管理ツール 制御ファイル 構成ファイル形式 サーバ待ち受けポート プロトコル アーキテクチャ 通信形態
Ansible PlayBook YAML なし SSH,NETCONF エージェントレス Push型
Puppet Manifest 独自形式 TCP8140番 HTTP/HTTPS エージェント Pull型
Chef Recipe/Runlist Ruby TCP 10002番 HTTP/HTTPS エージェント Pull型