エンジニアブログ NetOpsとは?Arista Networksを用いた自動化のご紹介

Arista社のネットワーク機器は、自動化に必要なプログラマビリティに優れております。
今回は、OSSを含めた様々なツールを使った運用の自動化をご紹介いたします。

1. はじめに

ネットワークは、導入して終わりとならずその後の運用が非常に重要となります。
このネットワーク運用に対して、大小あれど何かしらの課題を抱えていらっしゃる方が多いのではないでしょうか。
今回は、Arista機器に対して様々なツールを使って運用を自動化するNetOpsの例をご紹介いたします。

2. ネットワーク運用の課題

皆様、ネットワークを運用していくうえでこのような課題は抱えていないでしょうか。

network_problem.png

今回は、このような課題を様々なソフトウェアを用いて解決していきたいと思います。

3. ネットワーク運用の課題を解決する運用自動化 ~NetOpsとは?~

突然ですが、DevOpsという言葉を聞いたことはありませんか?
DevOpsとは、開発(Development)と運用(Operations)の統合を目指した造語です。
従来は、開発と運用は異なるチームで行われることが一般的でしたが、
DevOpsの考え方では開発と運用が一つのチームとしてアジャイル開発として
継続的に改善をしてくことが目標となります。
これをネットワークに当てはめた言葉が、NetOpsとなります。
元々は、Network Operationsの略称でしたが、DevOpsの流れから
NetOps2.0としてネットワークにもアジャイル開発が適用されるようになりました。

4. NetOpsに用いられるツール郡

NetOpsには、以下のようなツールを用いて構成されます。

netops_tools.png

今回は、赤字のツールを用いてオペレーションミスを軽減できるNetOps例をご紹介します。

5. AristaによるNetOpsの実現

今回は、Arista Communityにある以下の例を参考に検証してみました。
https://arista.my.site.com/AristaCommunity/s/article/network-ci-part-3

検証シナリオは下記の通りです。
本番環境へ導入中のIP Closネットワークに対して、新しい機器追加のオペレーションを行います。
この環境は、コンフィグをJinjaテンプレートベースで管理しています。
今回のシナリオでは、このJinjaテンプレートからAnsibleを用いてコンフィグを生成し、コンフィグの正確性分析、
ロボット検証、差分確認、本番環境へのデプロイまでをCI/CDの仕組みを利用して自動化します。
これにより、本番環境適用前にミスを発見、トラブルを軽減をします。

概要図

netops_ipclos.png

CI/CDのステップは、下記の5ステップとなります。
1. Build(詳細設計)
JinjaテンプレートとAnsibleを用いて、テンプレートファイルから各機器のコンフィグを生成します。
これにより、機器ごとのコンフィグ管理から共通テンプレートによる管理の簡略化が行なえます。

2. Analysis(コンフィグレビュー)
Buildフェーズで生成されたコンフィグの正確性をBatfishにて分析します。
例えば、作成したACL名とInterfaceに紐づけたACL名の不一致などを検知してアラートを発生させます。

3. Test(検証)
Batfishではコンフィグの正確性を分析しました。
しかしながら、Batfishでは実際の通信疎通などの確認は行っておらず、確認が完全とは言えません。
Testフェーズでは、Arista cEOSを用いて本番環境を擬似したネットワークを構成し、 Robot Frameworkを用いて検証を実施します。
これにより、実際の疎通やコントロールプレーンの状態などを確認することができます。

4. Diff(差分比較)
Test(検証)まで正常に完了した場合、残りは本番環境への適用となります。
本番環境に適用するにあたって、Buildフェーズで作成したコンフィグと既存の本番環境のコンフィグに差分があった場合は、意図しない動作がする可能性があります。
Diffフェーズでは、本番環境とTestフェーズで使用したコンフィグとの差分確認を行います。
人の目で最終的に確認することで、不安なく本番環境へ適用の準備を行えます。

5. Push(適用)
Pushフェーズでは、本番環境へコンフィグの適用を実施します。
このフェーズは、自動的には行わずPushボタン型で任意のタイミングで実行することで、
事前の監視抑止など通常の設定変更時の運用を踏襲することができます。

これら5ステップをGitLab Runnerを用いて自動化します。
CI/CDの実行は、テンプレートファイルやパラメーターをGitLab上にcommitのみで自動的に行われます。

6. デモンストレーション

ここからは、実際に実行した結果を確認していきます。
今回のシナリオでは、下記2つの誤りを検知して修正していきたいと思います。
1. BGP ECMP設定ミス
2. GW IP(Eth3)設定ミス

netops_demo_scenario.png

1. Build(詳細設計)
まずは、GitLab上へCommitするファイルを任意のディレクトリ上に準備します。
このファイルには、機器コンフィグを作成するためのテンプレートはもちろんですが、検証や分析などを行うプログラムやCI/CDの手順書に当たる.gitlab-ci.ymlも配置する必要があります。

