2023-07-21 20:57:08 +02:00
|
|
|
{{ if and .Values.headscale.keys.create (not .Values.headscale.keys.existingSecret ) }}
|
|
|
|
{{ $name := (print ( include "headscale.fullname" . ) "-keys") }}
|
|
|
|
{{ $secretName := (print ( include "headscale.fullname" . ) "-keys") }}
|
|
|
|
---
|
|
|
|
apiVersion: v1
|
|
|
|
kind: Secret
|
|
|
|
metadata:
|
|
|
|
annotations:
|
|
|
|
helm.sh/resource-policy: keep
|
|
|
|
name: {{ $name }}
|
|
|
|
type: Opaque
|
|
|
|
---
|
|
|
|
apiVersion: v1
|
|
|
|
kind: ServiceAccount
|
|
|
|
metadata:
|
|
|
|
name: {{ $name }}
|
|
|
|
labels:
|
|
|
|
app.kubernetes.io/component: keys-job
|
|
|
|
{{- include "headscale.labels" . | nindent 4 }}
|
2024-04-12 10:16:16 +02:00
|
|
|
annotations:
|
|
|
|
"helm.sh/hook": "pre-install,pre-upgrade"
|
|
|
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
2023-07-21 20:57:08 +02:00
|
|
|
---
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
|
|
kind: Role
|
|
|
|
metadata:
|
|
|
|
name: {{ $name }}
|
|
|
|
labels:
|
|
|
|
app.kubernetes.io/component: keys-job
|
|
|
|
{{- include "headscale.labels" . | nindent 4 }}
|
2024-04-12 10:16:16 +02:00
|
|
|
annotations:
|
|
|
|
"helm.sh/hook": "pre-install,pre-upgrade"
|
|
|
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
2023-07-21 20:57:08 +02:00
|
|
|
rules:
|
|
|
|
- apiGroups:
|
|
|
|
- ""
|
|
|
|
resources:
|
|
|
|
- secrets
|
|
|
|
resourceNames:
|
|
|
|
- {{ $secretName }}
|
|
|
|
verbs:
|
|
|
|
- get
|
|
|
|
- update
|
|
|
|
- patch
|
|
|
|
---
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
|
|
kind: RoleBinding
|
|
|
|
metadata:
|
|
|
|
name: {{ $name }}
|
|
|
|
labels:
|
|
|
|
app.kubernetes.io/component: keys-job
|
|
|
|
{{- include "headscale.labels" . | nindent 4 }}
|
2024-04-12 10:16:16 +02:00
|
|
|
annotations:
|
|
|
|
"helm.sh/hook": "pre-install,pre-upgrade"
|
|
|
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
2023-07-21 20:57:08 +02:00
|
|
|
roleRef:
|
|
|
|
apiGroup: rbac.authorization.k8s.io
|
|
|
|
kind: Role
|
|
|
|
name: {{ $name }}
|
|
|
|
subjects:
|
|
|
|
- kind: ServiceAccount
|
|
|
|
name: {{ $name }}
|
|
|
|
namespace: {{ .Release.Namespace }}
|
|
|
|
---
|
|
|
|
apiVersion: batch/v1
|
|
|
|
kind: Job
|
|
|
|
metadata:
|
|
|
|
name: {{ $name }}
|
|
|
|
labels:
|
|
|
|
{{- include "headscale.labels" . | nindent 4 }}
|
2024-04-12 10:16:16 +02:00
|
|
|
annotations:
|
|
|
|
"helm.sh/hook": "pre-install,pre-upgrade"
|
|
|
|
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
|
2023-07-21 20:57:08 +02:00
|
|
|
spec:
|
|
|
|
template:
|
|
|
|
spec:
|
|
|
|
restartPolicy: "Never"
|
|
|
|
serviceAccount: {{ $name }}
|
2024-09-21 17:11:35 +02:00
|
|
|
initContainers:
|
2023-07-21 20:57:08 +02:00
|
|
|
- name: generate-key
|
2024-04-12 10:16:16 +02:00
|
|
|
{{- with .Values.image }}
|
2024-09-21 17:11:35 +02:00
|
|
|
image: "{{ .registry }}/{{ .repository }}:{{ .tag | default $.Chart.AppVersion }}-debug"
|
2024-04-12 10:16:16 +02:00
|
|
|
{{- end }}
|
2023-07-21 20:57:08 +02:00
|
|
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
|
|
command:
|
|
|
|
- sh
|
|
|
|
- -c
|
|
|
|
- |
|
|
|
|
set -e
|
2024-09-21 17:11:35 +02:00
|
|
|
echo "generate private-keys"
|
|
|
|
headscale generate private-key --output json > /etc/headscale/secrets/wireguard.json
|
|
|
|
headscale generate private-key --output json > /etc/headscale/secrets/noise.json
|
|
|
|
headscale generate private-key --output json > /etc/headscale/secrets/derp.json
|
|
|
|
ls /etc/headscale/secrets/
|
2023-07-21 20:57:08 +02:00
|
|
|
volumeMounts:
|
|
|
|
- name: config
|
|
|
|
mountPath: "/etc/headscale"
|
|
|
|
readOnly: true
|
|
|
|
- mountPath: "/etc/headscale/secrets"
|
|
|
|
name: secrets
|
2024-09-21 17:11:35 +02:00
|
|
|
containers:
|
|
|
|
- name: upload-key
|
|
|
|
image: bitnami/kubectl
|
|
|
|
command:
|
|
|
|
- sh
|
|
|
|
- -c
|
|
|
|
- |
|
|
|
|
# check if key already exists
|
|
|
|
key=$(kubectl get secret {{ $secretName }} -o jsonpath="{.data}" 2> /dev/null)
|
|
|
|
[ $? -ne 0 ] && echo "Failed to get existing secret" && exit 1
|
|
|
|
if ! echo $key | jq -e 'has("wireguard.key")' 2> /dev/null ; then
|
|
|
|
echo "store wireguard.key"
|
|
|
|
kubectl patch secret {{ $secretName }} -p "{\"data\":{\"wireguard.key\":\"$(jq -r '.["private_key"] | split(":")[1] | @base64' /etc/headscale/secrets/wireguard.json)\"}}"
|
|
|
|
fi
|
|
|
|
if ! echo $key | jq -e 'has("noise.key")' 2> /dev/null ; then
|
|
|
|
echo "store noise.key"
|
|
|
|
kubectl patch secret {{ $secretName }} -p "{\"data\":{\"noise.key\":\"$(jq -r '.["private_key"] | @base64' /etc/headscale/secrets/noise.json)\"}}"
|
|
|
|
elif ! echo $key | jq -e '.["noise.key"] |@base64d | contains("privkey")' 2> /dev/null ; then
|
|
|
|
echo "patch noise.key"
|
|
|
|
newKey="privkey:$(echo $key | jq -r '.["noise.key"]|@base64d')"
|
|
|
|
kubectl patch secret {{ $secretName }} -p "{\"data\":{\"noise.key\":\"$(echo $newKey | base64 -w0)\"}}"
|
|
|
|
fi
|
|
|
|
if ! echo $key | jq -e 'has("derp.key")' 2> /dev/null ; then
|
|
|
|
echo "store derp.key"
|
|
|
|
kubectl patch secret {{ $secretName }} -p "{\"data\":{\"derp.key\":\"$(jq -r '.["private_key"] | @base64' /etc/headscale/secrets/derp.json)\"}}"
|
|
|
|
fi
|
|
|
|
[ $? -ne 0 ] && echo "Failed to update secret." && exit 1
|
|
|
|
echo "Signing key successfully created."
|
|
|
|
volumeMounts:
|
|
|
|
- mountPath: /etc/headscale/secrets
|
|
|
|
name: secrets
|
|
|
|
readOnly: true
|
2023-07-21 20:57:08 +02:00
|
|
|
volumes:
|
|
|
|
- name: config
|
|
|
|
secret:
|
|
|
|
secretName: {{ include "headscale.fullname" . }}
|
|
|
|
items:
|
|
|
|
- key: "config.yaml"
|
|
|
|
path: "config.yaml"
|
|
|
|
- name: secrets
|
|
|
|
emptyDir: {}
|
|
|
|
parallelism: 1
|
|
|
|
completions: 1
|
|
|
|
backoffLimit: 1
|
|
|
|
{{ end }}
|