kinder
A CLI tool to stand up a local Kind Kubernetes cluster with integrated infrastructure services for development.
Features
- Kind Cluster - Kubernetes IN Docker with CA trust and registry mirrors pre-configured
- Step CA - Certificate authority with ACME support for automatic TLS certificates
- Zot Registry - OCI-compliant registry with pull-through caching for major registries
- Traefik - Reverse proxy with automatic HTTPS via ACME
- Gatus - Health monitoring dashboard for all services
Quick Start
# Start all infrastructure services
kinder start
# Create a Kind cluster (optional)
kinder kind start
# Verify everything is working
kinder diagnostics
# Get kubeconfig for kubectl
export KUBECONFIG=$(kinder kind kubeconfig)
kubectl get nodesArchitecture
┌─────────────────────────────────────────────────────┐
│ Docker Network │
│ (kind) │
│ │
Browser ─────────┼──► Traefik (:8443) ──┬──► Step CA (ACME) │
│ │ ├──► Zot Registry │
│ │ ├──► Gatus Dashboard │
│ │ └──► Traefik Dashboard │
│ │ │
│ └── ACME certs from Step CA │
│ │
│ Kind Cluster ──────► Zot (pull-through cache) │
│ │ │ │
│ └── Trusts CA cert ├── docker.io │
│ ├── ghcr.io │
│ ├── quay.io │
│ └── registry.k8s.io │
└─────────────────────────────────────────────────────┘
Services
| Service | URL | Description |
|---|---|---|
| Step CA | https://ca.c0000201.sslip.io:8443 | Certificate authority with ACME |
| Zot Registry | https://registry.c0000201.sslip.io:8443 | Container registry with UI |
| Zot (direct) | http://localhost:5000 | Direct registry access |
| Gatus | https://gatus.c0000201.sslip.io:8443 | Health monitoring dashboard |
| Traefik | https://traefik.c0000201.sslip.io:8443 | Reverse proxy dashboard |
Commands
Core Commands
kinder start # Start all services
kinder stop # Stop all services
kinder restart # Restart with updated config
kinder status # Show service status
kinder diagnostics # Run comprehensive health checks
kinder clean # Remove all data (keeps CA cert)Kind Cluster
kinder kind start # Create Kind cluster
kinder kind stop # Delete Kind cluster
kinder kind status # Show cluster status
kinder kind kubeconfig # Print kubeconfigCertificate Authority
kinder ca generate # Generate CA certificate
kinder ca print # Display CA certificate infoConfiguration
kinder config show # Display current config as YAML
kinder config path # Show config file location
kinder config init # Create default config fileArgoCD (Optional)
kinder argocd show # Show ArgoCD install manifest
kinder argocd initial-app # Generate bootstrap ApplicationConfiguration
Configuration uses Viper with the following precedence (highest to lowest):
- CLI flags
- Environment variables (
KINDER_*) - Config file (
~/.config/kinder/config.yaml) - Built-in defaults
Example Config File
appName: kinder
domain: c0000201.sslip.io
network:
name: kind
cidr: 172.28.28.0/24
bridge: kindbr0
traefik:
port: "8443"
argocd:
version: v3.1.10
images:
stepca: smallstep/step-ca:latest
zot: ghcr.io/project-zot/zot-linux-amd64:latest
gatus: twinproduction/gatus:latest
traefik: traefik:latest
registryMirrors:
- ghcr.io
- registry-1.docker.io
- quay.io
- registry.k8s.ioEnvironment Variables
KINDER_DATADIR=/path/to/data # Data directory
KINDER_DOMAIN=example.sslip.io # Base domain
KINDER_TRAEFIK_PORT=9443 # HTTPS port
KINDER_ARGOCD_VERSION=v3.2.3 # ArgoCD versionBrowser Certificate Trust
To access services without security warnings, import the CA certificate:
- Locate:
~/.local/share/kinder/ca.crt - Import into your browser's certificate authorities:
- Firefox: Settings > Privacy & Security > Certificates > View Certificates > Authorities > Import
- Chrome/Edge: Settings > Privacy and security > Security > Manage certificates > Authorities > Import
- Safari: Open file, add to Keychain, mark as trusted for SSL
Requirements
- Docker (Docker CE or Docker Desktop)
- Go 1.21+ (for building from source)
kindCLI (for Kind cluster management)kubectl(for Kubernetes interaction)skopeo(optional, for registry diagnostics)
Building from Source
git clone https://codeberg.org/hipkoi/kinder.git
cd kinder
go build -o kinder .Data Storage
| Type | Location |
|---|---|
| Data (CA certs, configs) | $XDG_DATA_HOME/kinder/ or ~/.local/share/kinder/ |
| Config file | $XDG_CONFIG_HOME/kinder/config.yaml or ~/.config/kinder/config.yaml |
Network Configuration
The default network uses CIDR 172.28.28.0/24:
172.28.28.0/25- Container DHCP range172.28.28.128-255- Reserved for MetalLB (Kind cluster)
License
MIT