Stop reading whenever you have enough
Certificates, in twelve questions.
Each one is the question the previous answer makes you ask. The ones that matter come with the command, because that is the part you meet at work.
Not technical? The first three questions are written for you, and they are enough to follow any conversation about this.
- Rungs
- 12
- Hands on
- 4
- Read
- ~8 min
What it is
01–03Every workload carries a short lived ID card, signed by an authority. Someone has to own the authority.
three minutes, no cluster needed · for anyone
- 01
What is the chain, top to bottom?
Not knowing this costs
Three lifetimes, from a decade to a day, each on purpose.
- A root: long lived, kept cold, rarely touched
- An intermediate: istiod signs with this daily
- Leaves: per workload, 24 hours, fully automatic
- 02
Which parts renew themselves?
Not knowing this costs
The certificates that page you are the two nobody automated.
- Leaves: entirely automatic, nobody thinks about them
- Intermediate and root: humans, calendars, change windows
- The automation ends exactly where the blast radius grows
- 03
Who should own the root?
Not knowing this costs
The default root is generated in the cluster and dies with it.
- Default: istiod invents one inside the cluster
- Production: your PKI team issues an intermediate
- The cluster should never hold a root key
Before you scroll on
0/3You should now be able to
The chain you will run
04–05Three certificates, three lifetimes, three very different blast radii.
root, intermediate, leaf, and where each lives · for whoever owns the platform
- 04
How does my company CA plug in?
hands onNot knowing this costs
Mounting the root key hands cluster admins your whole PKI.
- A cacerts secret in istio-system, before install
- Intermediate cert and key, plus the root chain
- istiod signs leaves with your intermediate from then on
shellthe handoverkubectl create secret generic cacerts -n istio-system \ --from-file=ca-cert.pem \ --from-file=ca-key.pem \ --from-file=root-cert.pem \ --from-file=cert-chain.pem kubectl rollout restart deploy/istiod -n istio-system # new leaves chain to your root from the next issuance onca-cert.pem is the intermediate, never the root. If the file you are about to mount is your root key, stop: the cluster is the wrong place for it to live. - 05
Are gateway certificates the same system?
Not knowing this costs
Two certificate systems, two expiry calendars, one word: certificates.
- No. Public TLS certs come from a public CA
- They live in secrets named by credentialName
- cert-manager typically owns their renewal
Before you scroll on
0/3You should now be able to
Proving it works
06–07Expiry dates are facts you read, not settings you trust.
commands that answer yes or no · for whoever has to sign it off
- 06
What chain is a workload actually carrying?
hands onNot knowing this costs
The chain you configured and the chain in the pods can differ for days.
- Pull the cert off the proxy and read it
- Issuer, expiry and SPIFFE identity in one look
shellthe leaf, in the openistioctl proxy-config secret deploy/payment-svc -n payments -o json \ | jq -r '.dynamicActiveSecrets[0] .secret.tlsCertificate.certificateChain.inlineBytes' \ | base64 -d | openssl x509 -noout -issuer -enddate -ext subjectAltName # issuer=O = YourCorp Mesh Intermediate <- your chain, in force # notAfter=Jul 27 09:14:02 2026 GMT <- ~24h away, correct # URI:spiffe://cluster.local/ns/payments/sa/payment-svcissuer still reading O = cluster.local after a cacerts handover means old pods are on the old chain: leaves only re chain as they renew or restart. - 07
When does the root expire?
hands onNot knowing this costs
An expired root does not degrade. Everything stops at once.
- Read it from the secret, put it in a calendar
- Roots expire on schedule, meshes forget on schedule
shellthe date that ends everythingkubectl get secret cacerts -n istio-system \ -o jsonpath='{.data.root-cert\.pem}' | base64 -d \ | openssl x509 -noout -enddate # notAfter=Mar 14 00:00:00 2032 GMT # alertable version: istiod exports # citadel_server_root_cert_expiry_timestampThe metric makes it an alert instead of a memory. Alert a year out and again at ninety days: root rotation is a project, not a task.
Before you scroll on
0/3You should now be able to
When it breaks
08–10Certificate incidents are calendars, not surprises. The pages come from unread calendars.
the two expiries and the rotation · for whoever gets paged
- 08
istiod is down. When do certificates become the problem?
Not knowing this costs
An istiod outage is quiet for hours, then everything fails at once.
- Leaves renew at roughly half life, so ~12 hours of slack
- Past that, renewals fail and workloads age out
- The outage clock and the cert clock are different clocks
- 09
How does an intermediate rotate without downtime?
hands onNot knowing this costs
Intermediate rotation is routine only if the root is not moving too.
- Replace cacerts with the new intermediate
- Restart istiod, then roll workloads in waves
- Old and new leaves coexist, both chain to the root
shellthe rotation, in orderkubectl create secret generic cacerts -n istio-system \ --from-file=ca-cert.pem --from-file=ca-key.pem \ --from-file=root-cert.pem --from-file=cert-chain.pem \ --dry-run=client -o yaml | kubectl apply -f - kubectl rollout restart deploy/istiod -n istio-system # then, over hours not seconds: kubectl rollout restart deploy -n payments # wave one, watch, continueThis works because both intermediates chain to the same root, so peers validate either. That is also exactly why root rotation cannot work this way. - 10
Why is root rotation a different animal?
Not knowing this costs
Skipping the dual trust window partitions the mesh by certificate.
- Peers must trust old and new roots simultaneously
- Distribute the combined trust bundle first, everywhere
- Only then re issue, then retire the old root
Before you scroll on
0/3You should now be able to
Where it ends
11–12The mesh manages its own identities, and nothing else it touches.
the limits, where people get caught · for whoever reviews the design
- 11
What does the mesh not manage?
Not knowing this costs
The mesh calendar covers one of your three certificate estates.
- Public certs for browsers, databases, external APIs
- Anything TLS outside proxy to proxy
- cert-manager and your PKI own those calendars
- 12
What is the one alert that covers this page?
Not knowing this costs
Three lines of alerting convert this whole topic from pages to chores.
- Root and intermediate expiry, from the istiod metrics
- istiod availability, because leaves depend on it
- Gateway cert expiry, from cert-manager or blackbox
Before you scroll on
0/3You should now be able to
Go deeper
4 links, each earning its place.
Plug in CA certificates↗
The cacerts procedure from rung 4, with the exact file layout.
istio-csr, cert-manager integration↗
The automated alternative: cert-manager issues for the mesh and the cluster never holds ca-key.pem at all.
Istio certificate management concepts↗
The chain from rung 1 as the project describes it.
Root transition guidance↗
The dual trust window from rung 10, as a documented procedure.