Add signing server via authsign (k8s only) (#107)
- add k8s deployment of signing server, if 'signer.enabled' chart value if set - update ingress to provide access for 'signer.host' if signing server enabled to verify domain, run signing server itself on different port (also turn off ssl redirects to support signing server) - set WACZ_SIGN_URL and WACZ_SIGN_TOKEN (supported in browesertrix-crawler 0.5.0) - authsign deployment uses a volume to store current certs - add sample signer block, with signing disabled by default
This commit is contained in:
parent
5fccd07329
commit
2e2b8b329d
@ -8,6 +8,7 @@ metadata:
|
|||||||
namespace: {{ .Release.Namespace }}
|
namespace: {{ .Release.Namespace }}
|
||||||
annotations:
|
annotations:
|
||||||
kubernetes.io/ingress.class: "nginx"
|
kubernetes.io/ingress.class: "nginx"
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
nginx.ingress.kubernetes.io/rewrite-target: /$1
|
nginx.ingress.kubernetes.io/rewrite-target: /$1
|
||||||
nginx.ingress.kubernetes.io/enable-cors: "true"
|
nginx.ingress.kubernetes.io/enable-cors: "true"
|
||||||
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
|
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
|
||||||
@ -56,6 +57,20 @@ spec:
|
|||||||
port:
|
port:
|
||||||
number: 80
|
number: 80
|
||||||
|
|
||||||
|
{{ if .Values.signer.host }}
|
||||||
|
- host: {{ .Values.signer.host }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /(.*)
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: auth-signer
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ if .Values.ingress.tls }}
|
{{ if .Values.ingress.tls }}
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -53,4 +53,9 @@ stringData:
|
|||||||
STORE_ACCESS_ENDPOINT_URL: "{{ $storage.endpoint_url }}"
|
STORE_ACCESS_ENDPOINT_URL: "{{ $storage.endpoint_url }}"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if $.Values.signer.auth_token }}
|
||||||
|
WACZ_SIGN_TOKEN: "{{ $.Values.signer.auth_token }}"
|
||||||
|
WACZ_SIGN_URL: "http://auth-signer.default:5053/sign"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|||||||
161
chart/templates/signer.yaml
Normal file
161
chart/templates/signer.yaml
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
{{- if .Values.signer.enabled }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: auth-signer-config
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
config.yaml: |
|
||||||
|
signing:
|
||||||
|
domain: {{ .Values.signer.host }} # domain to retrieve a cert for (passed to ACME servers, required)
|
||||||
|
email: {{ .Values.signer.cert_email }} # email for acme auth (passed to ACME servers, required)
|
||||||
|
port: 80 # local port for acme domain check (should be 80, change if running behind a proxy)
|
||||||
|
|
||||||
|
output: /data # dir to store the keys and certs (for internal use)
|
||||||
|
|
||||||
|
staging: False # generate staging certs
|
||||||
|
|
||||||
|
# optional: set a 'cross-singing' CA and private key
|
||||||
|
# this will be used along with ACME (Lets Encrypt) to sign the same CSR
|
||||||
|
# csca_cert: <ca-cert.pem>
|
||||||
|
# csca_private_key: <ca-private-key.pem>
|
||||||
|
|
||||||
|
# rfc3161 timestamp authority cert chain + timestamp urls
|
||||||
|
# at least one required, if multiple, one is selected at random
|
||||||
|
timestamping:
|
||||||
|
# time server cert chain (cert + ca cert)
|
||||||
|
# pkg:// url to load from python package data
|
||||||
|
- certfile: pkg://authsign.trusted/ts-chain.pem
|
||||||
|
url: http://freetsa.org/tsr # timeserver URL
|
||||||
|
|
||||||
|
|
||||||
|
# default trusted roots stored in authsign.trusted package
|
||||||
|
# uncomment to override
|
||||||
|
# trusted_roots: pkg://authsign.trusted/roots.yaml
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: signer-storage-pvc
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
{{- if .Values.volume_storage_class }}
|
||||||
|
storageClassName: {{ .Values.volume_storage_class }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
|
||||||
|
{{- if not .Values.volume_storage_class }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: "signer-store-pv"
|
||||||
|
spec:
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
|
||||||
|
accessModes:
|
||||||
|
- "ReadWriteOnce"
|
||||||
|
|
||||||
|
hostPath:
|
||||||
|
path: /tmp/btrix-signer-data
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: auth-signer
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: auth-signer
|
||||||
|
replicas: {{ .Values.api_num_replicas }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: auth-signer
|
||||||
|
|
||||||
|
annotations:
|
||||||
|
# force update if signer_update is set
|
||||||
|
{{- if .Values.signer_update }}
|
||||||
|
"helm.update": {{ randAlphaNum 5 | quote }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
- name: signer-config
|
||||||
|
secret:
|
||||||
|
secretName: auth-signer-config
|
||||||
|
items:
|
||||||
|
- key: config.yaml
|
||||||
|
path: config.yaml
|
||||||
|
|
||||||
|
- name: signer-storage
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: signer-storage-pvc
|
||||||
|
|
||||||
|
containers:
|
||||||
|
- name: signer
|
||||||
|
image: {{ .Values.signer.image }}
|
||||||
|
imagePullPolicy: {{ .Values.signer.image_pull_policy }}
|
||||||
|
command: ["uvicorn", "authsign.main:app", "--port", "5053", "--host", "0.0.0.0", "--log-config", "/app/log.json"]
|
||||||
|
env:
|
||||||
|
- name: CONFIG
|
||||||
|
value: "/app-config/config.yaml"
|
||||||
|
|
||||||
|
- name: AUTH_TOKEN
|
||||||
|
value: "{{ .Values.signer.auth_token }}"
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
- name: signer-config
|
||||||
|
mountPath: /app-config
|
||||||
|
readOnly: true
|
||||||
|
|
||||||
|
- name: signer-storage
|
||||||
|
mountPath: /data
|
||||||
|
subPath: signer
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: auth-signer
|
||||||
|
labels:
|
||||||
|
app: auth-signer
|
||||||
|
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: auth-signer
|
||||||
|
|
||||||
|
{{- if .Values.service }}
|
||||||
|
{{- if .Values.service.type }}
|
||||||
|
type: {{ .Values.service.type | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
name: signer-cert
|
||||||
|
|
||||||
|
- protocol: TCP
|
||||||
|
port: 5053
|
||||||
|
name: signer-api
|
||||||
|
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
@ -137,6 +137,16 @@ ingress:
|
|||||||
tls: false
|
tls: false
|
||||||
|
|
||||||
|
|
||||||
|
# Signing Options
|
||||||
|
# =========================================
|
||||||
|
# optionally enable signer
|
||||||
|
signer:
|
||||||
|
enabled: false
|
||||||
|
# host: <set to signer domain>
|
||||||
|
# cert_email: "test@example.com
|
||||||
|
# image: webrecorder/authsign:0.3.1
|
||||||
|
# image_pull_policy: "IfNotPresent"
|
||||||
|
# auth_token: <set to custom value>
|
||||||
|
|
||||||
|
|
||||||
# Optional: configure load balancing
|
# Optional: configure load balancing
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user