11# ZTVP Certificates
22
3- The ` ztvp-certificates ` chart manages CA certificate extraction, validation,
3+ The [ ` ztvp-certificates ` ] ( ../charts/ztvp-certificates/ ) chart manages CA certificate extraction, validation,
44bundling, and distribution across the Zero Trust Validated Pattern. It runs as
5- an ArgoCD-managed application in the ` openshift-config ` namespace at sync-wave
6- ** 21** , ensuring certificates are available before any workload that needs TLS
7- verification.
5+ an application managed by Argo CD in the ` openshift-config ` namespace, ensuring
6+ certificates are available before any workload that needs TLS verification.
87
98## Architecture
109
@@ -35,7 +34,7 @@ verification.
3534| ---| ---|
3635| ** ServiceAccount / RBAC** | Grants the extraction Job read access to secrets, configmaps, ingresscontrollers, and proxy across namespaces |
3736| ** ConfigMap (script)** | Holds the templated ` extract-certificates.sh ` script |
38- | ** Job (initial)** | Runs once at first sync (sync-wave 23, ` Prune=false ` ) to populate the CA bundle |
37+ | ** Job (initial)** | Runs once at first sync to populate the CA bundle |
3938| ** CronJob** | Runs on schedule (default daily at 02:00) for automatic rotation |
4039| ** ACM Policy + Placement** | Distributes the ` ztvp-trusted-ca ` ConfigMap into target namespaces via ACM governance |
4140| ** ManagedClusterSetBinding** | Binds the ` default ` ManagedClusterSet in ` openshift-config ` so the Placement can target ` local-cluster ` |
@@ -56,8 +55,8 @@ configuration.
5655| 6 -- Validation | ` validation.enabled ` | Checks minimum size and ` openssl x509 ` parse for every ` .crt ` |
5756| 7 -- Combine | always | Concatenates all ` .crt ` files into ` tls-ca-bundle.pem ` ; fails if bundle < 100 bytes |
5857| 8 -- ConfigMap | always | ` oc apply ` the ` ztvp-trusted-ca ` ConfigMap with annotations recording extraction metadata |
59- | 8.5 -- Proxy CA | ` proxyCA.enabled ` | Creates a separate ConfigMap with ingress + service CAs only |
60- | 8.6 -- Proxy Patch | ` proxyCA.enabled ` | Patches ` proxy/cluster ` to set ` trustedCA ` (only if not already set to another value) |
58+ | 8.1 -- Proxy CA | ` proxyCA.enabled ` | Creates a separate ConfigMap with ingress + service CAs only |
59+ | 8.2 -- Proxy Patch | ` proxyCA.enabled ` | Patches ` proxy/cluster ` to set ` trustedCA ` (only if not already set to another value) |
6160| 9 -- Image Pull Trust | ` imagePullTrust.enabled ` | Creates a ConfigMap keyed by registry hostname and patches ` image.config.openshift.io/cluster ` |
6261| 10 -- Rollout | ` rollout.enabled ` | Restarts Deployments/StatefulSets that consume the certificate bundle |
6362
@@ -79,12 +78,12 @@ signed by a public CA.
7978
80791 . The Job auto-detects the ingress CA from each ` IngressController ` 's router
8180 secret in ` openshift-ingress ` .
82- 2 . The service CA is read from ` openshift-service-ca.crt ` .
81+ 2 . The service CA is read from ` openshift-service-ca.crt ` from within the Job Pod .
83823 . If a cluster-wide proxy bundle exists, it is included.
84- 4 . All certificates are combined into ` ztvp-trusted-ca ` and distributed via
83+ 4 . All certificates are combined into ` ztvp-trusted-ca ` ConfigMap and distributed via
8584 ACM Policy to target namespaces.
86855 . A proxy CA ConfigMap (` ztvp-proxy-ca ` ) is created with ingress + service
87- CAs and ` proxy/cluster ` is patched so the Cluster Network Operator injects
86+ CAs and the ` proxy/cluster ` is patched so the Cluster Network Operator injects
8887 these CAs into all workloads automatically.
8988
9089No platform override file is needed. The chart's default ` values.yaml ` handles
@@ -114,11 +113,11 @@ proxyCA:
114113> ` proxyCA.enabled: true`. They are retained for clarity and backward
115114> compatibility with older chart versions.
116115
117- **Behavior is identical to Scenario 1** -- Phases 8.5 and 8.6 run by default:
116+ **Behavior is identical to Scenario 1** -- Phases 8.1 and 8.2 run by default:
118117
119- 1. Phase 8.5 builds a proxy-specific bundle containing only the ingress and
118+ 1. Phase 8.1 builds a proxy-specific bundle containing only the ingress and
120119 service CAs (the Cluster Network Operator merges these with system CAs).
121- 2. Phase 8.6 patches `proxy/cluster` to set `spec.trustedCA.name` to
120+ 2. Phase 8.2 patches `proxy/cluster` to set `spec.trustedCA.name` to
122121 ` ztvp-proxy-ca` .
1231223. The CNO propagates the merged bundle to every node, making the ingress CA
124123 trusted system-wide for all pods without explicit volume mounts.
@@ -244,7 +243,7 @@ openshift-config/ztvp-trusted-ca ---ACM Policy---> qtodo/ztvp-trusted-ca
244243 ...
245244` ` `
246245
247- The policy uses `fromConfigMap` hub templates so that the ConfigMap data is
246+ The policy uses [ `fromConfigMap`](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.12/html-single/governance/index#fromConfigMap-function) hub templates so that the ConfigMap data is
248247always sourced from the hub cluster's copy. Target namespaces are configured
249248via `distribution.targetNamespaces`.
250249
@@ -276,17 +275,18 @@ metadata:
276275
277276# # Sync Wave Ordering
278277
279- The chart's resources are ordered within the ArgoCD sync :
278+ The chart's resources are ordered within the Argo CD sync :
280279
281- | Wave | Resources |
280+ | Order | Resources |
282281|---|---|
283- | 22 | ServiceAccount, RBAC (Role, RoleBinding, ClusterRole, ClusterRoleBinding) |
284- | 23 | Initial Job, CronJob, ConfigMap (script) |
285- | 25 | ManagedClusterSetBinding |
286- | 26 | ACM Policy, PlacementBinding, Placement |
287-
288- The application itself sits at sync-wave **21** in `values-hub.yaml`, ensuring
289- it deploys before operators and workloads that depend on the CA bundle.
282+ | 1st | ServiceAccount, RBAC (Role, RoleBinding, ClusterRole, ClusterRoleBinding) |
283+ | 2nd | Initial Job, CronJob, ConfigMap (script) |
284+ | 3rd | ManagedClusterSetBinding |
285+ | 4th | ACM Policy, PlacementBinding, Placement |
286+
287+ The application itself is deployed early in the overall sync order (via
288+ ` values-hub.yaml` ), ensuring it runs before operators and workloads that depend
289+ on the CA bundle.
290290
291291# # Configuration Reference
292292
0 commit comments