Cilium Introduction and Basic Concepts Quiz
Baseline: Cilium 1.20.1 / CLI 0.20.0. Last Updated: September 12, 2026
Multiple Choice Questions
- Which technology provides Cilium’s programmable kernel datapath?
- A) iptables
- B) eBPF
- C) VXLAN
- D) IPsec
Show Answer
Answer: B) eBPF
Explanation: Cilium loads verified eBPF programs at supported kernel hooks. This enables networking and observability features, but does not guarantee higher performance than every alternative; measure the selected workload and configuration.
- What policy layers can Cilium support with the required integrations?
- A) Only L3
- B) Only L3–L4
- C) L3/L4 and supported L7 protocols
- D) Only L2–L3
Show Answer
Answer: C) L3/L4 and supported L7 protocols
Explanation: HTTP and DNS policy use supported proxy paths; encrypted HTTP needs the appropriate termination/integration. Kafka-aware L7 rules were removed in 1.20. L4 policy can still control Kafka connections.
- Which Cilium component provides network flow visibility?
- A) Prometheus
- B) Hubble
- C) Grafana
- D) Jaeger
Show Answer
Answer: B) Hubble
Explanation: Hubble observes network/proxy flows and can display service relationships. HTTP visibility depends on the proxy path. It does not automatically create complete application traces; Prometheus metrics and distributed tracing serve different purposes.
- Which Kubernetes Service component can Cilium replace in a supported configuration?
- A) CoreDNS
- B) kube-proxy
- C) etcd
- D) kubelet
Show Answer
Answer: B) kube-proxy
Explanation: kubeProxyReplacement requests Cilium’s Service handling. API/bootstrap access and migration prerequisites still matter, and DSR/Maglev/XDP are separate choices rather than automatic guarantees of better performance.
- Which pair names Cilium’s transparent network encryption modes?
- A) IPsec and WireGuard
- B) TLS and SSH
- C) GRE and HTTP
- D) DNS and VXLAN
Show Answer
Answer: A) IPsec and WireGuard
Explanation: IPsec and WireGuard are the established pair in this question. The same encryption.type key also accepts beta ztunnel for workload mTLS, with its own namespace enrollment, CA/bootstrap, traffic and policy prerequisites. These are different modes under the same key; saying that Cilium never uses TLS would be incorrect.
- What is Cilium’s multi-cluster connectivity feature called?
- A) Cluster Federation
- B) ClusterMesh
- C) Multi-Cluster Network
- D) Global Cluster
Show Answer
Answer: B) ClusterMesh
Explanation: ClusterMesh connects compatible clusters with configured identities, trust and network reachability. It does not create the entire underlay or automatically make all services globally reachable.
- Which technology can Cilium use for optional early packet/load-balancing acceleration?
- A) DPDK
- B) XDP
- C) RDMA
- D) SR-IOV
Show Answer
Answer: B) XDP
Explanation: XDP can process selected traffic early at a supported hook/driver. It is not used by every Cilium packet path, and neither a packets-per-second guarantee nor complete DDoS protection follows from enabling it.
- What is the standard upstream Linux kernel baseline for Cilium 1.20, excluding documented vendor-backport equivalents?
- A) 3.10
- B) 4.9
- C) 4.19
- D) 5.10
Show Answer
Answer: D) 5.10
Explanation: The current requirements state Linux 5.10+, with named equivalents such as RHEL 8.10’s backported 4.18. Individual features can need newer kernels. Check the node/VM kernel, not only the workstation OS.
- Which option provides VXLAN/host-gw connectivity without requiring Cilium’s eBPF dataplane?
- A) Cilium native routing
- B) Calico BPF mode
- C) Flannel VXLAN/host-gw
- D) Cilium netkit mode
Show Answer
Answer: C) Flannel VXLAN/host-gw
Explanation: Flannel connectivity backends are a different implementation. Its optional policy controller or another policy integration must be evaluated separately; avoid universal resource/performance rankings.
- What is the API version of CiliumNetworkPolicy?
- A) networking.k8s.io/v1
- B) cilium.io/v1
- C) cilium.io/v2
- D) policy.cilium.io/v1
Show Answer
Answer: C) cilium.io/v2
Explanation: CiliumNetworkPolicy is a separate CRD/API from standard Kubernetes NetworkPolicy. Feature availability still depends on the Cilium version and dataplane/proxy configuration.
Short Answer Questions
- Which component runs per node and programs endpoints and eBPF policy?
Show Answer
Answer: Cilium Agent
Explanation: The agent performs node-local work. The container runtime/CNI plugin, operator, proxy and host OS have other responsibilities; the agent does not own every networking operation.
- Which component coordinates cluster-level allocation/controller work?
Show Answer
Answer: Cilium Operator
Explanation: The operator can run multiple replicas; the reviewed chart defaults to two, with leader election for applicable work. Responsibilities depend on IPAM/identity mode. It is not inherently a single instance or the sole owner of every ClusterMesh connection.
- Which CLI command runs Cilium’s connectivity test workloads?
Show Answer
Answer: cilium connectivity test
Explanation: It creates workloads/policies and needs an approved test environment and permissions. For read-only inspection start with cilium status, endpoint diagnostics and Hubble. The management command cilium monitor is not the current agent diagnostic interface.
- What is the numeric identifier associated with an endpoint’s security-relevant labels?
Show Answer
Answer: Security identity (Cilium identity)
Explanation: Only the relevant/selected label set determines the identity in its allocation scope. Namespace-derived labels can differ; same app labels alone do not establish identity equality. The numeric ID is allocated rather than a permanent globally meaningful hash.
- What specification defines the container network plugin interface?
Show Answer
Answer: CNI (Container Network Interface)
Explanation: Kubelet communicates with the runtime through CRI, and the runtime invokes CNI. CNI exchanges network configuration/results and handles setup/removal; kubelet’s former CNI configuration flags were removed in Kubernetes 1.24.
Hands-on Questions
- Using the installed CLI, show a fresh Cilium 1.20.1 installation with the prepared lab values and explicit context.
Show Answer
Answer:
CILIUM_LAB_CONTEXT=replace-with-nonproduction-context
cilium version --client
cilium install --context "$CILIUM_LAB_CONTEXT" --version 1.20.1 \
--values cilium-lab-values.yaml
cilium status --context "$CILIUM_LAB_CONTEXT" --waitExplanation: Use the guide’s prevalidated environment/CNI ownership, CIDR and values prerequisites. Skip installation for an existing release and use its owner’s upgrade process. Status is not a substitute for positive/negative traffic tests.
- Write the lab policy permitting frontend Pod ingress to backend TCP 8080 within cilium-intro-demo.
Show Answer
Answer:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-frontend-backend
namespace: cilium-intro-demo
spec:
endpointSelector:
matchLabels:
k8s:app: backend
ingress:
- fromEndpoints:
- matchLabels:
k8s:app: frontend
k8s:io.kubernetes.pod.namespace: cilium-intro-demo
toPorts:
- ports:
- port: '8080'
protocol: TCPExplanation: The namespace and workloads must already exist. The explicit peer namespace avoids granting other namespaces the same label-based access. Other allow/deny policies and host traffic affect the result; this rule is not HTTP filtering or an egress restriction.
- Show a partial values example requesting kube-proxy replacement and native-routing DSR with Geneve dispatch. What remains to be prepared?
Show Answer
Answer:
kubeProxyReplacement: true
k8sServiceHost: api.lab.example.internal
k8sServicePort: 443
routingMode: native
tunnelProtocol: geneve
ipv4NativeRoutingCIDR: 10.244.0.0/16
loadBalancer:
mode: dsr
dsrDispatch: geneveExplanation: This is a separate native profile, not an instruction to turn DSR on in the VXLAN lab. Replace the API host/port and native-routing CIDR with the actual prepared values. Ensure API/bootstrap DNS access, underlay Pod routes, Geneve/MTU and return/source-address paths, then follow the supported kube-proxy migration procedure. Static values do not guarantee cloud-load-balancer compatibility or eliminate every bottleneck.
- Show cluster status, the selected backend endpoint’s local status, and desired policy resources.
Show Answer
Answer:
CILIUM_LAB_CONTEXT=replace-with-nonproduction-context
CILIUM_LAB_NS=cilium-intro-demo
BACKEND_POD=replace-with-actual-backend-pod
cilium status --context "$CILIUM_LAB_CONTEXT" --verbose
kubectl --context "$CILIUM_LAB_CONTEXT" get pod "$BACKEND_POD" -n "$CILIUM_LAB_NS" -o wide
kubectl --context "$CILIUM_LAB_CONTEXT" get pods -n kube-system -l k8s-app=cilium -o wide
# Choose the agent on the backend Pod's node.
CILIUM_AGENT_POD=replace-with-agent-pod-on-that-node
kubectl --context "$CILIUM_LAB_CONTEXT" exec -n kube-system "$CILIUM_AGENT_POD" \
-c cilium-agent -- cilium-dbg endpoint list
kubectl --context "$CILIUM_LAB_CONTEXT" exec -n kube-system "$CILIUM_AGENT_POD" \
-c cilium-agent -- cilium-dbg endpoint get "pod-name:$CILIUM_LAB_NS:$BACKEND_POD"
kubectl --context "$CILIUM_LAB_CONTEXT" get networkpolicy -n "$CILIUM_LAB_NS" -o yaml
kubectl --context "$CILIUM_LAB_CONTEXT" get cnp -n "$CILIUM_LAB_NS" -o yaml
kubectl --context "$CILIUM_LAB_CONTEXT" get ccnp -o yamlExplanation: Endpoint identifiers and realized state belong to the selected agent/node; use the Pod identifier supported by cilium-dbg. kubectl reads desired policy resources, not proof of enforcement. cilium-dbg policy get is deprecated, and management cilium endpoint/policy/monitor commands are not equivalent.
- Enable Hubble for the existing lab release and observe flows with the client tools already installed.
Show Answer
Answer:
# Terminal 1; the lab Cilium release and client tools must already exist.
CILIUM_LAB_CONTEXT=replace-with-nonproduction-context
cilium hubble enable --context "$CILIUM_LAB_CONTEXT" --ui
cilium hubble port-forward --context "$CILIUM_LAB_CONTEXT" --port-forward 4245# Terminal 2, with the port-forward still running.
BACKEND_POD=replace-with-actual-backend-pod
hubble observe --server 127.0.0.1:4245 --namespace cilium-intro-demo
hubble observe --server 127.0.0.1:4245 --pod "cilium-intro-demo/$BACKEND_POD"
hubble observe --server 127.0.0.1:4245 --protocol http
hubble observe --server 127.0.0.1:4245 --verdict DROPPEDExplanation: If the release is GitOps-managed, change the owner’s Helm values instead of an imperative CLI update; skip enable when already enabled. Keep the foreground port-forward active, and configure client TLS if Relay uses it. HTTP events need a supported L7 proxy path, and DROPPED is not every application failure. Use cilium hubble ui in a separate terminal with the same explicit context for UI access.