mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Tested with Rancher k3s. See k8s/README.md for site configuration and deployment instructions. Add cert-manager, tls, remote headscale script.
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
apiVersion: apps/v1
 | 
						|
kind: StatefulSet
 | 
						|
metadata:
 | 
						|
  name: headscale
 | 
						|
spec:
 | 
						|
  serviceName: headscale
 | 
						|
  replicas: 1
 | 
						|
  selector:
 | 
						|
    matchLabels:
 | 
						|
      app: headscale
 | 
						|
  template:
 | 
						|
    metadata:
 | 
						|
      labels:
 | 
						|
        app: headscale
 | 
						|
    spec:
 | 
						|
      containers:
 | 
						|
      - name: headscale
 | 
						|
        image: "headscale:latest"
 | 
						|
        imagePullPolicy: IfNotPresent
 | 
						|
        command: ["/go/bin/headscale", "serve"]
 | 
						|
        env:
 | 
						|
        - name: SERVER_URL
 | 
						|
          value: $(PUBLIC_PROTO)://$(PUBLIC_HOSTNAME)
 | 
						|
        - name: LISTEN_ADDR
 | 
						|
          valueFrom:
 | 
						|
            configMapKeyRef:
 | 
						|
              name: headscale-config
 | 
						|
              key: listen_addr
 | 
						|
        - name: PRIVATE_KEY_PATH
 | 
						|
          value: /vol/secret/private-key
 | 
						|
        - name: DERP_MAP_PATH
 | 
						|
          value: /vol/config/derp.yaml
 | 
						|
        - name: EPHEMERAL_NODE_INACTIVITY_TIMEOUT
 | 
						|
          valueFrom:
 | 
						|
            configMapKeyRef:
 | 
						|
              name: headscale-config
 | 
						|
              key: ephemeral_node_inactivity_timeout
 | 
						|
        - name: DB_TYPE
 | 
						|
          value: sqlite3
 | 
						|
        - name: DB_PATH
 | 
						|
          value: /vol/data/db.sqlite
 | 
						|
        ports:
 | 
						|
        - name: http
 | 
						|
          protocol: TCP
 | 
						|
          containerPort: 8080
 | 
						|
        livenessProbe:
 | 
						|
          tcpSocket:
 | 
						|
            port: http
 | 
						|
          initialDelaySeconds: 30
 | 
						|
          timeoutSeconds: 5
 | 
						|
          periodSeconds: 15
 | 
						|
        volumeMounts:
 | 
						|
        - name: config
 | 
						|
          mountPath: /vol/config
 | 
						|
        - name: data
 | 
						|
          mountPath: /vol/data
 | 
						|
        - name: secret
 | 
						|
          mountPath: /vol/secret
 | 
						|
        - name: etc
 | 
						|
          mountPath: /etc/headscale
 | 
						|
      volumes:
 | 
						|
      - name: config
 | 
						|
        configMap:
 | 
						|
          name: headscale-site
 | 
						|
      - name: etc
 | 
						|
        configMap:
 | 
						|
          name: headscale-etc
 | 
						|
      - name: secret
 | 
						|
        secret:
 | 
						|
          secretName: headscale
 | 
						|
  volumeClaimTemplates:
 | 
						|
  - metadata:
 | 
						|
      name: data
 | 
						|
    spec:
 | 
						|
      storageClassName: local-path
 | 
						|
      accessModes: ["ReadWriteOnce"]
 | 
						|
      resources:
 | 
						|
        requests:
 | 
						|
          storage: 1Gi
 |