エンジニアブログ 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ワークフローがストップします。