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