This project uses Ansible playbooks wrapped by a Makefile to create and tear down Skupper topologies for two execution environments:
- Kubernetes
- Podman
It also provides workload deployment helpers for running Fortio as a client/server pair so you can exercise the topology and run performance tests across the Skupper network.
The repository automates the setup of these Skupper topologies:
- 1 router
- 2 routers
- 3 routers in a linear topology
For each topology, you can:
- Create the Skupper sites/routers
- Link the sites together
- Deploy a Fortio server on one end of the topology
- Deploy a Fortio client on the other end
- Use the Fortio UI or endpoints to run HTTP and gRPC performance tests
Makefile- entry point for setup, teardown, and workload deploymentrequirements.yml- required Ansible collectionsplaybooks/kube/- Kubernetes topology and workload playbooksplaybooks/podman/- Podman topology and workload playbooks
Make sure the following tools are installed:
makeansibleansible-galaxy
Install the required Ansible collections with:
make install-collectionsThis installs the collections declared in requirements.yml, including:
kubernetes.coreskupper.v2
You need:
- Access to a Kubernetes cluster
kubectlconfigured and pointing to the target cluster- A valid kubeconfig at
~/.kube/configor exported viaKUBECONFIG
The Makefile exports:
KUBECONFIG=$(HOME)/.kube/configSo by default it will use ~/.kube/config.
You need:
podmanjq
The Podman playbooks use host networking and local Skupper resources.
Optional environment variable:
export SKUPPER_CLI_IMAGE=quay.io/skupper/cli:v2-devIf not set, the Podman playbooks default to that image automatically.
Setup Topologies:
# Kubernetes
make setup-kube-1 # Single router
make setup-kube-2 # Two routers
make setup-kube-3-linear # Three routers (linear)
# Podman
make setup-podman-1 # Single router
make setup-podman-2 # Two routers
make setup-podman-3-linear # Three routers (linear)Deploy Workloads:
# Kubernetes
make deploy-kube-workloads
# Podman
make deploy-podman-workloads# 1. Install dependencies
make install-collections
# 2. Set up a 3-router linear topology
make setup-kube-3-linear
# 3. Deploy Fortio server and client
make deploy-kube-workloads
# 4. Run performance tests through the topology
# Option A: Use the Fortio UI at the printed LoadBalancer IP
# Option B: Run a quick load test from the command line
make run-kube-fortio-load
# 5. Clean up when done
make teardown-kubemake install-collectionsmake setup-kube-1
make setup-kube-2
make setup-kube-3-linearmake teardown-kubemake setup-podman-1
make setup-podman-2
make setup-podman-3-linearmake teardown-podmanmake deploy-kube-fortio-server
make deploy-kube-fortio-client
make deploy-kube-workloadsmake deploy-podman-fortio-server
make deploy-podman-fortio-client
make deploy-podman-workloadsmake undeploy-podman-fortio-client
make undeploy-podman-fortio-server
make undeploy-podman-workloadsmake run-kube-fortio-load
make run-podman-fortio-loadChoose either Kubernetes or Podman, then choose the desired topology.
make setup-kube-1Creates:
- Namespace
topology-1 - Skupper site
router-1
make setup-kube-2Creates:
- Namespaces
topology-1,topology-2 - Skupper sites
router-1,router-2 - A link from
topology-2totopology-1
make setup-kube-3-linearCreates:
- Namespaces
topology-1,topology-2,topology-3 - Skupper sites
router-1,router-2,router-3 - Links:
topology-2->topology-1topology-3->topology-2
make setup-podman-1Creates and starts:
- Namespace
topology-1 - Skupper site
router-1
make setup-podman-2Creates and starts:
- Namespaces
topology-1,topology-2 - Skupper sites
router-1,router-2 - Router access on
topology-1 - A link from
topology-2totopology-1
make setup-podman-3-linearCreates and starts:
- Namespaces
topology-1,topology-2,topology-3 - Skupper sites
router-1,router-2,router-3 - Router access on
topology-1andtopology-2 - Links:
topology-2->topology-1topology-3->topology-2
The project uses Fortio as:
- server on the last topology namespace/router
- client on the first topology namespace/router
This lets you measure traffic crossing the full topology.
make deploy-kube-fortio-serverThis deploys the Fortio server to the highest-numbered topology-* namespace.
Examples:
setup-kube-1-> deploys totopology-1setup-kube-2-> deploys totopology-2setup-kube-3-linear-> deploys totopology-3
make deploy-kube-fortio-clientThis deploys the Fortio client to the lowest-numbered topology-* namespace, typically topology-1.
After deployment, the playbook prints usage hints. For the Fortio client, the intended access points are:
- Fortio UI:
http://<fortio-client-ip>:8080/fortio - HTTP target:
http://fortio-http:8080/echo - gRPC target:
http://fortio-grpc:8079
Notes:
- The client is exposed as a Kubernetes
LoadBalancerservice. - If the external IP is not immediately available, the playbook may print a placeholder until the service gets an address.
make deploy-podman-fortio-serverThis deploys the Fortio server to the highest-numbered topology namespace.
make deploy-podman-fortio-clientThis deploys the Fortio client to the lowest-numbered topology namespace.
After deployment, the playbook prints the local URLs to use:
- Fortio UI:
http://localhost:7080/fortio - HTTP target:
http://127.0.0.1:8080/echo - gRPC target:
http://127.0.0.1:8079
Performance testing is done through the Fortio client against the Fortio server exposed through Skupper listeners/connectors.
-
Set up a topology, for example:
make setup-kube-3-linear
-
Deploy the server:
make deploy-kube-fortio-server
-
Deploy the client:
make deploy-kube-fortio-client
-
Open the Fortio client UI using the printed LoadBalancer IP:
http://<fortio-client-ip>:8080/fortio -
Run tests from the UI using one of these targets:
- HTTP:
http://fortio-http:8080/echo - gRPC:
http://fortio-grpc:8079
- HTTP:
-
Set up a topology, for example:
make setup-podman-3-linear
-
Deploy the server:
make deploy-podman-fortio-server
-
Deploy the client:
make deploy-podman-fortio-client
-
Open the Fortio client UI:
http://localhost:7080/fortio -
Run tests from the UI using one of these targets:
- HTTP:
http://127.0.0.1:8080/echo - gRPC:
http://127.0.0.1:8079
- HTTP:
make setup-kube-2
make deploy-kube-fortio-server
make deploy-kube-fortio-clientThen open the Fortio UI and test traffic through the two-router topology.
When finished:
make teardown-kubemake setup-podman-2
make deploy-podman-fortio-server
make deploy-podman-fortio-clientThen open:
http://localhost:7080/fortio
When finished:
make teardown-podmanRemove the Kubernetes-based topology:
make teardown-kubeRemove the Podman workloads and topology:
make teardown-podmanNote: the Podman undeploy tasks are called automatically by make teardown-podman, so you normally do not need to run them manually.
If needed, workloads can also be removed independently:
make undeploy-podman-workloads- All setup and deployment commands run Ansible locally using
ansible-playbook -i localhost,. - Kubernetes workload deployment automatically selects:
- the first
topology-*namespace for the client - the last
topology-*namespace for the server
- the first
- Podman workload deployment follows the same first/last topology selection logic.
- The project is intended for experimenting with Skupper topology layouts and measuring the impact on HTTP/gRPC request paths using Fortio.