前回containerlab上でXRd同士を接続したが、今回はXRdとCatalyst 8000vとの接続を試してみる
8000vのimage fileはqcow2のVMとなっているため、前回と異なり以下二点の対応が必要
- Nested Virtulization有効化
- 8000v(VM)のコンテナ化
下記手順通り実施すれば誰でもXRdと8000vとの接続構成を構築できるはず。CSR1000vも基本やることは一緒
一部説明文を省略しているので詳細は前回を参照
環境
VMインスタンス(Google Cloud)
- Debian GNU/Linux 12 (bookworm)
- n2-standard-8
- disk
- 200GB #defaultのままだと構築途中に容量不足でエラーとなったため気持ち多めに
- spot
- 節約のため
手順
- Nested Virtualization VMインスタンス作成
- containerlabインストール
- Cisco XRd用設定
- vrnetlabによるDockerイメージ作成
- containerlab topology作成
- bgp設定
1. Nested Virtualization VMインスタンス作成
gloud initでgloud CLIが使用できるようにしておく(ローカル端末でコマンド実施)
Nested Virtualizationのためにカスタムイメージを作成
gcloud compute images create nested-debian --source-image-family=debian-12 --source-image-project=debian-cloud --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
作成したカスタムイメージを指定してVM作成
gcloud compute instances create clab --machine-type=n2-standard-8 --boot-disk-size=200GB --image=nested-debian --provisioning-model=SPOT
2. containerlabインストール
以降はVM上実施
wget -qO - https://ftp-master.debian.org/keys/archive-key-15.asc | apt-key add -
apt update
apt -y upgrade
curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"
3. Cisco XRd用設定
sysctl -w fs.inotify.max_user_instances=64000
4. vrnetlabによるDockerイメージ作成
containerlabはコンテナを管理するためVMベースのノードはコンテナ化する必要がある。
それを実現させるのがvrnetlab
page32,33参考
ただ上記資料のvrnetlab/vrnetlabだと以下のエラーでイメージ作成できないためhellt/vrnetlabにてイメージ作成(このトラシューでだいぶ時間消費した...)
git clone https://github.com/hellt/vrnetlab.git
cd vrnetlab/c8000v
vrnetlab/c8000v配下にqcow2ファイルを保存
root@clab2:~/vrnetlab/c8000v# ll
total 1820188
drwxr-xr-x 3 root root 4096 Nov 28 06:53 .
drwxr-xr-x 26 root root 4096 Nov 28 06:52 ..
-rw-r--r-- 1 root root 643 Nov 28 06:52 Makefile
-rw-r--r-- 1 root root 4696 Nov 28 06:52 README.md
-rw-r--r-- 1 root root 1863843840 Jul 13 2023 c8000v-17.11.01a.qcow2
drwxr-xr-x 2 root root 4096 Nov 28 06:52 docker
Dockerイメージ作成
make docker-image
Dockerイメージが作成されている
root@clab4:~/vrnetlab/c8000v# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/cisco_c8000v 17.11.01a b8f351a24b52 25 seconds ago 3.14GB
5. containerlab topology作成
root@clab4:~# cat lab.yaml
name: lab
topology:
nodes:
xrv:
kind: cisco_xrd
image: ios-xr/xrd-control-plane:7.10.2
c8000v:
kind: cisco_c8000v
image: vrnetlab/cisco_c8000v:17.11.01a
links:
- endpoints: ["xrv:Gi0-0-0-0", "c8000v:Gi2"]
clab deploy -t lab.yaml
docker psで確認。c8000vは起動に少し時間がかかり、最終的にhealthy状態になっていれば問題なし
root@clab4:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8e5d324176f vrnetlab/cisco_c8000v:17.11.01a "/launch.py --userna…" 4 minutes ago Up 4 minutes (healthy) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp clab-lab-c8000v
2b40ce8cc7ea ios-xr/xrd-control-plane:7.10.2 "/usr/sbin/init" 4 minutes ago Up 4 minutes clab-lab-xrv
ログイン確認
root@clab4:~# ssh admin@clab-lab-c8000v
Warning: Permanently added 'clab-lab-c8000v' (RSA) to the list of known hosts.
(admin@clab-lab-c8000v) Password:
c8000v#
c8000v#show ip int bri
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 10.0.0.15 YES manual up up
GigabitEthernet2 unassigned YES unset administratively down down
6. bgp設定
以下configを投入
・c8000v
conf t
int gi2
no shut
ip address 192.168.0.1 255.255.255.0
router bgp 65100
bgp router-id 192.168.0.1
neighbor 192.168.0.2 remote-as 65200
address-family ipv4
end
・XRd
conf
int gi0/0/0/0
no shut
ip address 192.168.0.2/24
router bgp 65200
bgp router-id 192.168.0.2
neighbor 192.168.0.1 remote-as 65100
commit
bgp確認
c8000v#show ip bgp summary
BGP router identifier 192.168.0.1, local AS number 65100
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
192.168.0.2 4 65200 3 2 1 0 0 00:00:52 0
RP/0/RP0/CPU0:xrv#show bgp ipv4 unicast summary
(省略)
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
192.168.0.1 0 65100 8 7 1 0 0 00:01:11 0!
これで今後はcontainerlab上でのIOS-XEとIOS-XRの挙動確認が可能