実際に配置が完了しましたら、GitLabへCommitを行います。

2. Analysis(コンフィグレビュー)
Commitを行うと、GitLab Runnerが自動的に.gitlab-ci.ymlを確認し、自動的にCI/CD手順を実行します。
テンプレートなどに誤りがない場合は、「passed」で完了しますが、今回のシナリオでは2つの誤りがありますので「failed」でCI/CDワークフローがストップします。


この画像では、Analysisフェーズで「failed」となりました。
これは、batfishによって誤りを検知したことを表します。

実際に誤りの内容を確認してみましょう。
「☓」になっている部分をクリックすることで、詳細のログを表示することができます。


今回の例では、「Number of paths 1 != 2 number of spines」と出力されています。
これは、構成されるBGP Neighbor数がBGPのmaximum-pathsで設定されている数より多くなってしまうことを表しています。

では、テンプレーファイルを修正していきます。
AristaのデフォルトBGP maximum-pathsは1のため、修正して2以上の値を記載する必要があります。

3. Test(検証)
修正が完了しましたら、最初と同じように再度GitLabへ修正したファイルをcommitします。
すると、Analysisフェーズは正常に完了しましたが、Testフェーズで「failed」となりました。


では、詳細のログを確認してみましょう。

最初の赤枠では、Leaf1/Leaf2のSVIからLeaf3のSVIに対してpingが成功し「PASS」となっております。

2つ目の赤枠では、E2E Connectivityが「FAIL」となり失敗していることがわかります。
これは、Host3からHost1,Host2のpingが失敗し、「FAIL」となっております。
これらの情報から、IPは正しく設定されているが、経路やGWの設定に誤りがある可能性が考えられます。

実際に、パラメーターを確認してみるとLeaf3のSVIアドレスが、HostのGW設定と乖離があることがわかりました。
Host向けのInterfaceは第四オクテットを「.1」で統一しているため、Leaf3も「.1」へ修正します。

4. Diff(差分比較)
修正後、再度commitを行いCI/CDワークフローを実行します。
すべてのフェーズで誤りは検出されず、「passed」と表示され正常に完了しました。


適用前に、Diffをクリックし本番で動いているコンフィグと今回作成されたコンフィグの差分を確認します。
下記のような形で、機器ごとに+/-で記載された差分表が作成されます。
これにより意図せず追加されてしまう設定や、消えてしまう設定を確認します。

5. Push(適用)
差分確認が完了しましたら、最後は本番機へ適用となります。
監視対象から外すなどの設定変更前の運用を行った後、任意のタイミングで「▶」ボタンをクリックし実行します。

本番機へコンフィグの投入が正常に完了すると、Pushフェーズでもチェックマークが表示されます。

これにより、CI/CDを用いて安全に本番機への設定変更を実施することができました。
最後に、本番機へ投入した際のログを確認してみましょう。
事前に定義したshowコマンドを投入時に実行し、Before/Afterのログ取得を行います。
今回の例では、ARPテーブルや経路の情報を取得しログとして記録します。


これにて、CI/CDによるオペレーションのすべてが完了となります。
このように、5つのフェーズでコンフィグの生成から誤り検知までを行い、安全に本番機へコンフィグ適用ができました。
では、CI/CDの仕組みを作る際に、Arista機器を利用するメリットは何でしょうか?

7. Arista機器利用のメリット

1. プログラマビリティが充実
Aristaでは、eAPIやPython,Goのオンボックススクリプティングなど、充実した自動化機能が搭載されております。
また、今回のCI/CDでも参考にしているArista Communityでは、一般ユーザーからArista社員まで幅広いエンジニアが様々な自動化や便利な仕組みなどを公開しており、参考にすることができます。
Arista Community
https://arista.my.site.com/AristaCommunity/s/

2. コンテナベースのArista cEOS提供
Arista cEOSは、ネイティブなコンテナベースのネットワークOSとなります。
コンテナのため、仮想アプライアンスと比べ、少ないサーバーリソースで実行できるだけでなく、デプロイもymlファイルベースで簡単に行うことができます。
これにより、通常の検証では再現が大変な大規模環境も簡単に再現することができます。

8. まとめ

今回は、Arista機器を用いたNetOps(CI/CD)をご紹介しました。
ご紹介したNetOpsは、あくまで一例に過ぎません。
実際の適用には、お客様とディスカッションしながら要件などを固めて最適なものを検討していければと考えております。
日商エレクトロニクスでは、NetOpsのような自動化だけではなく、機器の選定から検証など幅広くサポートしております。
気になることがありましたら、是非以下のフォームよりお問い合わせをいただけますと幸いです。

エンジニアブログ

NELabに関するお問い合わせは、
こちらのフォームからご連絡ください。