2023-08-20 Juniper Apstra を触ってみた

提供:hkatou_Lab
2023年8月23日 (水) 07:56時点におけるHkatou (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

DC で使用する BGP EVPN で、たくさんの機器を GUI から構築・設定・監視できる Juniper Apstra を触ってみました。

元々は Apstra 社の製品で Juniper に買収されたために、管理対象は QFX に限らず対応しています。

このため Juniper ブランドでありながらマルチベンダーに対応しています。

ストーリー

Cisco Nexus ACI / Juniper QFX Junos Fusion -> ベンダーにロックインされるだろ、いい加減にしろ !

BGP EVPN -> 標準技術で構築できるのでロックインされない -> パラメータが多くて構築がめんどいだろ、いい加減 ry)

BGP EVPN + Apstra -> Nexus / QFX / Arista / Whitebox 対応、GUI からたくさん管理できてにっこり

できること

メーカーの資料を読む限り、以下の内容が Apstra で実現可能なようです。(できるとは言っていない)

以下は自分が理解するために、メーカーの製品概要から抜き出した内容です。

対応機器

Juniper QFX Junos

Cisco Nexus NX-OS

Arista DCS EOS

Whitebox SONiC

Day0

BULE PRINT

ラック・接続・レイヤ数などのデザインを決める [1]

  • Super Spine ありか、Spine / Leaf のみか
  • 3 階層の 5-Stage CLOS 対応
ネットワーク構築
  • Apstra インストール
  • Apstra Agent インストール
  • Apstra ZTP
    • DHCP で機器管理ポートに IP 割当
    • NOS バージョン変更、ライセンス適用
    • Apstra Agent インストール
    • 初期コンフィグ適用

Day1

設定追加・変更Staged Blueprint
  • リファレンス アーキテクチャを元にコンフィグを自動生成
ロールバック
ネットワーク拡張・縮小・変更
その他
  • AS 番号などのリソース不足を事前確認

Day2+

IBA (Intent Based Analytics) : 運用であるべき姿をもとにして、正常性を保つ

SSOT (Single Source Of Truth) : 死活監視のみではなく、手順書でよくあるステータス確認を常時実行して、状態確認を行える

  • グラフデータベースの情報を元に、あるべき状態 (インテント) と、現在の情報を比較して正常性確認
    • 物理ポートは Up か
    • LACP でバンドルされているか
    • P2P リンクで BGP が Establish か
    • MAC アドレスが学習できているか

メンテナンスモード : 複数台の機器を GUI から操作してトラフィック迂回させ、NOS バージョンアップ

  • トラフィック迂回は他のソフトウェアでもよくありますが、正常性確認もセットで行えるのが良い点

コンフィグ レット : SNMP NTP などをテンプレート コンフィグとして各機器へ展開

できないこと

未対応 : ブラウン フィールドへ Apstra を展開する

  • 構築済みの環境 (ブラウン フィールド) を Apstra のコントロール下に置くことはできない [2]

メーカー資料リンク

Juniper Apstra 製品概要 (PDF)

Juniper Apstra 4.1.0 ハンズオン (PDF)

Juniper Apstra 4.1ユーザーガイド

  • NOS 側のエージェント設定とか

Apstra インストール

EVE-NG 公式サイトの手順 [3] でインストールしました。

起動して CLI と GUI のパスワードを設定しておきます。

スクリーンショット

てきとうに NX-OS / Junos / EOS で 3 layer 組んでみたの図。

Apstra とは管理ポートで各機器と通信できるようにします。

以下の図からは分かりづらいですが、MGMT の雲アイコンはすべて相互に繋がっています。

 
Apstra_at_EVE-NG

GUI にログインして、

 
Apstra_GUI_login

NOS は固定 IP で設定、Apstra GUI から IP 指定して Offbox として機器を検出。

 
Apstra_GUI_node_list

Onbox と Offbox の違いはよくわかっていません。

Apstra エージェント インストール用 NOS 初期コンフィグ

今回は ZTP はやらないことにしたので、NOS に固定 IP を設定、Apstra で IP 指定して検出させました。

検出させるためには、最小限連携用のコンフィグを適用しておく必要があります。

Apstra の IP と Reachability が取れるように、以下は <> のパラメータを環境に応じて書き換える必要あり。

Junos

Junos は応答プロンプトがあるため、パスワード入力時に停止します。流し込みはできません。

(load set terminal でできるかもですが、未確認)

root
Juniper

cli
configure
set system root-authentication plain-text-password
<root_pass>
<root_pass>
set system login user admin class super-user authentication plain-text-password
<root_pass>
<root_pass>

set interfaces em0.0 family inet address <mgmt_ip>
delete interfaces em0.0 family inet dhcp

set system services telnet connection-limit 15
set system services ssh
set system services netconf ssh

set system host-name <hostname>

set system management-instance
set routing-instances mgmt_junos routing-options static route 0.0.0.0/0 next-hop <mgmt_gw>
set system ntp server <ntp_server> routing-instance mgmt_junos
commit

NX-OS

admin

conf t
!
hostn <hostname>
!
no password strength-check
username admin role network-admin password admin
!
interface mgmt0
  ip address <mgmt_ip>
vrf context management
  ip route 0.0.0.0/0 <mgmt_gw>
