NETwork Containerized LAB is a tool for running testbeds with mix of VM and container images, e.g. Cisco csr1000v and Juniper cRPD or Nokia SR Linux.
Network topologies are defined via K8s manifest files.
KubeVirt is used for VM support and Multus to have more network interfaces.
Linux host or VM with docker installed.
Install kubectl and kind tool, e.g.
curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"chmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectl
kind:
unset versionversion=$(basename $(curl -s -w %{redirect_url} https://github.com/kubernetes-sigs/kind/releases/latest))curl -Lo ./kind https://kind.sigs.k8s.io/dl/${version}/kind-linux-amd64chmod +x ./kindsudo mv ./kind /usr/local/bin/kind
Expose VM images via http access, e.g.:
docker run --name www -dt --mount type=bind,source=$HOME/images,target=/usr/share/nginx/html -p 8080:80 nginx:latest
Run netclab installation script:
bash <(curl -Ls "https://raw.githubusercontent.com/mbakalarski/netclab/main/netclab-kind.sh")
or
bash <(curl -Ls "https://raw.githubusercontent.com/mbakalarski/netclab/main/netclab-kind.sh") kubevirt
withkubevirt
arg for netclab with VM images.
To create topology:
cd <Lab folder>kubectl apply -f ./manifests/
Then connect to console.
For VMs install virtctl:
unset versionversion=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${version}/virtctl-${version}-linux-amd64chmod +x virtctlsudo mv ./virtctl /usr/local/bin/virtctl
and connect:
virtctl console <router name>
For containerized router:
kubectl exec -ti <router name> -- bash