Wildcard DNS — *.minikube.local via dnsmasq
Trusted TLS — mkcert CA + cert-manager, no browser warnings
Databases — PostgreSQL (CloudNativePG), Redis
Observability — VictoriaMetrics, Grafana, Fluent Bit, OpenSearch
GitOps — ArgoCD with Dex SSO
Declarative Helm — YAML-based chart deployment
Platform
Status
Notes
macOS (Apple Silicon)
Supported
Primary development platform
macOS (Intel)
Supported
Tested
Linux
Not tested
Should work with dnsmasq adjustments
Windows
Not supported
WSL2 untested
brew install minikube helm kubectl mkcert yq
mkcert -install # Install CA into system trust store
open -a Docker # Ensure Docker Desktop is running
Resource
Minimum
Recommended
CPU
4 cores
6 cores
Memory
8 GB
12 GB
Disk
20 GB
40 GB
git clone https://github.com/yourusername/kubelab.git
cd kubelab
make all # Create cluster, configure DNS, install certs
make tunnel # Run in separate terminal
make charts # Deploy all services
make status # Verify everything is running
Access services at https://<service>.<namespace>.minikube.local
Service
Host
Port
Credentials
PostgreSQL (RW)
postgresql.minikube.local
5432
developer / LocalDev123!
PostgreSQL (RO)
postgresql.minikube.local
5433
developer / LocalDev123!
Redis
redis.minikube.local
6379
LocalDev123!
# PostgreSQL
postgresql://developer:LocalDev123! @postgresql.minikube.local:5432/devdb
# Redis
redis://:LocalDev123! @redis.minikube.local:6379
Email
Password
Role
admin@minikube.local
admin123
Administrator
developer@minikube.local
dev123
Developer (read-only)
Command
Description
make all
Full setup: cluster, DNS, certificates
make cluster
Create Minikube cluster only
make dns
Configure wildcard DNS
make certs
Install cert-manager with mkcert CA
make clean
Delete everything
Command
Description
make tunnel
Start tunnel (run in separate terminal)
make start
Start stopped cluster
make stop
Stop cluster
make status
Show cluster status
make dashboard
Open Kubernetes Dashboard
Command
Description
make charts
Deploy all enabled charts
make chart-<name>
Deploy specific chart
make charts-list
List available charts
cp config/.env.example config/.env
Variable
Default
Description
CLUSTER_NAME
minikube
Minikube profile name
CPUS
4
CPU cores
MEMORY
8192
Memory in MB
DOMAIN
minikube.local
Base domain
GitLab Integration (Optional)
For ArgoCD GitOps, add to config/.env:
GITLAB_HOST=gitlab.example.com
GITLAB_ORG=your-org
GITLAB_REPO=gitops-apps
GITLAB_TOKEN=glpat-xxxxxxxxxxxx
Create a YAML file in charts/:
enabled : true
chart :
repository : https://charts.bitnami.com/bitnami
name : nginx
version : " "
release :
name : my-nginx
namespace : web
ingress :
enabled : true
name : nginx # → nginx.web.minikube.local
serviceName : my-nginx
servicePort : 80
values :
replicaCount : 1
Deploy with make chart-my-nginx.
For manifest-only deployments (no Helm chart), omit chart.repository and chart.name, use postInstall for raw YAML.
make tunnel # Must be running
kubectl get pods -n ingress-nginx # Check ingress controller
sudo brew services list | grep dnsmasq
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder
dig +short test.minikube.local @127.0.0.1
mkcert -install
kubectl get clusterissuer mkcert-issuer
kubectl get certificates -A
Firefox certificate warning
Set security.enterprise_roots.enabled = true in about:config.
Browser → dnsmasq (*.minikube.local → 127.0.0.1)
→ minikube tunnel → NGINX Ingress → Service → Pod
mkcert CA (system trust) → cert-manager ClusterIssuer → Certificate → TLS Secret
Container → Fluent Bit → OpenSearch → Dashboards
Exporters → VMAgent → VMSingle → Grafana
MIT License - see LICENSE for details.