feature telnet
feature nxapi
feature bash-shell
feature scp-server
feature evmed
nxapi http port 80
!
boot nxos bootflash:nxos.9.3.4.bin
!
ntp server <ntp_server> use-vrf management
!
guestshell enable
!
end

copy running-config startup-config

EOS

#zerotouch disable
!!! 自動で再起動がかかる
admin

enable

configure terminal

hostname <hostname>

vrf instance management
!

service routing protocols model multi-agent

aaa authorization exec default local

username admin privilege 15 role network-admin secret admin

interface Management1
 vrf management
 ip address <mgmt_ip>/24
 no shutdown
!
ip route vrf management 0.0.0.0 0.0.0.0 <mgmt_gw>

management telnet
 no shutdown
management ssh
 no shutdown
management api http-commands
   protocol http
   no shutdown
   !
   vrf management
      no shutdown
!
ntp server vrf management <ntp_server>

end

write memory
reload

!!! multi-agent 有効化のため、再起動

ナレッジ

Cisco NX-OS で Apstra Agent が Offbox 登録できない

オフボックスエージェントの作成 に、Apstra から NOS を認識させるための、各 NOS の初期設定が記載されていますが、NX-OS はコマンドが足りません。

GUI で show log ボタンをクリック

エラー内容を見てみると・・・

2023-08-20 01:00:43,389 INFO:10.11.252.189 install
2023-08-20 01:00:43,389 INFO:Ensure stable connection for 60s
2023-08-20 01:00:43,390 INFO:TASK: Check Connectivity
2023-08-20 01:00:44,777 INFO:Successful connection check..
2023-08-20 01:01:13,803 INFO:Successful connection check..
2023-08-20 01:01:43,820 INFO:Successful connection check..
2023-08-20 01:01:43,821 INFO:TASK: Get platform type
2023-08-20 01:01:45,841 INFO:10.11.252.189::nxos
2023-08-20 01:01:45,842 INFO:System Agent id: 
2023-08-20 01:01:47,619 INFO:TASK: Verify boot variables are same
2023-08-20 01:01:48,478 INFO:TASK: Get device facts
2023-08-20 01:01:49,143 INFO:aos found? True
2023-08-20 01:01:50,410 INFO:Command failed (rc=9), retrying..
2023-08-20 01:01:56,053 INFO:Command failed (rc=9), retrying..
2023-08-20 01:02:01,732 INFO:Command failed (rc=9), retrying..
2023-08-20 01:02:07,396 INFO:Command failed (rc=9), retrying..
2023-08-20 01:02:13,054 INFO:Command failed (rc=9), retrying..
2023-08-20 01:02:18,733 ERROR:Failure reason: , return-code: 9
2023-08-20 01:02:18,734 ERROR:FAILED
2023-08-20 01:02:18,735 ERROR:Failed command: guestshell run sudo su -c "/etc/init.d/aos show_version && echo APSTRA_CMD_SUCCESS"
2023-08-20 01:02:18,735 ERROR:Remote ssh command failed
Traceback (most recent call last):
  File "/aos/system_agent/runner/aos_device_installer/run.py", line 100, in <module>
    action.run_action()
  File "/aos/system_agent/runner/actions/base_action.py", line 302, in run_action
    self.run()
  File "/aos/system_agent/runner/actions/cisco.py", line 914, in run
    self._install()
  File "/aos/system_agent/runner/actions/base_action.py", line 374, in _install
    self.device_facts = self.get_device_facts()
  File "/aos/system_agent/runner/actions/utils/base_di.py", line 186, in wrapped
    return f(self, *args, **kwargs)
  File "/aos/system_agent/runner/actions/cisco.py", line 218, in get_device_facts
    "/etc/init.d/aos show_version")
  File "/aos/system_agent/runner/actions/cisco.py", line 86, in guestshell
    % cmd, timeout=timeout, ** kwargs)
  File "/aos/system_agent/runner/actions/cisco.py", line 53, in run_show_command
    return_val = self.run_remote_command(cmd, num_try=num_try, **kwargs)
  File "/aos/system_agent/runner/actions/cisco.py", line 45, in run_remote_command
    return ssh.run()
  File "/aos/system_agent/runner/actions/utils/remote.py", line 130, in run
    raise RemoteSshCommandException(self)
RemoteSshCommandException: Remote ssh command failed
2023-08-20 01:02:18,737 ERROR:STDOUT: Note: Guest shell is not enabled by default, use the 'guestshell enable' command to enable it
2023-08-20 01:02:18,738 ERROR:STDERR:

ご丁寧にも "guestshell enable を有効にしろ" と出てきますので、

# show guestshell

# configure terminal
(config)# guestshell enable
# end

# show guestshell
Virtual service guestshell+ detail
  State                 : Initializing
  Package information
    Name                : None
    Path                : Not Available
    Application
      Name              : None
      Installed version : None
      Description       : None
    Signing
      Key type          : Unsigned
      Method            : None
    Licensing
      Name              : None
      Version           : None
  Resource reservation
    Disk                : 0 MB
    Memory              : 0 MB
    CPU                 : 0% system CPU

で有効化しましょう。いやらしいことに、guestshell enable は show running-config all にも表示されない設定です。

show guestshell コマンドで確認します。

引用