mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Deploying headscale on Kubernetes
 | 
						|
 | 
						|
**Note:** This is contributed by the community and not verified by the headscale authors.
 | 
						|
 | 
						|
This directory contains [Kustomize](https://kustomize.io) templates that deploy
 | 
						|
headscale in various configurations.
 | 
						|
 | 
						|
These templates currently support Rancher k3s. Other clusters may require
 | 
						|
adaptation, especially around volume claims and ingress.
 | 
						|
 | 
						|
Commands below assume this directory is your current working directory.
 | 
						|
 | 
						|
# Generate secrets and site configuration
 | 
						|
 | 
						|
Run `./init.bash` to generate keys, passwords, and site configuration files.
 | 
						|
 | 
						|
Edit `base/site/public.env`, changing `public-hostname` to the public DNS name
 | 
						|
that will be used for your headscale deployment.
 | 
						|
 | 
						|
Set `public-proto` to "https" if you're planning to use TLS & Let's Encrypt.
 | 
						|
 | 
						|
Configure DERP servers by editing `base/site/derp.yaml` if needed.
 | 
						|
 | 
						|
# Add the image to the registry
 | 
						|
 | 
						|
You'll somehow need to get `headscale:latest` into your cluster image registry.
 | 
						|
 | 
						|
An easy way to do this with k3s:
 | 
						|
 | 
						|
- Reconfigure k3s to use docker instead of containerd (`k3s server --docker`)
 | 
						|
- `docker build -t headscale:latest ..` from here
 | 
						|
 | 
						|
# Create the namespace
 | 
						|
 | 
						|
If it doesn't already exist, `kubectl create ns headscale`.
 | 
						|
 | 
						|
# Deploy headscale
 | 
						|
 | 
						|
## sqlite
 | 
						|
 | 
						|
`kubectl -n headscale apply -k ./sqlite`
 | 
						|
 | 
						|
## postgres
 | 
						|
 | 
						|
`kubectl -n headscale apply -k ./postgres`
 | 
						|
 | 
						|
# TLS & Let's Encrypt
 | 
						|
 | 
						|
Test a staging certificate with your configured DNS name and Let's Encrypt.
 | 
						|
 | 
						|
`kubectl -n headscale apply -k ./staging-tls`
 | 
						|
 | 
						|
Replace with a production certificate.
 | 
						|
 | 
						|
`kubectl -n headscale apply -k ./production-tls`
 | 
						|
 | 
						|
## Static / custom TLS certificates
 | 
						|
 | 
						|
Only Let's Encrypt is supported. If you need other TLS settings, modify or patch the ingress.
 | 
						|
 | 
						|
# Administration
 | 
						|
 | 
						|
Use the wrapper script to remotely operate headscale to perform administrative
 | 
						|
tasks like creating namespaces, authkeys, etc.
 | 
						|
 | 
						|
```
 | 
						|
[c@nix-slate:~/Projects/headscale/k8s]$ ./headscale.bash
 | 
						|
 | 
						|
headscale is an open source implementation of the Tailscale control server
 | 
						|
 | 
						|
https://github.com/juanfont/headscale
 | 
						|
 | 
						|
Usage:
 | 
						|
  headscale [command]
 | 
						|
 | 
						|
Available Commands:
 | 
						|
  help        Help about any command
 | 
						|
  namespace   Manage the namespaces of headscale
 | 
						|
  node        Manage the nodes of headscale
 | 
						|
  preauthkey  Handle the preauthkeys in headscale
 | 
						|
  routes      Manage the routes of headscale
 | 
						|
  serve       Launches the headscale server
 | 
						|
  version     Print the version.
 | 
						|
 | 
						|
Flags:
 | 
						|
  -h, --help            help for headscale
 | 
						|
  -o, --output string   Output format. Empty for human-readable, 'json' or 'json-line'
 | 
						|
 | 
						|
Use "headscale [command] --help" for more information about a command.
 | 
						|
 | 
						|
```
 | 
						|
 | 
						|
# TODO / Ideas
 | 
						|
 | 
						|
- Interpolate `email:` option to the ClusterIssuer from site configuration.
 | 
						|
  This probably needs to be done with a transformer, kustomize vars don't seem to work.
 | 
						|
- Add kustomize examples for cloud-native ingress, load balancer
 | 
						|
- CockroachDB for the backend
 | 
						|
- DERP server deployment
 | 
						|
- Tor hidden service
 |