Replace ingress-nginx 4.15.1 with Traefik v3 (Helm chart 39.0.7) as the ingress controller for the local kind cluster. - Replace k8s/nginx/ with k8s/traefik/ (Helm chart, values, namespace) - Update setup script selectors and namespace references - Convert nginx upstream-vhost annotations to Traefik Middleware CRDs - Update ingressClassName from nginx to traefik - Add .claude/ to .gitignore Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Run Unbound environment in local K8S
This is a setup for running the Unbound environment in K8S using KinD
Prerequisites
Tools
- KinD
- kubectl
- Buildtools
- Lastpass CLI
- GNU Base64
- Bash 4.4+
- direnv to manage environment variables per directory
Setup
Create a Gitlab Personal Access Token with (at least) read_registry access and set it as environment variable GITLAB_TOKEN. Can be done with a .envrc-file in a parent directory:
source_up .envrc
export GITLAB_TOKEN=<xyz>
Create a .buildtools.yaml-file in the parent directory with the following content:
targets:
local:
context: kind-unbound
namespace: default
staging:
context: k8s.unbound.se
namespace: staging
prod:
context: k8s.unbound.se
namespace: default
Creating the cluster
Just run the following:
./setup
Wait for the cluster to be ready. The K8S context should be set automatically. Check what's been deployed by running:
kubectl get pod -A
Stopping/starting the cluster
If you need to stop the cluster to be able to use the exposed ports for other things, run:
docker stop unbound-control-plane
To start it again:
docker start unbound-control-plane
Removing the cluster
To remove the cluster completely, run:
kind delete cluster --name unbound
Cleaning up retained data
The setup stores data for containers in the data-directory. To start from scratch, stop the cluster, empty the directory
and start the cluster again.