--- 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! πŸ˜„πŸŽŠ