A platform for isolated programming exercises using Docker containers and a secure VXLAN overlay network.
- Project Overview
- Installation Guide
- Usage Instructions
- Key Features
- Configuration
- Contributing Guidelines
- Visual Enhancements
- Additional Resources
Overlay Lab provides an environment where students complete programming exercises in isolated Docker containers connected via a secure VXLAN overlay network.
Core Goals:
- Isolation: Containerized exercises prevent interference between users
- Security: VXLAN network encrypts inter-container communication
- Flexibility: JSON-configurable exercises for client/server challenges
-
Clone the repository:
git clone https://github.com/AhmedHosny2/testbed-distributed-system.git cd projectname
-
Install dependencies (Ubuntu example):
sudo apt update && sudo apt install docker.io multipass nginx
-
Launch the agent VM:
multipass launch -n agent --cloud-init https://ovl.st.hs-ulm.de:4001/conf/user-data-mp.yaml jammy multipass shell
-
Register VM in Overlay Network:
sudo vx register -o # Register VM sudo vx start # Start overlay service ping 10.1.0.2 # Test connectivity
-
Configure NGINX:
curl -o init_nginx.sh https://ulm.ahmed-yehia.me/init_nginx && chmod +x init_nginx.sh && sudo ./init_nginx.sh curl -o update_srv_ip.sh https://ulm.ahmed-yehia.me/update_srv_ip && chmod +x update_srv_ip.sh && sudo ./update_srv_ip.sh
-
Finalize Setup:
curl -o agent_vm_ulm.ps1 https://ulm.ahmed-yehia.me/download && pwsh -ExecutionPolicy Bypass -File ./agent_vm_ulm.ps1
-
Access the portal at:
http://server.local
- Container Isolation: Dedicated Docker containers per exercise
- VXLAN Security: Encrypted overlay network layer
- NGINX Proxy: IP preservation, load balancing, and DNS resolution
- JSON Configuration: Define exercises with custom parameters
Example JSON exercise definition:
{
"ExerciseName": "grpc-app",
"ExerciseReqConnectionType": "grpc",
"ExerciseTile": "gRPC Adventure",
"ExerciseDescription": "Dive into the world of gRPC! Build a client that connects to a gRPC server and interacts with it to create, fetch, list, and delete users.",
"ExerciseDifficulty": "2",
"DockerImage": "ahmedyh1/grcp_server",
"port": "5015",
"DisplayFields": [
"Name",
"State.Status",
"Config.Hostname",
"NetworkSettings.Networks.bridge.NetworkID"
],
"ClientSide": false,
"Variables": {
"host": "",
"exposedPort": ""
}
}
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature
- Follow existing code style
- Submit a PR with detailed description
Homepage showing available exercises with difficulty levels and descriptions:
1. Exercise Overview
Students select client-side exercises from the portal. The system provides server container details (IP/port) for connection.
2. Container Details
Real-time container networking information including IP address (10.1.0.2
), exposed port (5015
), and status:
3. Code Implementation
Students write client code to interact with the server container, with immediate feedback shown:
1. Exercise Setup
Students launch server-side exercises and receive endpoint details (10.1.0.3:8080
) to implement server logic:
2. Container Monitoring
Live view of client containers sending test requests to student servers:
3. Server Implementation
Students write server code and see validation results from test containers:
This section contains links to supporting documentation and repositories that complement the Educational Programming Platform.
- Admin Setup:
- Student Workflow:
-
Gateway VM Scripts:
- Repository: gateway-vm-scripts
- Contains scripts to initialize NGINX and launch the VM gateway into the VXLAN overlay network.
-
Docker Images for Exercises:
- Repository: Docker-Images-For-Exercise
- Includes pre-built Docker images and examples of student solutions for exercises.
- Explore example solutions and Docker configurations in the Overlay-Lab Docs.