The drawing is great! I'll highlight a few things and stay focused on correlating the Ziti controller configuration with the cert-manager configuration.
One likely point of confusion about the way the Ziti controller Helm chart uses cert-manager is the self-signed issuer that appears in your drawing as a root CA in the upper-left quadrant. This empty meta entity in cert-manager is the logical parent of every root CA, i.e., self-signed issuers.
Remember that all root CAs are "self-signed" and do not have a cryptographic parent or issuer. Each root CA is, therefore, a "root of trust." I would relabel (or omit) this meta entity, i.e., the empty issuer entity for self-signed, root CAs, from the drawing because it does not contain any cryptographic material (no cert). It exists only in cert-manager.
The "trust anchor" label is debatable. If you meant "root of trust, " I'd only apply the label to the root CA. If you mean "the most trusted CA" from the consumer's perspective, "trust anchor" seems like a good fit. It's accurate that the intermediate CA issues the leaf certificates used as client or server certificates.
You placed a question mark next to the "ctrl plane API or fabric API?" node in your drawing. This is the control plane service provided by the Ziti controller and consumed by routers. This is how the Ziti controller manages the routers, but no fabric/transport data is attributable to individual Ziti services flowing over this path. The (router) control plane service presents to routers the server certificate configured in the controller's identity.server_cert
property.
The easiest way to explain how a server certificate becomes bound to a particular TLS server provided by the Ziti controller is to point out the conventional identity
configuration stanza.
Your Ziti controller configuration rendered by Helm has one such identity
stanza near the top of the YAML file. If no other identity
stanzas appear in the controller's configuration YAML, then it will serve as the default server identity for all the TLS servers provided by the controller.
The controller's two types of TLS servers are the routers' ctrl
plane service and the list of web[]
(HTTP) listeners. Each web listener may be configured to bind any of the controller's web APIs: client, mgmt, fabric, metrics, or health checks, and each web listener may have an identity
stanza specifying a distinct server identity. The controller Helm chart creates a separate web identity common to all web listeners. It's enabled by default in Helm value webBindingPki.enabled
.
The last bit of PKI configuration is Ziti's built-in edge signer CA in controller property .edge.enrollment.signingCert
. This is the CA from which edge client certificates are issued. The default edge signer CA is the intermediate CA from which cert-manager issues the default server identity. The controller's Helm chart enables by default a separate root of trust for the edge signer CA in Helm chart value edgeSignerPki.enabled
. This means that Ziti's edge signer CA is the intermediate CA managed by cert-manager named like {{ Helm release name }}-edge-signer-issuer
.
Depending on the chart's input values, the controller's Helm chart allows you to have one, two, or three separate roots of trust, i.e., root CAs.
- ctrl plane identity (default server identity from the default root of trust)
- edge signer
- web
For each enabled root, an intermediate CA issues leaf certificates.
The ctrl plane root CA may be another cert-manager namespaced Issuer
or ClusterIssuer
, not managed by the controller's Helm chart, by specifying Helm value ctrlPlane.alternativeIssuer
. This is useful for building Ziti's chain of trust on another system like Istio.