Skip to content

Commit ce22439

Browse files
Azure root CA list
1 parent 75ea801 commit ce22439

3 files changed

Lines changed: 87 additions & 5 deletions

File tree

charts/temporal/README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,12 @@ Now, to release a new FM temporal server image, from `fairmoney/temporal-docker-
100100

101101
# Build cross cluster CA trust using Pushsecret from ESO and Bundle from trust-manager
102102

103-
Using `Object.kubernetes.crossplane.io` and `watch` feature from provider-kubernetes, a `PushSecret` resource is created each time `temporal-ca-secret` in `cert-manager` namespace has a new `resourceVersion` (meaning the root CA was renewed or changed for some reason). When this happens, `PushSecret` adds a new key/value in `temporal/non-prod-root-ca-list` secret from AWS Secrets Manager. The key is the `resourceVersion` of the secret and the value is the new root CA (`tls.crt`).
103+
Using `Object.kubernetes.crossplane.io` and `watch` feature from provider-kubernetes, a `PushSecret` resource is created each time `temporal-ca-secret` in `cert-manager` namespace has a new `resourceVersion` (meaning the root CA was renewed or changed for some reason). When this happens,
104104

105-
Then, using `externalsecret` from ESO, the Secrets Manager secret is imported into `temporal-root-ca-list` secret in `cert-manager` namespace.
105+
- [AWS implementation] `PushSecret` adds a new key/value in `temporal/non-prod-root-ca-list` secret from AWS Secrets Manager. The key is the `resourceVersion` of the secret and the value is the new root CA (`tls.crt`).
106+
- [Azure implementation] `PushSecret` adds a new secret in Azure Key Vault. The secret name is the new `resourceVersion` (8-digit name) and the value is the new root CA in PEM format.
107+
108+
Then, using `externalsecret` from ESO, the Secrets Manager secret (or the Azure Key Vault secrets) are imported into `temporal-root-ca-list` secret in `cert-manager` namespace.
106109

107110
Lastly, a `Bundle.trust.cert-manager.io` resource takes all keys from `temporal-root-ca-list` secret and the local `tls.crt` key from `temporal-ca-secret` and bundles them into a trust bundle written to `temporal-trust-bundle` secret in all namespaces.
108111

charts/temporal/templates/certificates.yaml

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,14 @@ spec:
127127
name: {{ $.Release.Name }}-selfsigned-issuer
128128
secretName: {{ $.Release.Name }}-provider-cert
129129
{{- end }}
130+
{{- if and $.Values.secretStore }}
131+
{{- if $.Values.secretStoreSecret }}
132+
{{/* BEGIN AWS Secrets Manager specific implementation */}}
133+
{{/* A single AWS Secrets Manager secret is created */}}
134+
{{/* AWS Secrets Manager secret name is `Values.secretStoreSecret` */}}
135+
{{/* The secret will have multiple properties (a.k.a. keys) inside it */}}
136+
{{/* The keys are the certificate resourceVersion and values are the certificate in PEM format */}}
130137
---
131-
{{- if and $.Values.secretStore $.Values.secretStoreSecret }}
132138
apiVersion: kubernetes.crossplane.io/v1alpha2
133139
kind: Object
134140
metadata:
@@ -188,6 +194,77 @@ spec:
188194
name: {{ $.Values.secretStore }}
189195
target:
190196
name: {{ $.Release.Name }}-root-ca-list
197+
{{/* END AWS Secrets Manager specific implementation */}}
198+
199+
200+
{{- else }}
201+
{{/* BEGIN Azure Key Vault specific implementation */}}
202+
{{/* Multiple KV secrets are to be created */}}
203+
{{/* Each secret name is a certificate resourceVersion n 8-digit name */}}
204+
{{/* Each secret content is the certificate in PEM format */}}
205+
---
206+
apiVersion: kubernetes.crossplane.io/v1alpha2
207+
kind: Object
208+
metadata:
209+
name: {{ $.Release.Name }}-pushsecret
210+
annotations:
211+
argocd.argoproj.io/sync-wave: "-75"
212+
spec:
213+
watch: true
214+
references:
215+
- patchesFrom:
216+
apiVersion: v1
217+
kind: Secret
218+
name: {{ $.Release.Name }}-ca-secret
219+
namespace: cert-manager
220+
fieldPath: metadata.resourceVersion
221+
toFieldPath: spec.data[0].match.remoteRef.remoteKey
222+
forProvider:
223+
manifest:
224+
apiVersion: external-secrets.io/v1alpha1
225+
kind: PushSecret
226+
metadata:
227+
name: pushsecret-{{ $.Release.Name }}
228+
namespace: cert-manager
229+
spec:
230+
updatePolicy: Replace
231+
refreshInterval: 1h
232+
secretStoreRefs:
233+
- name: {{ $.Values.secretStore }}
234+
kind: ClusterSecretStore
235+
selector:
236+
secret:
237+
name: {{ $.Release.Name }}-ca-secret
238+
data:
239+
- match:
240+
secretKey: tls.crt
241+
providerConfigRef:
242+
name: provider-kubernetes
243+
---
244+
apiVersion: external-secrets.io/v1beta1
245+
kind: ExternalSecret
246+
metadata:
247+
annotations:
248+
argocd.argoproj.io/sync-wave: "-70"
249+
labels:
250+
{{- include "temporal.resourceLabels" (list . "" "") | nindent 4 }}
251+
name: {{ $.Release.Name }}-root-ca-list
252+
namespace: cert-manager
253+
spec:
254+
dataFrom:
255+
- find:
256+
name:
257+
regexp: "^[0-9]{8}$"
258+
tags:
259+
managed-by: external-secrets
260+
refreshInterval: 3m
261+
secretStoreRef:
262+
kind: ClusterSecretStore
263+
name: {{ $.Values.secretStore }}
264+
target:
265+
name: {{ $.Release.Name }}-root-ca-list
266+
{{/* END Azure Key Vault specific implementation */}}
267+
{{- end }}
191268
---
192269
apiVersion: trust.cert-manager.io/v1alpha1
193270
kind: Bundle

charts/temporal/values.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,5 +539,7 @@ hpaBehavior: {}
539539
#
540540
# -- root CA bundle settings
541541
# secretStore: secret-store
542-
# secretStoreSecret: secret-store-secret
543-
tctlSecretStoreSecret: eks/temporal-tctl-certificate
542+
# secretStoreSecret: secret-store-secret # specify only for AWS Secrets Manager Store; omit for Azure Key Vault
543+
544+
# --- tctl access settings
545+
tctlSecretStoreSecret: eks/temporal-tctl-certificate # for Azure Key Vault backend, value must be changed to remove the "eks" prefix: "tctlSecretStoreSecret: temporal-tctl-certificate"

0 commit comments

Comments
 (0)