Files
Notebook/content/netlab/first_lab/_index.en.md
Damien f49c0f45dd Add bilingual French/English support with Hugo multilingual config
Configure Hugo multilingual mode (fr default, en secondary) with
Hextra's language-switch menu entry, and translate all existing
content pages to English using Hugo's per-file language suffix
convention (.en.md alongside .fr.md).
2026-07-18 09:48:18 +02:00

220 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "My First Lab"
date: 2025-02-14T12:00:00+02:00
weight: 2
sidebar:
open: true
cascade:
type: docs
---
## Introduction 📚
In this article, we're going to explore how to set up our very first Containerlab netlab using **DevPod**.
We'll focus on using a cloud provider, in this case **AWS**, to host our project.
Why the **Cloud**? Because network labs can consume a huge amount of resources, and we need to be able to deploy, stop, and destroy them quickly, both for performance and cost efficiency. 💡💰
We'll achieve this by combining:
- **DevPod**
- **DevContainer**
- **Containerlab**
In addition, we'll use a simple topology that you can find on my [GitHub repository](https://github.com/darnodo/VXLAN-EVPN). Our main goal is to deploy this lab on AWS with DevPod.
Let's get to it! 🚀😊
## Prerequisites 🔧
Before starting, a few important steps need to be taken:
1. **AWS Environment Authorization**:
Make sure DevPod is authorized to access your AWS environment. For a detailed guide on configuring DevPod with AWS, check out my article on this [topic](../../documentation/devpod/). 🔑
2. **Containerlab Topology**:
We need a topology file that Containerlab can understand. In our case, we'll create a simple VXLAN topology. 🗺️
## Containerlab Topology 🔄
Our lab will simulate a VXLAN topology consisting of:
- **1 Spine switch**
- **2 Leaf switches**
- **2 Host nodes**
The following diagram illustrates the VXLAN topology:
![VXLAN Topology](VXLAN.fr.svg#center)
Here's the Containerlab topology file (`lab_vxlan.yml`) used for this configuration:
```yaml
name: vxlan-evpn-irb
topology:
nodes:
spine1:
kind: ceos
image: ceos:4.32.0.1F
mgmt-ipv4: 172.20.20.101
leaf1:
kind: ceos
image: ceos:4.32.0.1F
mgmt-ipv4: 172.20.20.11
leaf2:
kind: ceos
image: ceos:4.32.0.1F
mgmt-ipv4: 172.20.20.12
host1:
kind: linux
image: alpine:latest
binds:
- hosts/h1_interfaces:/etc/network/interfaces
mgmt-ipv4: 172.20.20.21
host2:
kind: linux
image: alpine:latest
binds:
- hosts/h2_interfaces:/etc/network/interfaces
mgmt-ipv4: 172.20.20.22
links:
- endpoints: ["spine1:eth1", "leaf1:eth1"]
- endpoints: ["spine1:eth2", "leaf2:eth1"]
- endpoints: ["leaf1:eth2", "host1:eth1"]
- endpoints: ["leaf2:eth2", "host2:eth1"]
```
### Breaking Down the Topology 🧐
1. **Name and Structure**:
- `name: vxlan-evpn-irb` This is the name of the lab.
- The topology is split into **nodes** (devices) and **links** (connections between devices).
2. **Nodes**:
- **Spine Layer**:
- `spine1`: A containerized Arista cEOS switch using image version `4.32.0.1F`.
- **Management IP**: `172.20.20.101`
- **Leaf Layer**:
- `leaf1` and `leaf2`: Arista cEOS switches using the same image version.
- **Management IPs**: `172.20.20.11` and `172.20.20.12`
- **Host Layer**:
- `host1` and `host2`: Linux containers running Alpine Linux.
- They include custom network interface configurations mounted from the host.
- **Management IPs**: `172.20.20.21` and `172.20.20.22`
3. **Links**:
- **Spine to Leaf**:
- `spine1:eth1``leaf1:eth1`
- `spine1:eth2``leaf2:eth1`
- **Leaf to Host**:
- `leaf1:eth2``host1:eth1`
- `leaf2:eth2``host2:eth1`
This topology represents a typical spine-leaf architecture, common in datacenters to enable Layer 2 and Layer 3 connectivity with VXLAN EVPN configurations. 🔗💻
## Deploying the Lab 🛠️
We'll deploy the lab with **DevPod** in two ways:
### 1. Using the Repository 📥
1. **Validate the AWS Provider Configuration**:
Make sure your AWS provider is properly configured. More details [here](../../documentation/devpod/). ✅
2. **Create a Workspace**:
- Go to the **Workspace** tab and click **Create Workspace**.
- Specify the **Workspace source**: use the [GitHub repository](https://github.com/darnodo/VXLAN-EVPN).
- Select **AWS** as the provider.
- Choose your default IDE.
- Finally, click **Create Workspace**.
![DevPod Configuration](devpod_configuration.fr.png#center)
### 2. Using a Local Folder 🗂️
If you prefer to use your local repository:
- The only difference is in the **Workspace source**.
- Simply point it to your local repository.
![DevPod Configuration - Local](devpod_configuration_local.fr.png#center)
## Starting the Lab 🎬
> [!WARNING] cEOS Images
> The lab uses **cEOS image v4.32.0.1F**.
> To download this image, head over to the [Arista download page](https://www.arista.com/en/support/software-download). ⚠️
1. **Import the cEOS Image**:
Save the cEOS image into your `network_images` folder by dragging and dropping it into VSCode.
Import the image using the following command:
```bash
docker import network_images/cEOS64-lab-4.32.0.1F.tar.xz ceos:4.32.0.1F
```
2. **Deploy the Lab**:
Deploy the lab using Containerlab:
```bash
sudo containerlab deploy -t lab_vxlan.yml
```
Follow the CLI instructions to configure your devices. For detailed configuration steps, check out [this guide](https://github.com/darnodo/VXLAN-EVPN/tree/main/documentation/eos_configuration). 🔧🖥️
3. **Visualize the Architecture**:
Check the deployed topology using Containerlab's graphical view:
```bash
containerlab graph -t lab_vxlan.yml
```
Ports (for example, port 50080 mentioned in `devcontainer.json`) are forwarded. Access the graphical view via [localhost](http://localhost:50080).
![Graph View](Graph_view.fr.png#center)
## Using EdgeShark 🦈
EdgeShark is a web tool that lets you capture packets from your lab environment. It forwards lab captures to Wireshark running locally. 📡🔍
For more information, check out the [EdgeShark getting started guide](https://edgeshark.siemens.io/#/getting-started?id=optional-capture-plugin).
### Configuring EdgeShark in the DevContainer 🐳
In the **DevContainer** configuration, the following `postCreateCommand` was added:
```bash
sudo mkdir -p /opt/edgeshark && sudo curl -sL https://github.com/siemens/edgeshark/raw/main/deployments/wget/docker-compose.yaml -o /opt/edgeshark/docker-compose.yaml
```
This command downloads a Docker Compose file to make it easier to use EdgeShark. 🚀
### Launching EdgeShark ⚡
To start EdgeShark, run:
```bash
cd /opt/edgeshark
DOCKER_DEFAULT_PLATFORM= docker compose up -d
```
Access EdgeShark via [localhost:5001](http://localhost:5001).
- **EdgeShark View**:
![EdgeShark View](edgeshark.fr.png#center)
- **Integration with Wireshark**:
By clicking the Wireshark icon in EdgeShark, you can launch Wireshark locally.
![EdgeShark Interface](edgeshark_interface.fr.png#center)
![EdgeShark and Wireshark](edge_wireshark.fr.png#center)
## Conclusion 🎉
In this article, we walked through the steps to deploy a VXLAN EVPN lab using Containerlab, DevPod, and AWS. We covered the following key points:
- **Setting up the prerequisites** for AWS and Containerlab. 🔑
- **Creating a detailed topology file** for a spine-leaf architecture. 🗺️
- **Deploying the lab** using both a GitHub repository and a local folder. 📥🗂️
- **Starting the lab** with Docker and Containerlab. 🚀🐳
- **Using EdgeShark** to capture packets and integrate Wireshark for in-depth analysis. 🦈🔍
By following these steps, you'll be able to easily deploy and manage a scalable network lab environment in the cloud. Happy networking, and enjoy your lab adventures! 😄🎊