Part 12: mTLS, Transparent Encryption and Identity Quiz
Review baseline: Cilium 1.20.2 (stable, 2026-09-16); Cilium CLI 0.20.1; Hubble CLI 1.20.2. Items marked [1.21 pre-release] come from v1.21.0-pre.3 and may change before GA. Last Updated: October 15, 2026
- What is the status of Cilium Mutual Authentication (SPIFFE/SPIRE,
authentication.mode: required) in 1.20 and 1.21?- A) Removed in 1.20, absent in 1.21
- B) Beta in 1.20, stable in 1.21
- C) Deprecated in 1.20, removed in 1.21
- D) Deprecated in 1.21, removed in 1.22
Show Answer
Answer: C) Deprecated in 1.20, removed in 1.21
The 1.20 upgrade notes call it deprecated (the docs page is still titled "Beta") and point to ztunnel. The 1.21 upgrade notes say it was removed after deprecation. The policy authentication field is kept for CRD compatibility but is unused in 1.21.
- What is the numeric ID of the reserved identity
reserved:world?- A) 1
- B) 6
- C) 8
- D) 2
Show Answer
Answer: D) 2
1 is host, 2 is world, 6 is remote-node and 8 is ingress. IDs 9 and 10 split world into IPv4 and IPv6 variants.
- How are workloads enrolled in Cilium's ztunnel mTLS?
- A) Annotate each Pod with
istio.io/dataplane-mode=ambient - B) Label the namespace
io.cilium/mtls-enabled=true - C) Add
authentication.mode: requiredto a CiliumNetworkPolicy - D) Label each Pod
io.cilium/mtls-enabled=true
- A) Annotate each Pod with
Show Answer
Answer: B) Label the namespace io.cilium/mtls-enabled=true
Enrollment is namespace-level only; Pod-level enrollment is not supported. The Istio ambient label belongs to Istio, and authentication.mode was the removed Mutual Authentication mechanism.
- Which TCP port carries HBONE traffic between ztunnel proxies, and is the only port an L4 policy can target for enrolled workloads?
- A) 15008
- B) 4250
- C) 15006
- D) 15001
Show Answer
Answer: A) 15008
Traffic is encrypted before it leaves the Pod, so L4 policy cannot see inner ports; only the HBONE port 15008 can be targeted. 15001 and 15006 are the in-Pod outbound and plaintext inbound redirect ports, and 4250 was the removed Mutual Authentication handshake port.
- What is the default value of
encryption.ztunnel.ca.type?- A)
spire - B)
istiod - C)
internal - D)
cert-manager
- A)
Show Answer
Answer: C) internal
internal uses Cilium's built-in CA. spire, added in 1.20, uses an external SPIRE server and the operator registers entries for enrolled namespaces.
- Which UDP port does the Cilium WireGuard tunnel endpoint use on each node?
- A) 51820
- B) 51871
- C) 4789
- D) 8472
Show Answer
Answer: B) 51871
Cilium uses 51871, not the WireGuard default 51820. Node security groups must allow it between nodes by referencing the node security group, never a public CIDR. 4789 and 8472 are VXLAN ports.
- Which transparent-encryption strict mode option works only with WireGuard?
- A)
encryption.strictMode.ingress.enabled - B)
encryption.strictMode.egress.allowRemoteNodeIdentities - C)
encryption.strictMode.egress.enabled - D)
encryption.strictMode.egress.cidr
- A)
Show Answer
Answer: A) encryption.strictMode.ingress.enabled
Ingress strict mode drops cluster-internal ingress that did not arrive through the WireGuard tunnel, so it is not supported with IPsec. The old flat flags (encryption.strictMode.enabled and friends) were removed in 1.20 in favour of the egress.* names.
- In the IPsec key Secret, what forces per-tunnel derived keys?
- A) Setting
encryption.ipsec.interface - B) Using key ID 0
- C) Enabling
encryption.nodeEncryption - D) A
+after the key ID, as in3+ rfc4106(gcm(aes)) ...
- A) Setting
Show Answer
Answer: D) A + after the key ID, as in 3+ rfc4106(gcm(aes)) ...
Global keys were deprecated in 1.16 (GHSA-pwqm-x5x6-5586). encryption.ipsec.interface was removed in 1.20, and key IDs run from 1 to 15.
- In what order does the Double Write identity migration from kvstore to CRD proceed?
- A)
doublewrite-readkvstore, thendoublewrite-readcrd, thencrd - B)
crd, thendoublewrite-readcrd, thenkvstore - C)
kvstore, thencrd, thendoublewrite-readcrd - D)
doublewrite-readcrd, thendoublewrite-readkvstore, thencrd
- A)
Show Answer
Answer: A) doublewrite-readkvstore, then doublewrite-readcrd, then crd
Both stores are written throughout; reads move from kvstore to CRD, then the kvstore is dropped. Watch the cilium_operator_doublewrite_* metrics until the *_only_identities values reach zero before each step.
- What happens in Cilium 1.20 when you apply a CiliumNetworkPolicy that has neither
specnorspecs?- A) It is accepted and the agent logs a warning
- B) It is rejected at admission by a CEL validation rule
- C) It is accepted and treated as allow-all
- D) It is accepted but never selects any endpoint
Show Answer
Answer: B) It is rejected at admission by a CEL validation rule
The CRD carries has(self.spec) || has(self.specs) with the message "spec or specs must be provided". Existing empty policies are unaffected until they are updated.