术语测验
本测验用于检验你对 Cilium、eBPF、Kubernetes 和网络相关关键术语及概念的理解。
选择题
- eBPF 的全称是什么?
- A) Enhanced Berkeley Packet Filter
- B) Extended Berkeley Packet Filter
- C) Embedded BPF Filter
- D) External Berkeley Protocol Filter
显示答案
答案:B) Extended Berkeley Packet Filter
说明: eBPF 是 Extended Berkeley Packet Filter 的缩写,是最初为网络数据包捕获而开发的 BPF (Berkeley Packet Filter) 的扩展版本。eBPF 是一种允许程序在 Linux kernel 内安全运行的技术,可用于网络数据包处理、系统调用跟踪和性能监控等多种用途。Cilium 将 eBPF 作为其核心技术,以提供高性能网络、安全性和可观测性功能。
- 在 Cilium 中,应用网络策略的基本单位是什么?
- A) Pod
- B) Node
- C) Endpoint
- D) Service
显示答案
答案:C) Endpoint
说明: 在 Cilium 中,Endpoint 指应用网络策略的网络端点,通常对应一个 Kubernetes Pod。每个 Endpoint 都有唯一的 ID,Cilium 基于这些 Endpoint 应用网络策略并控制流量。Endpoint 由 Cilium Agent 管理,并会在 Pod 创建时自动创建。你可以使用 cilium endpoint list 命令查看当前 Node 上的所有 Endpoint。
- XDP (eXpress Data Path) 的主要特性是什么?
- A) L7 协议分析
- B) 在网络驱动程序层处理数据包
- C) TLS 加密
- D) DNS 解析
显示答案
答案:B) 在网络驱动程序层处理数据包
说明: XDP (eXpress Data Path) 是一种基于 eBPF 的技术,可在网络驱动程序层(中断上下文)处理数据包。这绕过了 kernel 网络协议栈,从而实现极高性能的数据包处理(每秒数百万个数据包)。XDP 可以通过 DROP、PASS、TX(发送)和 REDIRECT 等操作处理数据包。Cilium 使用 XDP 实现 DDoS 防护、高性能负载均衡和数据包过滤。
- Cilium 的网络可观测性平台名称是什么?
- A) Prometheus
- B) Grafana
- C) Hubble
- D) Jaeger
显示答案
答案:C) Hubble
说明: Hubble 是 Cilium 的网络可观测性平台,使用 eBPF 实时监控和分析网络流。Hubble 的主要功能包括网络流监控、Service 依赖关系图生成、网络策略违规检测、性能指标收集和安全事件跟踪。Hubble 同时提供 CLI 和基于 Web 的 UI,并可与 Prometheus 和 Grafana 集成以可视化指标。
- VXLAN 的全称和主要用途是什么?
- A) Virtual Extended LAN - 虚拟网络创建
- B) Virtual Extensible LAN - L2 覆盖网络
- C) Very Extended LAN - 大规模网络扩展
- D) Variable Extensible LAN - 动态网络配置
显示答案
答案:B) Virtual Extensible LAN - L2 覆盖网络
说明: VXLAN (Virtual Extensible LAN) 是一种网络虚拟化技术,可在 Layer 3 (L3) 网络之上覆盖 Layer 2 (L2) 网络。VXLAN 使用 UDP 封装进行隧道传输,并通过 24-bit VNI (VXLAN Network Identifier) 支持多达约 1,600 万个网络分段。在 Cilium 中,VXLAN 用作 Node 间 Pod 通信的覆盖网络模式。替代方案包括 GENEVE 或原生路由模式。
- BPF Maps 的主要作用是什么?
- A) 网络路由表管理
- B) eBPF 程序之间的数据共享和存储
- C) DNS 记录缓存
- D) TLS 证书存储
显示答案
答案:B) eBPF 程序之间的数据共享和存储
说明: BPF Maps 是供 eBPF 程序存储和检索数据的键值存储。BPF Maps 还用于 kernel space 与 user space 之间的数据共享。主要类型包括 Hash Map(键值存储)、Array Map(基于索引的数组)、LRU Map(最近最少使用缓存)和 Ring Buffer(环形缓冲区)。Cilium 使用 BPF Maps 存储 service maps、backend maps、连接跟踪表等。
- 在 Cilium 中,表示 Pod 安全身份的数字标识符称为什么?
- A) Pod ID
- B) Security Context
- C) Identity
- D) Endpoint ID
显示答案
答案:C) Identity
说明: Cilium Identity 是根据 Pod 的 label 集合生成的数字标识符。具有相同 labels 的所有 Pod 共享相同的 Identity。基于 Identity 的策略使用 Identity 而非 IP addresses 来应用网络策略,因此即使 Pod IP 发生变化,策略也能保持一致。这种方法具有很高的可扩展性,即使在大型集群中也能高效运行。Endpoint ID 用于标识特定的 Pod 实例,与 Identity 不同。
- IPAM 的全称及其在 Cilium 中的作用是什么?
- A) IP Address Management - IP 地址分配和管理
- B) Internet Protocol Access Manager - Internet 访问管理
- C) IP Assignment Module - IP 分配模块
- D) Internal Protocol Address Mapper - 内部协议地址映射
显示答案
答案:A) IP Address Management - IP 地址分配和管理
说明: IPAM (IP Address Management) 是负责规划、分配、跟踪和管理 IP 地址的系统。Cilium 支持多种 IPAM 模式:Cluster Pool(集群范围的 IP 池管理)、Kubernetes(使用 Kubernetes Node CIDR)、AWS ENI(使用 AWS Elastic Network Interface)、Azure(Azure 网络集成)和 GKE(Google Kubernetes Engine 集成)。IPAM 模式的选择取决于集群环境和网络要求。
- WireGuard 的主要特性及其在 Cilium 中的用途是什么?
- A) 数据包捕获工具 - 网络分析
- B) 现代 VPN 协议 - Node 间流量加密
- C) 负载均衡算法 - 流量分配
- D) DNS 代理 - 名称解析
显示答案
答案:B) 现代 VPN 协议 - Node 间流量加密
说明: WireGuard 是一种现代、快速且安全的 VPN (Virtual Private Network) 隧道协议。它比 IPsec 更简单、更快,且代码库更小,因此更易于进行安全审计。在 Cilium 中,WireGuard 用于 Node 间流量加密。启用 WireGuard 后,集群中 Pod 之间的所有流量都会被透明加密。Cilium 可以使用 IPsec 或 WireGuard 实现加密。
- CNI 的全称和作用是什么?
- A) Container Network Interface - 容器网络插件的标准接口
- B) Cloud Native Infrastructure - 云原生基础设施
- C) Cluster Network Integration - 集群网络集成
- D) Container Node Interconnect - 容器 Node 连接
显示答案
答案:A) Container Network Interface - 容器网络插件的标准接口
说明: CNI (Container Network Interface) 是一个 CNCF 项目,定义了容器运行时与网络插件之间的标准接口。在 Kubernetes 中,kubelet 通过 CNI 接口与网络插件(Cilium、Calico、Flannel 等)通信。CNI 为添加/移除容器时的网络配置定义了标准 API,从而能够通过插件架构集成各种网络解决方案。Cilium 是 CNI 实现之一。
简答题
- 在 Cilium 中,提供 L7 proxy 和 service mesh 功能的开源组件名称是什么?
显示答案
答案: Envoy
说明: Envoy 是一个开源边缘和服务代理,用作 L7 proxy 和通信总线。Cilium 集成 Envoy 来实现 L7 网络策略。当你在 CiliumNetworkPolicy 中定义 L7 规则(HTTP、gRPC、Kafka、DNS 等)时,Cilium 会自动透明地部署 Envoy proxy。Envoy 还提供高级负载均衡、流量拆分和指标收集功能。
- 在每个 Node 上运行并负责 eBPF program 加载、网络策略实施和 Endpoint 管理的 Cilium 组件名称是什么?
显示答案
答案: Cilium Agent
说明: Cilium Agent 是 Cilium 的核心组件,在每个 Kubernetes Node 上作为 DaemonSet 运行。Agent 的主要职责包括将 eBPF programs 加载和管理到 kernel 中、实施和应用网络策略、执行 Service 负载均衡、IP 地址管理 (IPAM)、网络 Endpoint 管理、指标和日志收集,以及与 Kubernetes API server 通信。每个 Node 上的本地网络操作均由该 Node 的 Cilium Agent 处理。
- OSI model 中负责使用 IP addresses 路由数据包的层名称和编号是什么?
显示答案
答案: L3 (Network Layer)
说明: L3 (Network Layer) 是 OSI model 的第 3 层,负责使用 IP addresses 进行逻辑寻址和数据包路由。IP (Internet Protocol) 和 ICMP (Internet Control Message Protocol) 在该层运行。Cilium L3 策略可以根据 IP addresses 和 CIDR blocks 过滤流量。L2 (Data Link Layer) 使用 MAC addresses,而 L4 (Transport Layer) 使用 port numbers。
- 为一组 Pod 提供稳定网络端点的 Kubernetes resource 名称是什么?
显示答案
答案: Service
说明: Kubernetes Service 是一种抽象,可为一组 Pod 提供稳定的网络端点(ClusterIP、DNS name)。Pod 会被动态创建/删除,其 IP 也可能变化,但 Service 提供固定的 IP 和 DNS names,以实现一致的客户端访问。Cilium 通过 eBPF 实现 Service 负载均衡,能够替代 kube-proxy。Service 类型包括 ClusterIP、NodePort、LoadBalancer 和 ExternalName。
- 修改数据包 source IP address 的 NAT 类型名称是什么?
显示答案
答案: SNAT (Source NAT) 或 Masquerading
说明: SNAT (Source Network Address Translation) 是一种将数据包的 source IP address 转换为另一个 IP address 的 NAT 类型。Masquerading 是 SNAT 的一种特殊形式,会自动将 source IP 转换为出站 interface 的 IP。在 Cilium 中,masquerading 用于将集群内 Pod 出站流量的 source IP 转换为 Node IP。相反,DNAT (Destination NAT) 会修改 destination IP。
实践题
- 将以下 Cilium 相关术语与其定义匹配:Cluster Mesh、CRD、FQDN、mTLS
显示答案
答案:
- Cluster Mesh:Cilium 的多集群网络功能。连接多个 Kubernetes 集群,以实现跨集群 Service 发现、负载均衡和网络策略执行。
- CRD (Custom Resource Definition):通过定义自定义 resource 扩展 Kubernetes API 的方法。Cilium 使用 CRD 定义 CiliumNetworkPolicy、CiliumEndpoint 等。
- FQDN (Fully Qualified Domain Name):主机的完整 domain name(例如,www.example.com)。Cilium FQDN 策略按 domain name 而非 IP 控制对外部 Service 的访问。
- mTLS (mutual TLS):TLS 的扩展形式,client 和 server 都使用 certificates 对彼此进行身份验证。通过双向认证提供更强的安全性。
说明: 这些术语在 Cilium 和 Kubernetes 网络中经常使用。Cluster Mesh 适用于混合云/多云环境,CRD 是 Kubernetes 可扩展性的关键,FQDN 策略对于访问具有动态 IP 的外部 Service 的访问控制至关重要,而 mTLS 对于安全的 Service 间通信很重要。
- 编写使用 Cilium CLI 查询当前集群中所有 Identity 及其 labels 的命令。
显示答案
答案:
# Query all Identities
cilium identity list
# Or query CiliumIdentity CRD using kubectl
kubectl get ciliumidentity -A
# Query detailed information for a specific Identity
cilium identity get <identity_id>
# Query detailed information in JSON format
kubectl get ciliumidentity <identity_id> -o json
# Filter Identities with specific labels
kubectl get ciliumidentity -o json | jq '.items[] | select(.metadata.labels."k8s:app" == "frontend")'
# Check Identity from Endpoints
cilium endpoint list
kubectl exec -n kube-system ds/cilium -- cilium endpoint list说明: Cilium Identity 是根据 Pod 的 label 集合生成的数字标识符。cilium identity list 命令显示当前集群中所有 Identity 及其 labels。CiliumIdentity 作为 CRD 存储,因此也可以使用 kubectl 查询。Identity 是网络策略的基础,所有具有相同 labels 的 Pod 都共享相同的 Identity。
- 编写查询 BPF Map 内容的命令,以检查 Service 负载均衡 maps 和连接跟踪表。
显示答案
答案:
# Query BPF maps from Cilium Agent pod
# Service map (Service -> Backend mapping)
kubectl exec -n kube-system ds/cilium -- cilium bpf lb list
# Backend map (backend pod information)
kubectl exec -n kube-system ds/cilium -- cilium bpf lb list --backends
# Connection Tracking table
kubectl exec -n kube-system ds/cilium -- cilium bpf ct list global
# NAT map (masquerading/SNAT information)
kubectl exec -n kube-system ds/cilium -- cilium bpf nat list
# Policy map (Identity-based policies)
kubectl exec -n kube-system ds/cilium -- cilium bpf policy get --all
# Endpoint map
kubectl exec -n kube-system ds/cilium -- cilium bpf endpoint list
# List all BPF maps
kubectl exec -n kube-system ds/cilium -- cilium bpf map list说明: BPF Maps 是 Cilium data plane 中使用的核心数据结构。cilium bpf lb list 显示 Service 负载均衡信息,使你能够检查 Service IP/port 与 backend Pod IP/port 之间的映射。cilium bpf ct list 显示连接跟踪表,你可以在其中检查当前活动连接状态。这些命令对于网络故障排除和性能分析非常有用。
- 编写一个使用基于 FQDN 的网络策略的 CiliumNetworkPolicy,使 Pod 仅能与外部的
api.example.com和*.googleapis.comdomains 通信。
显示答案
答案:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "fqdn-egress-policy"
namespace: default
spec:
endpointSelector:
matchLabels:
app: external-client
egress:
# Allow DNS queries (required for FQDN policy to work)
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports:
- port: "53"
protocol: UDP
rules:
dns:
- matchPattern: "*"
# Allow HTTPS traffic to specific FQDNs
- toFQDNs:
- matchName: "api.example.com"
- matchPattern: "*.googleapis.com"
toPorts:
- ports:
- port: "443"
protocol: TCP说明: 基于 FQDN (Fully Qualified Domain Name) 的策略按 domain name 而不是 IP address 控制对外部 Service 的访问。要使此策略生效,必须允许 DNS 查询(第一条 egress 规则)。在 toFQDNs 中,matchName 指定精确的 domain name,matchPattern 指定使用 wildcards 的模式匹配。*.googleapis.com 允许所有 Google API subdomains。FQDN 策略尤其适用于访问具有动态 IP 的外部 Service 的访问控制。
- 说明 Cilium Operator 的作用及其与 Cilium Agent 的差异,并编写检查 Operator 状态的命令。
显示答案
答案:
# Check Cilium Operator status
kubectl -n kube-system get deployment cilium-operator
# Check Operator pod status
kubectl -n kube-system get pods -l name=cilium-operator
# Check Operator logs
kubectl -n kube-system logs -l name=cilium-operator
# Check Operator in overall Cilium status
cilium status --verbose
# Check CiliumIdentity resources (managed by Operator)
kubectl get ciliumidentity -A
# Check CiliumEndpoint resources
kubectl get ciliumendpoint -ACilium Operator 与 Cilium Agent 职责比较:
| 组件 | 运行位置 | 主要职责 |
|---|---|---|
| Cilium Agent | 每个 Node (DaemonSet) | - eBPF program 加载/管理 |
| Cilium Operator | 集群 (Deployment,1-2 个实例) | - CiliumIdentity CRD 管理 |
说明: Cilium Agent 在每个 Node 上运行并处理该 Node 的网络操作。相比之下,Cilium Operator 以单个实例(或为了 HA 而运行 2 个实例)的形式在整个集群中运行,并处理集群级协调任务。Operator 维护整个集群中的 Identity 一致性,清理未使用的 resources,并管理集群级 IPAM。