「2023-08-20 Juniper Apstra を触ってみた」の版間の差分

提供:hkatou_Lab
ナビゲーションに移動 検索に移動
ページの作成:「DC で使用する EVPN で、たくさんの機器を GUI から構築・設定・監視できる Juniper Apstra を触ってみました。 元々は Apstra 社の製…」
 
編集の要約なし
 
(同じ利用者による、間の3版が非表示)
1行目: 1行目:
DC で使用する EVPN で、たくさんの機器を GUI から構築・設定・監視できる Juniper Apstra を触ってみました。
DC で使用する BGP EVPN で、たくさんの機器を GUI から構築・設定・監視できる Juniper Apstra を触ってみました。


元々は Apstra 社の製品で Juniper に買収されたためにネットワーク機器メーカーに依存しません。
元々は Apstra 社の製品で Juniper に買収されたために、管理対象は QFX に限らず対応しています。


このため Juniper ブランドでありながらマルチベンダーに対応しています。
このため Juniper ブランドでありながらマルチベンダーに対応しています。
== ストーリー ==
'''Cisco Nexus ACI / Juniper QFX Junos Fusion''' -> ベンダーにロックインされるだろ、いい加減にしろ !
'''BGP EVPN''' -> 標準技術で構築できるのでロックインされない -> パラメータが多くて構築がめんどいだろ、いい加減 ry)
'''BGP EVPN + Apstra''' -> Nexus / QFX / Arista / Whitebox 対応、GUI からたくさん管理できてにっこり


== できること ==
== できること ==
メーカーの資料を読む限り、以下の内容が Apstra で実現可能なようです。(できるとは言っていない)
メーカーの資料を読む限り、以下の内容が Apstra で実現可能なようです。(できるとは言っていない)
以下は自分が理解するために、メーカーの製品概要から抜き出した内容です。


=== 対応機器 ===
=== 対応機器 ===
54行目: 63行目:


==== IBA (Intent Based Analytics) : 運用であるべき姿をもとにして、正常性を保つ ====
==== IBA (Intent Based Analytics) : 運用であるべき姿をもとにして、正常性を保つ ====
死活監視のみではなく、手順書でよくあるステータス確認を常時実行して、状態確認を行える


==== SSOT (Single Source Of Truth) : 死活監視のみではなく、手順書でよくあるステータス確認を常時実行して、状態確認を行える ====
* グラフデータベースの情報を元に、あるべき状態 (インテント) と、現在の情報を比較して正常性確認
* グラフデータベースの情報を元に、あるべき状態 (インテント) と、現在の情報を比較して正常性確認
** 物理ポートは Up か
** 物理ポートは Up か
67行目: 76行目:


