シスコには SDN(Software Defined Networking)に関する多くの取り組みがあり、様々なソリューションがリリースされています。このブログでは、Cisco IOS に対するプログラマビリティとして公開される「onePK(Cisco ONE Platform Kit)」の観点から、SDN について考えていきたいと思います。
onePKとは
onePK(one Platform Kit)とは、IOS、IOS-XE、IOS-XR、NX-OS を対象としたソフトウェア開発キット で、C 言語、Java、Python の開発言語の ライブラリ として提供されます。現在、以下のように、API ドキュメントが公開され始めたという状況です。
もうしばらくすると SDK 自身の公開が開始される予定です。また、onePK 対応の Cisco IOS についても、今月に ISRG2 および ASR 1000 のルータ製品を皮切りに、各プラットフォーム毎に対応 IOS バージョンがリリースされる計画になっています。
このonePK で提供される API を利用すれば、IOS を制御するアプリケーションを作ることができます。具体的に制御できるものには、経路制御、アクセスコントロール、QoS、AAA などがあります。またデバイス情報、インターフェイス情報、Syslog 情報、CDP 情報など、非常に多くの情報を取得することもできます。
onePK の特徴は、自律分散で動作する従来の IOS 機能と、onePK を使って制御する機能を併用することができるハイブリッド型の SDN である点です。つまり、従来の Config ベースの自律分散機能をベースとして利用しつつ、onePK アプリケーションから優先度の高い制御を実行することで、ネットワークを制御できるようになります。また少し違う視点から見ると、onePK の API を使うことで、「IOS のコントロールプレーンの一部を自分で実装できる」もしくは「IOS のフォワーディング プレーン機能を利用したアプリケーション開発ができる」という言うことができます。SDN でよく出てくるプロトコルの 1 つである OpenFlow の場合、OpenFlow の仕様で定義されているデータプレーン機能をコントローラで利用できるのに対し、onePK では豊富な IOS のデータプレーン機能の利用できるということになります。
ネットワークのプログラマビリティの楽しさ
私は学生時代に趣味で、C 言語を使ってゲームを作っていました。社会人になってから、業務としてプログラム開発をしたことはありませんが、onePK の SDK を手に入れた時、久しぶりに C 言語でプログラムを書いてみようという気持ちになりました。そこで私が最初に取り組んだのは、IP の経路制御のアプリケーションでした。
シスコのネットワーク エンジニアである私が言うのも奇妙かもしれませんが、私は以前から、ルーティング プロトコルの操作や管理を面倒だと思っていました。皆さんも RIP や OSPF といったルーティング プロトコルはご存知だと思います。これらのプロトコルの経路制御は、メトリックを緻密に設計し、その設計に基づいて各ルータを設定する必要があります。さらにメトリックはプレフィックス単位ではないので、プレフィックス単位で経路を制御しようと思うと、PBR(Policy-Based Routing)や MPLS-TE などを使う必要があり、これまた設計/設定が大変です。
onePK を使えばこのような課題が解決できるかも、という期待が私の中に生まれたのでした。
実際に作ってみた
IP 経路制御のアプリ作成には、onePK のルーティング サービスセットの API を利用します。onePK の API のお作法になじむまでは少し苦労しましたが、実はほとんどがサンプル プログラムを使うことで実装できてしまいました。操作性を考えて、ネットワークトポロジ上のルータのアイコンをクリックして経路指示を行うような GUI も作ってみました。なお GUI に関しては onePK の API では提供されていませんので、別途開発が必要です。
GUI 操作で実際に IP 経路情報をルータに入れ、show ip route コマンドで確認すると、以下のように“a”というフラグが付いたアプリケーション ルートが挿入されているのが確認できます。
このように onePK アプリが利用されている環境であっても、従来の IOS のコマンドや IP ルーティングの概念がそのまま使えます。これは ハイブリッド型SDNであるonePK のメリットの 1 つで、 RIP や OSPF などと混在させた運用もできるのです。RIP や OSPF などで IP バックボーンを構成して運用させたまま、必要に応じて一部のプレフィックスの経路だけを変更する、パイロット的な導入ができます。これができないと、IP バックボーンに必要とされる IP 経路情報のすべてをアプリケーションで制御しなければならなくなります。
また、ルータ内の IP 経路の排他制御に関しては、IOS の機能である Administrative Distance が便利です。onePK で処理されるアプリケーション ルートの Administrative Distance 値を小さく(優先度を高く)しておけば、RIP や OSPFと混在していても、アプリケーションで指示した通りに IP 経路制御ができます。
このようなアプリがあれば、回線やネットワーク機器のメンテナンス時や輻輳時に、一時的にトラフィックを迂回させるなんてことも、あっという間にできてしまいます。実際にこのアプリを使っていろいろな場所でデモを行なっていますが、皆さんからの評価は高く、その有用性を確信しました。このようなアプリが市場に出てくるようになれば、もっと迅速かつフレキシブルに IP ネットワークの運用ができるようになると思います。