Container orchestration for the Global Named Data Networking Testbed.
All services are run with Docker Compose and pull automatically built images from upstream repositories. A cron job in the master
container polls this Git repository and deploys changes automatically.
The various components are:
- framework: Template rendering (Jinja2) and service management (Docker Compose) framework
- host_vars: Host-specific configuration
- templates: Jinja2 templates for service configuration
- scripts: Shell scripts and cron jobs
- anchors: Testbed trust anchor certificates
The global services configuration is defined in docker-compose.yml and config.yml.
- A recent version of Docker must be installed on the target node.
- Clone this repository (conventionally to
/home/ndnops/testbed
). - Define secrets in a
.env
file in the root directory of this repo.. - Add a
MANAGED_HOST
variable to the.env
, e.g.MANAGED_HOST=UCLA
. - Define host-specific Docker Compose profiles as
COMPOSE_PROFILES
in.env
. - Run
docker-compose up -d
to start the node.
The master node starts first and renders the templates. After this, the master runs a cron job to poll the Git repository.
A cron job is required on the host for some tasks. Make sure the cron user is present in the docker
group.
*/5 * * * * /bin/bash /home/ndnops/testbed/scripts/cron-host.sh
The master container will automatically attempt to get certificates initiall if they don't exist. Certificates will not be automatically renewed. To renew certificates, run the following command:
# Renew certificates
docker compose exec master bash /testbed/dist/ndncert/renew.sh --force
docker compose exec master bash /testbed/dist/nlsr/renew.sh --force
docker compose exec master bash /testbed/dist/ndn-python-repo/renew.sh --force
# Restart containers
docker compose restart nlsr ndncert serve-certs ndn-python-repo
To get the list of currently installed certificates, run
docker compose exec -e HOME=/testbed/dist/ndncert master ndnsec list -c
docker compose exec -e HOME=/testbed/dist/nlsr master ndnsec list -c
docker compose exec -e HOME=/testbed/dist/ndn-python-repo master ndnsec list -c
# For root CA only
docker compose exec -e HOME=/testbed/root-ca-home master ndnsec list -c
For debugging and development, you can define DEBUG=1
in your .env
file. This will prevent the dist
folder from auto-rendering and disable git polling. You can then use docker compose as usual to manage the containers.
Set up unattended upgrades on the host to automatically install security updates.
sudo apt-get update && sudo apt-get install unattended-upgrades
The following configuration is recommended:
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
"${distro_id}:${distro_codename}-updates";
"${distro_id}:${distro_codename}-proposed";
"${distro_id}:${distro_codename}-backports";
"Docker:${distro_codename}";
};
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Enable automatic updates in the following file:
# /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
After this, enable the service and run the initial upgrade:
sudo systemctl enable unattended-upgrades
sudo systemctl start unattended-upgrades
sudo unattended-upgrades --debug