==== コンフィグ レット : SNMP  NTP などをテンプレート コンフィグとして各機器へ展開 ====
==== コンフィグ レット : SNMP  NTP などをテンプレート コンフィグとして各機器へ展開 ====
== できないこと ==
未対応 : ブラウン フィールドへ Apstra を展開する
* 構築済みの環境 (ブラウン フィールド) を Apstra のコントロール下に置くことはできない <ref>[https://www.juniper.net/content/dam/www/assets/additional-resources/jp/ja/2022-1/202207-apstra-general-presentation.pdf P.64 Brown Field(未対応) 既存のネットワークを自動化]</ref>


== メーカー資料リンク ==
== メーカー資料リンク ==
77行目: 91行目:
* NOS 側のエージェント設定とか
* NOS 側のエージェント設定とか


== インストール ==
== Apstra インストール ==
EVE-NG 公式サイトの手順 <ref>[https://www.eve-ng.net/index.php/documentation/howtos/juniper-apstra-aos-server/ How to create images - Juniper Apstra AOS Server]</ref> でインストールしました。
EVE-NG 公式サイトの手順 <ref>[https://www.eve-ng.net/index.php/documentation/howtos/juniper-apstra-aos-server/ How to create images - Juniper Apstra AOS Server]</ref> でインストールしました。
起動して CLI と GUI のパスワードを設定しておきます。


== スクリーンショット ==
== スクリーンショット ==
てきとうに NX-OS / Junos / EOS で 3 layer 組んでみたの図。
てきとうに NX-OS / Junos / EOS で 3 layer 組んでみたの図。
Apstra とは管理ポートで各機器と通信できるようにします。
以下の図からは分かりづらいですが、MGMT の雲アイコンはすべて相互に繋がっています。
[[ファイル:Apstra at EVE-NG.png|代替文=Apstra_at_EVE-NG|なし|サムネイル|800x800ピクセル|Apstra_at_EVE-NG]]
[[ファイル:Apstra at EVE-NG.png|代替文=Apstra_at_EVE-NG|なし|サムネイル|800x800ピクセル|Apstra_at_EVE-NG]]
GUI にログインして、
GUI にログインして、
[[ファイル:Apstra GUI login.png|なし|サムネイル|800x800ピクセル|Apstra_GUI_login]]
[[ファイル:Apstra GUI login.png|なし|サムネイル|800x800ピクセル|Apstra_GUI_login]]
NOS は固定 IP で設定、Apstra GUI から IP 指定して Offbox として機器を検出。
NOS は固定 IP で設定、Apstra GUI から IP 指定して Offbox として機器を検出。
[[ファイル:Apstra GUI node list.png|代替文=Apstra_GUI_node_list|なし|サムネイル|810x810ピクセル|Apstra_GUI_node_list]]
[[ファイル:Apstra GUI node list.png|代替文=Apstra_GUI_node_list|なし|サムネイル|810x810ピクセル|Apstra_GUI_node_list]]Onbox と Offbox の違いはよくわかっていません。
 
== Apstra エージェント インストール用 NOS 初期コンフィグ ==
今回は ZTP はやらないことにしたので、NOS に固定 IP を設定、Apstra で IP 指定して検出させました。
 
検出させるためには、最小限連携用のコンフィグを適用しておく必要があります。
 
Apstra の IP と Reachability が取れるように、以下は <> のパラメータを環境に応じて書き換える必要あり。
 
=== Junos ===
Junos は応答プロンプトがあるため、パスワード入力時に停止します。流し込みはできません。
 
(load set terminal でできるかもですが、未確認)<syntaxhighlight lang="diff">
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
 
</syntaxhighlight>
 
=== NX-OS ===
<syntaxhighlight lang="diff">
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
 
</syntaxhighlight>


=== EOS ===
=== EOS ===
92行目: 185行目:
#zerotouch disable
#zerotouch disable
!!! 自動で再起動がかかる
!!! 自動で再起動がかかる
</syntaxhighlight><syntaxhighlight lang="diff">
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 有効化のため、再起動


</syntaxhighlight>
</syntaxhighlight>
97行目: 236行目:
== ナレッジ ==
== ナレッジ ==


=== Arista EOS で Apstra Agent が Offbox 登録できない ===
=== Cisco NX-OS で Apstra Agent が Offbox 登録できない ===
[https://www.juniper.net/documentation/jp/ja/software/apstra4.1/apstra-user-guide/topics/task/agent-off-box-create.html オフボックスエージェントの作成] に、Apstra から NOS を認識させるための、各 NOS の初期設定が記載されていますが、EOS はコマンドが足りません。
[https://www.juniper.net/documentation/jp/ja/software/apstra4.1/apstra-user-guide/topics/task/agent-off-box-create.html オフボックスエージェントの作成] に、Apstra から NOS を認識させるための、各 NOS の初期設定が記載されていますが、NX-OS はコマンドが足りません。
 
==== GUI で show log ボタンをクリック ====
エラー内容を見てみると・・・<syntaxhighlight lang="diff">
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:
 
</syntaxhighlight>ご丁寧にも "guestshell enable を有効にしろ" と出てきますので、<syntaxhighlight lang="diff">
# 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
 
</syntaxhighlight>で有効化しましょう。いやらしいことに、guestshell enable は show running-config all にも表示されない設定です。
 
show guestshell コマンドで確認します。
 
== 引用 ==
<references />
[[カテゴリ:Juniper]]

2023年8月23日 (水) 07:56時点における最新版

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
Apstra_at_EVE-NG

GUI にログインして、

Apstra_GUI_login

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

Apstra_GUI_node_list
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 コマンドで確認します。

引用