これはなに?
こちらの絵が、やりたいことです! Catalyst9300 に ThousandEyes のDockerエージェントをインストールして設定して動作確認します。Catalyst9300上の Docker アプリのホストの仕方の参考にもなります。
ThousandEyes
いろんなところに配置したソフトウェアエージェントを使って、任意のポイント間を任意のテストトラフィックを発生させて、そのネットワークのサービスレベルを可視化、それがクラウドポータルからめちゃくちゃ簡単にできるという、サウザンドアイズという会社およびサービスがありました。いろんなところにお目々👀 があるという感じですね。実際にはお目々は見ているというより、何かを発生させる(TracerouteしたりWebにHTTPしたり拠点間でRTP出したり)のでちょっとミスリーディングかも。実際に流れているものを監視する手法をパッシブモニタリング(受動型監視)、能動的にテストを行ってその結果から品質を可視化する手法をアクティブモニタリング(能動型監視)とよびますが、サウザンドアイズの中心となる特徴はアクティブモニタリングの方になります。
※参考 Cisco IOS を活用した “見える化”の階段 2013年
アクティブモニタリングとパッシブモニタリングの組み合わせについてごちゃごちゃ書いてます :-)
で、2020年に某シスコシステムズに買収・統合されてその統合具合が注目されていました。
サウザンドアイズのエージェントには、全世界に配置してくれているクラウドエージェント、自分で好きなところ(ラズパイとか仮想マシンとか)に配置するエンタープライズエージェント、パソコンにインストールするクライアントエージェントといったタイプがありますが、どこにお目々を置きますか?という選択が必要で、基本的にはお目々の数やテストの数に応じてお金がかかるという感じです。
ThousandEyes on Cisco
Ciscoルーターやスイッチでは、以前からアプリケーションホスティングという仕組みを使って、装置の上に任意のアプリケーションを立ち上げることができており、サウザンドアイズのエージェントをホストするソリューションがありました。データセンターにサウザンドアイズ用の仮想マシンを専用に作ったり、もちろんラズパイを配置したりといった、物理的な部分が節約できることと、ネットワーク装置そのものからテストトラフィックが発生しているように作れるため、特に拠点間比較などネットワークの切り分けと組み合わせてトラブルシュートがわかりやすくなるといった利点がありました。
- クラウドエージェント
- エンタープライズエージェント ... OVA/OVF, Hyper-V, Nuc/ラズパイ, Cat9K/ISR/ASR, JUNOS, Linux Package, Docker, AWS Marketplaceなどなど <== ここの話
- エンドポイントエージェント
Docker タイプの ThousandEyes エージェントを Catalyst9300 上に立ち上げる
私も過去に、ThousandEyesのエージェントをCatalystに以前ホストして遊んでいたことがあるんですが、前はKVMベースのものしかなくて、しかも限られたCatalystのApp-hosting用のリソースを使ってしまって、動くには動いてたんですが取り回しに苦労したんですよね。
それが今ではCatalyst9300のApp-hositngのDockerの上で動くThousandEyesのDockerタイプのエージェントがリリースされていて、さらに公式のリリースノートにもサポートが明記されていたので、重い腰を上げてほとんど自分用のメモとして残しておくことにしました。
- Catalyst 9300 のDockerコンテナでThousandEyesエージェントが動く
- IOS XE App-hostingの機能を使って設定
- オプションのSSDが不要でBootflashだけでよくなった(以前のKVMエージェントだとSSDが必要だった)
※ちなみにオプションのSSDってこれ... 普通買いませんよね...私持ってますが - 敷居が低い! Catalyst9300 持ってたら試せる!(あとライセンス?)
- ThousandEyesエージェントはここからダウンロード
Release Notes for Cisco Catalyst 9300 Series Switches, Cisco IOS XE Amsterdam 17.3.x
ThousandEyes Enterprise Agentの新バージョンを紹介します。これは、アプリケーション ホスティング機能を使用してシスコ デバイス上で動作する Docker ベースの組み込みアプリケーションです。Enterprise Agent は、SSD とブートフラッシュの両方で使用できます。
Programmability Configuration Guide → Application Hosting を参照してください。
(ネットワークアドバンテージ)
Programmability Configuration Guide, Cisco IOS XE Amsterdam 17.3.x
以前の Cisco IOS XE リリースでは、ThousandEyes はサードパーティの KVM (Kernel-based Virtual Machine) アプライアンスとして SSD 上でサポートされていました。
Cisco IOS XE Amsterdam 17.3.3では、新バージョンのThousandEyes Enterprise Agentが導入されています。これは、アプリケーション ホスティング機能を使用してシスコ デバイス上で動作する、Docker ベースの組み込みアプリケーションです。Enterprise Agentは、SSDとブートフラッシュの両方で利用可能です。Enterprise Agentは、ブラウザテスト(ページロードとトランザクション)を除くすべてのテストをサポートしています。
※関係ないけど DeepL めちゃくちゃ便利ですね!
やってみましょう
1. 準備〜インストール
1.1 IOSバージョンを新しくしておく
Cat9300TMT02#sh ver | i IOSXE
Cisco IOS Software [Bengaluru], Catalyst L3 Switch Software (CAT9K_IOSXE), Version 17.5.1, RELEASE SOFTWARE (fc3)
* 1 41 C9300-24P 17.05.01 CAT9K_IOSXE INSTALL
*
1.2 ブートフラッシュをきれいにしておく
Cat9300TMT02#show install summary
[ Switch 1 ] Installed Package(s) Information:
State (St): I - Inactive, U - Activated & Uncommitted,
C - Activated & Committed, D - Deactivated & Uncommitted
--------------------------------------------------------------------------------
Type St Filename/Version
--------------------------------------------------------------------------------
IMG C 17.05.01.0.144
--------------------------------------------------------------------------------
Auto abort timer: inactive
--------------------------------------------------------------------------------
Cat9300TMT02#install remove inactive
1.3 ファイルをCatalystのbootflashにコピー
Cat9300TMT02#sh flash: | i thousand
179 178872320 Apr 06 2021 19:03:14.0000000000 +00:00 thousandeyes-enterprise-agent-3.0.cat9k.tar
1.4 TARファイルをインストール
Cat9300TMT02#app-hosting install appid <name> package bootflash:thousandeyes-enterprise-agent-3.0.cat9k.tar
うまくいけば DEPLOYED となる。
この例では を thousandeyes_enterprise_agent としてます。
Cat9300TMT01#show app-hosting list
App id State
---------------------------------------------------------
thousandeyes_enterprise_agent DEPLOYED
- デプロイされた状態
- Actiavateはまだ
- Startはまだ
2. 内部〜外部ネットワークの設定
ネットワークの設定をしていきます。
- フロントパネルポートのVLAN(スイッチポート)を引っ張ってきてトランクで内部アプリにつなぎ込む <==今回はこちら
- フロントパネルポートのルーテッドインターフェースをNATして内部に内部アプリにつなぎ込む
※参考 [Application Hosting on Front-Panel Trunk and VLAN Ports]
(https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/prog/configuration/173/b_173_programmability_cg/application_hosting.html#id_94841)
2.1 Vlan と AppGigabitEthernet インターフェースの接続
Cat9300TMT02#sh run int gi 1/0/24
!
interface GigabitEthernet1/0/24
switchport access vlan 10
!
interface Vlan10
ip address 10.71.154.50 255.255.255.248
!
interface AppGigabitEthernet1/0/1
switchport trunk allowed vlan 10
switchport mode trunk
2.2 AppGigabitEthernet と 内部アプリの接続, Dockerの設定
設定は見た目通り、比較的ストレートでわかりやすいです。
app-hosting appid TEApp
app-vnic AppGigabitEthernet trunk
vlan 10 guest-interface 0
guest-ipaddress 10.71.154.51 netmask 255.255.255.248
app-default-gateway 10.71.154.50 guest-interface 0
app-resource docker
prepend-pkg-opts
run-opts 1 "-e TEAGENT_ACCOUNT_TOKEN=<ThousandEyesPortalのToken>" <=== ThousandEyesのクラウドポータルから取得
run-opts 2 "--hostname Cisco-TEDocker"
name-server0 208.67.222.222
※ThousandEyesのトークンはこちらから取得しておきます
3. Dockerの起動と確認
3.1 Dockerのアクティベートと起動
[Lifecycle for an Application]
(https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/prog/configuration/173/b_173_programmability_cg/application_hosting.html#id_74357)を意識しながら、Applicationを立ち上げていきます。
こちらは、覚えておくと何かと便利なコマンドです(マニュアルからの抜粋)。
Device# app-hosting install appid iox_app package usbflash1:my_iox_app.tar.tar
Device# app-hosting activate appid iox_app
Device# app-hosting start appid iox_app
Device# app-hosting stop appid iox_app
Device# app-hosting deactivate appid iox_app
Device# app-hosting uninstall appid iox_app
Deployed => Activated => Running やっていきます。
Cat9300TMT02#app-hosting activate appid thousandeyes_enterprise_agent
thousandeyes_enterprise_agent activated successfully
Current state is: ACTIVATED
Cat9300TMT02#sho app-hosting list
App id State
---------------------------------------------------------
thousandeyes_enterprise_agent ACTIVATED
Cat9300TMT01#
Cat9300TMT01#app-hosting start appid thousandeyes_enterprise_agent
thousandeyes_enterprise_agent started successfully
Current state is: RUNNING
いい感じに立ち上がっていることを確認。
Cat9300TMT02#show app-hosting detail appid TEApp
App id : TEApp
Owner : iox
State : RUNNING
Application
Type : docker
Name : thousandeyes/enterprise-agent
Version : 3.0
Description :
Path : flash:thousandeyes-enterprise-agent-3.0.cat9k.tar
URL Path :
Activated profile name : custom
Resource reservation
Memory : 500 MB
Disk : 1 MB
CPU : 1850 units
CPU-percent : 25 %
VCPU : 1
Attached devices
Type Name Alias
---------------------------------------------
serial/shell iox_console_shell serial0
serial/aux iox_console_aux serial1
serial/syslog iox_syslog serial2
serial/trace iox_trace serial3
Network interfaces
---------------------------------------
eth0:
MAC address : 52:54:dd:2d:a8:e2
IPv4 address : 10.71.154.51
IPv6 address : ::
Network name : mgmt-bridge-v10
Docker
------
Run-time information
Command :
Entry-point : /sbin/my_init
Run options in use : -e TEAGENT_ACCOUNT_TOKEN=TOKEN_NOT_SET --hostname=$(SYSTEM_NAME) --cap-add=NET_ADMIN --mount type=tmpfs,destination=/var/log/agent,tmpfs-size=140m --mount type=tmpfs,destination=/var/lib/te-agent/data,tmpfs-size=200m -v $(APP_DATA)/data:/var/lib/te-agent -e TEAGENT_PROXY_TYPE=DIRECT -e TEAGENT_PROXY_LOCATION= -e TEAGENT_PROXY_USER= -e TEAGENT_PROXY_AUTH_TYPE= -e TEAGENT_PROXY_PASS= -e TEAGENT_PROXY_BYPASS_LIST= -e TEAGENT_KDC_USER= -e TEAGENT_KDC_PASS= -e TEAGENT_KDC_REALM= -e TEAGENT_KDC_HOST= -e TEAGENT_KDC_PORT=88 -e TEAGENT_KERBEROS_WHITELIST= -e TEAGENT_KERBEROS_RDNS=1 -e PROXY_APT= -e APT_PROXY_USER= -e APT_PROXY_PASS= -e APT_PROXY_LOCATION= -e TEAGENT_AUTO_UPDATES=1 -e TEAGENT_ACCOUNT_TOKEN=<YOUR_TOKEN> --hostname Cisco-TEDocker
Package run options : -e TEAGENT_ACCOUNT_TOKEN=TOKEN_NOT_SET --hostname=$(SYSTEM_NAME) --cap-add=NET_ADMIN --mount type=tmpfs,destination=/var/log/agent,tmpfs-size=140m --mount type=tmpfs,destination=/var/lib/te-agent/data,tmpfs-size=200m -v $(APP_DATA)/data:/var/lib/te-agent -e TEAGENT_PROXY_TYPE=DIRECT -e TEAGENT_PROXY_LOCATION= -e TEAGENT_PROXY_USER= -e TEAGENT_PROXY_AUTH_TYPE= -e TEAGENT_PROXY_PASS= -e TEAGENT_PROXY_BYPASS_LIST= -e TEAGENT_KDC_USER= -e TEAGENT_KDC_PASS= -e TEAGENT_KDC_REALM= -e TEAGENT_KDC_HOST= -e TEAGENT_KDC_PORT=88 -e TEAGENT_KERBEROS_WHITELIST= -e TEAGENT_KERBEROS_RDNS=1 -e PROXY_APT= -e APT_PROXY_USER= -e APT_PROXY_PASS= -e APT_PROXY_LOCATION= -e TEAGENT_AUTO_UPDATES=1
Application health information
Status : 0
Last probe error :
Last probe output :
3.2 ThousandEyesポータルから確認
ThousandEyesのポータルサイトから、Catalyst9300上のエージェントが確認できます。これで基本的には各種テストや確認はすべてブラウザから行えるようになりました。
そのほか
今回は、ラボにあったCatalyst9300に設定してみましたが、どうやらマニュアルによるとこちらのエージェントが標準組み込みになりそうな気配です。LANスイッチがクラウドからの設定で自在にアクティブモニターをでき、各種ネットワークサービスの品質を可視化できる世界はもうすぐそこにあることを感じました。楽しみですね!
Programmability Configuration Guide, Cisco IOS XE Amsterdam 17.3.x
ThousandEyes Enterprise Agent には、BrownField と GreenField の 2 種類があります。既存のデバイスについては、BrownfieldバージョンをThousandEyesウェブサイトからダウンロードできます。ただし、新しいデバイスは、ブートフラッシュにGreenFieldアプリケーションがロードされた状態で出荷されます。
気が向いたら、ルーテッドポートとNATの組み合わせでもやってみたいと思います。今時のCatalystはNATが出来るんですねぇ〜😲
Supported Network Types
Cisco IOSネットワークアドレス変換(NAT)について
Cisco IOS XE Gibraltar 16.12.1搭載のCatalyst 9300シリーズ スイッチおよびC9300L
Catalyst 9400シリーズ スイッチ(Cisco IOS XE Amsterdam 17.1.1搭載
これらのプラットフォームでは、フロントパネルのデータポートとAppGigabitEthernetポートに適用されるハードウェアデータポート機能によってNATがサポートされています。
最後まで読んで頂き、ありがとうございました!
PS: ライセンスゥゥゥ!? はこの記事では特に深追いしませんが、なんかあるらしいので気になった方は、そちらの方面に聞いてみてください。
Ordering Guide for Customers with Existing Catalyst 9000 Deployments to Request ThousandEyes Credits
https://www.cisco.com/c/en/us/products/collateral/switches/catalyst-9000/nb-06-cat-9k-og-cte-en.html