Cilium 连通性故障排查:cilium connectivity 命令全解析与实战指南
【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium
导读
cilium connectivity是 Cilium CLI 提供的连通性排查(Connectivity troubleshooting)命令族,用于在 Kubernetes 集群中验证网络连通性与测试网络性能。它由cilium connectivity test(集群连通性校验)和cilium connectivity perf(网络性能测试)两个子命令组成。读完本文,你将掌握这两个子命令的完整参数体系、底层测试套件的运行机制,以及如何利用 Hubble 流校验、JUnit 报告、sysdump 等手段在真实集群中快速定位网络问题。
1. 命令总览:connectivity 子命令树
在 Cilium CLI 中,connectivity是一个分组命令(group command),本身不执行任何测试逻辑,只负责承载两个子命令。其命令定义位于 cilium-cli/cli/connectivity.go:
func newCmdConnectivity(hooks api.Hooks) *cobra.Command { cmd := &cobra.Command{ Use: "connectivity", Short: "Connectivity troubleshooting", Long: ``, } cmd.AddCommand(newCmdConnectivityTest(hooks)) cmd.AddCommand(newCmdConnectivityPerf(hooks)) return cmd }从源码结构看,该命令组提供了两类能力:
| 子命令 | 功能定位 | 命令定义位置 |
|---|---|---|
cilium connectivity test | 在集群中校验连通性(Validate connectivity in cluster) | newCmdConnectivityTest |
cilium connectivity perf | 测试网络性能(Test network performance) | newCmdConnectivityPerf |
1.1 父命令选项
cilium connectivity自身仅有一个帮助选项:
-h, --help help for connectivity1.2 继承自父命令(cilium)的全局选项
两个子命令均继承以下全局选项,用于指定目标集群与 Cilium 部署信息:
--as string Username to impersonate for the operation. User could be a regular user or a service account in a namespace. --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. --context string Kubernetes configuration context --helm-release-name string Helm release name (default "cilium") --kubeconfig string Path to the kubeconfig file -n, --namespace string Namespace Cilium is running in. Can also be set via CILIUM_NAMESPACE env var (default "kube-system")其中--namespace默认值为kube-system,也支持通过环境变量CILIUM_NAMESPACE设置;--kubeconfig与--context用于指定 kubeconfig 路径和要操作的 Kubernetes 上下文。在 connectivity.go 中可以看到,全局命名空间等参数会在RunE入口被注入到测试参数对象中:
params.CiliumNamespace = RootParams.Namespace params.ImpersonateAs = RootParams.ImpersonateAs params.ImpersonateGroups = RootParams.ImpersonateGroups1.3 相关命令
- cilium — Cilium provides eBPF-based Networking, Security, and Observability for Kubernetes
- cilium connectivity perf — Test network performance
- cilium connectivity test — Validate connectivity in cluster
2. 连通性校验:cilium connectivity test
2.1 基本用法
cilium connectivity test [flags]命令执行时会自动创建测试命名空间(默认cilium-test),在该命名空间内部署 client、echo server、DNS 等测试 Pod,并基于真实工作负载间的请求验证数据路径是否工作正常。从 suite.go 可以看出,整个执行流程分为:清理模式检查 → JUnit 收集器初始化 → SetupAndValidate(部署测试工件并校验)→ 按 TestSuite 构建测试 → 运行测试 → 收集 JUnit 报告 → 清理几个阶段。
2.2 核心行为选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--cleanup | false | 只清理所有连通性测试工件(命名空间、Deployment、Service),不运行测试 |
--force-deploy | false | 强制重新部署测试工件 |
--single-node | false | 只运行能在单节点上执行的测试 |
--test-concurrency int | 1 | 并行执行连通性测试的命名空间数量(≤0 时按 1 处理) |
--test-namespace string | cilium-test | 执行连通性测试的命名空间(始终追加序号以兼容--test-concurrency,如cilium-test-1) |
--timeout duration | 套件级超时 | 整个连通性测试套件允许的最大运行时间 |
--test strings | 空 | 只运行匹配给定正则表达式的测试;以!开头表示跳过;支持'/pod-to-cidr'形式指定 Scenario |
-p, --pause-on-fail | false | 测试失败时暂停执行 |
-v, --verbose | false | 显示详细信息且不缓冲输出 |
-t, --timestamp | false | 在消息中显示时间戳 |
-d, --debug | false | 显示调试信息 |
--exit-zero-on-failure | false | 即使检测到测试失败也以零返回码退出 |
--post-test-sleep duration | 0 | 每个测试结束后、下一个测试开始前的等待时间 |
关于--test的筛选逻辑,源码 connectivity.go 将其编译为正则表达式:以!开头的表达式追加到params.SkipTests,其余追加到params.RunTests,从而实现对测试的"只跑指定项"或"跳过指定项"两种过滤。
2.3 集群与 Cilium 定位选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--agent-daemonset-name string | cilium | cilium agent DaemonSet 的名称 |
--agent-pod-selector string | k8s-app=cilium | 用于选择 cilium-agent Pod 的标签 |
--cilium-pod-selector string | app.kubernetes.io/part-of=cilium | 匹配所有 cilium 相关 Pod 的标签选择器 |
--node-selector map | 空 | 将连通性 Pod 限制到匹配此标签的节点 |
--node-cidr strings | 空 | 覆盖集群所有节点的一个或多个 CIDR |
--k8s-version string | 空 | Kubernetes 服务端版本,自动探测失败时使用 |
--multi-cluster string | 空 | 跨集群测试,指定目标 context |
--ip-families strings | [ipv4,ipv6] | 将测试动作限制到指定 IP 族 |
--service-type string | NodePort | 为连通性测试创建的 Kubernetes Service 类型 |
--secondary-network-iface string | 空 | 辅助网络接口名(如用于在多网络上测试 NodePort BPF) |
--tolerations strings | 空 | 追加到测试 Pod 的额外 NoSchedule 容忍 |
--namespace-labels map | 空 | 为连通性测试命名空间添加标签 |
--chart-directory string | 空 | Helm chart 目录 |
--helm-values-secret-name string | cilium-cli-helm-values | 存储自动生成的 helm values 文件的 Secret 名称 |
--assume-cilium-version string | 空 | 为连通性测试假定 Cilium 版本 |
2.4 外部目标(External Target)选项
连通性测试需要访问集群外的目标来验证出站(egress)连通性,默认使用 Cloudflare 的公共 DNS 与相关 IP:
| 选项 | 默认值 | 说明 |
|---|---|---|
--external-ip string | 1.1.1.1 | 用作连通性测试外部目标的 IPv4 |
--external-ipv6 string | 2606:4700:4700::1111 | 用作外部目标的 IPv6 |
--external-other-ip string | 1.0.0.1 | 用作第二个外部目标的 IPv4 |
--external-other-ipv6 string | 2606:4700:4700::1001 | 用作第二个外部目标的 IPv6 |
--external-cidr string | 1.0.0.0/8 | 用作外部目标的 IPv4 CIDR |
--external-cidrv6 string | 2606:4700:4700::/96 | 用作外部目标的 IPv6 CIDR |
--external-target string | one.one.one.one. | 用作外部目标的域名 |
--external-other-target string | k8s.io. | 用作第二个外部目标的域名 |
--external-target-ca-name string | cabundle | 外部目标的 CA Secret 名称 |
--external-target-ca-namespace string | 测试命名空间 | 外部目标 CA Secret 所在命名空间 |
--external-target-fake-dns | false | 在通配符测试中使用 DNS 覆盖外部目标 |
--external-target-ipv6-capable | false | 外部目标是否支持 IPv6 |
--retry uint | 3 | 外部目标连接失败时的重试次数 |
--retry-delay duration | 3s | 外部目标重试间隔 |
需要注意的是,离线或隔离环境(无法访问外网)中应通过--external-target、--external-ip等参数将外部目标替换为集群可达的地址,否则相关测试会失败。在 connectivity.go 中可以看到,若未显式指定--external-target-ca-namespace,测试工具会自动将 CA Secret 命名空间设为当前测试命名空间。
2.5 请求与镜像选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--connect-timeout duration | 2s | 允许建立连接的最大时间 |
--request-timeout duration | 10s | 允许单个请求完成的最大时间 |
--curl-image string | quay.io/cilium/alpine-curl:v1.10.0@sha256:... | curl 镜像路径 |
--curl-insecure | false | 向 curl 传递--insecure |
--curl-parallel uint | 0 | curl 命令中的并行请求数(0 表示禁用) |
--dns-test-server-image string | registry.k8s.io/coredns/coredns:v1.14.7@sha256:... | 用作 DNS 测试服务器的 CoreDNS 镜像 |
--echo-image string | gcr.io/k8s-staging-gateway-api/echo-advanced:v20251204-v1.4.1 | echo server 镜像 |
--json-mock-image string | quay.io/cilium/json-mock:v1.4.1@sha256:... | json mock 镜像 |
--frr-image string | quay.io/frrouting/frr:10.7.1@sha256:... | FRR(BGP 测试)镜像 |
--socat-image string | docker.io/alpine/socat:1.8.1.3@sha256:... | 组播测试使用的 socat 镜像 |
--test-conn-disrupt-image string | quay.io/cilium/test-connection-disruption:v0.0.18@sha256:... | 连接中断测试镜像 |
--print-image-artifacts | false | 打印使用的镜像工件列表 |
这些镜像默认值定义在 cilium-cli/defaults 中,通过ConnectivityCheckImagesTest、ConnectivityCheckOptionalImagesTest等映射提供给参数绑定(见 connectivity.go)。使用--print-image-artifacts可以快速列出测试将要拉取的所有镜像,便于在离线环境中提前同步。
2.6 Hubble 流校验与故障排查选项
cilium connectivity test深度集成了 Hubble,用于对测试期间的流量进行验证与排障:
| 选项 | 默认值 | 说明 |
|---|---|---|
--hubble | true | 自动使用 Hubble 进行流校验与故障排查 |
--hubble-server string | localhost:4245 | 用于流校验的 Hubble 端点地址 |
--flow-validation string | warning | 启用 Hubble 流校验,取值{ disabled \| warning \| strict } |
--all-flows | false | 流校验期间打印所有流 |
--print-flows | false | 为每个测试打印流日志 |
--flow-validation的三种模式含义为:disabled关闭流校验;warning仅告警不判定失败;strict将流校验失败视为测试失败。配合--print-flows或--all-flows,可以在某个测试失败时直接查看相关数据包的 Hubble 流记录,快速判断丢包点(被策略丢弃、被 BPF 程序 drop、还是加密链路异常等)。
2.7 连接中断(Conn Disrupt)测试选项
连接中断测试用于在流量持续运行的同时触发节点/代理重启、IPsec XFRM 错误等扰动,从而度量 Cilium 升级或故障切换期间的连接中断情况:
| 选项 | 默认值 | 说明 |
|---|---|---|
--include-conn-disrupt-test | false | 包含连接中断测试 |
--include-conn-disrupt-test-egw | false | 包含 Egress Gateway 场景的连接中断测试 |
--include-conn-disrupt-test-l7-traffic | false | 包含 L7 流量的连接中断测试 |
--include-conn-disrupt-test-ns-traffic | false | 包含 NS(命名空间)流量的连接中断测试 |
--conn-disrupt-test-setup | false | 设置连接中断测试依赖 |
--conn-disrupt-dispatch-interval duration | 0 | TCP 报文分发间隔 |
--conn-disrupt-client-timeout duration | 0 | 连接中断客户端单请求超时,超时后退出(0 使用客户端默认值) |
--conn-disrupt-test-restarts-path string | /tmp/cilium-conn-disrupt-restarts | 连接中断测试临时结果文件(内部使用) |
--conn-disrupt-test-xfrm-errors-path string | /tmp/cilium-conn-disrupt-xfrm-errors | 连接中断测试 XFRM 错误临时结果文件(内部使用) |
2.8 失败处理与 JUnit 报告
| 选项 | 默认值 | 说明 |
|---|---|---|
--collect-sysdump-on-failure | false | 测试失败后收集 sysdump |
--junit-file string | 空 | 生成 JUnit 报告并写入文件 |
--junit-property map | 空 | 向生成的 JUnit 文件添加 key=value 属性 |
JUnit 报告机制在 suite.go 中有专门设计:收集器在套件运行前就创建,即使测试在 setup/校验阶段失败中止,也会生成一个非空报告,并通过 deferredWrite将合成失败写入磁盘——保证 CI 无论在哪一阶段失败都能产出cilium-junits工件。
2.9 sysdump 相关选项
启用--collect-sysdump-on-failure后,可用以下选项控制 sysdump 的采集范围(默认针对 Cilium 各组件 Pod 的标签选择器均与标准 Helm 安装一致):
| 选项 | 默认值 | 说明 |
|---|---|---|
--sysdump-cilium-bugtool-flags stringArray | 空 | 传递给cilium-bugtool的可选标志集 |
--sysdump-cilium-daemon-set-label-selector string | k8s-app=cilium | 定位 Cilium DaemonSet 的标签 |
--sysdump-cilium-label-selector string | k8s-app=cilium | 定位 Cilium Pod 的标签 |
--sysdump-cilium-envoy-label-selector string | k8s-app=cilium-envoy | 定位 Cilium Envoy Pod 的标签 |
--sysdump-cilium-operator-label-selector string | io.cilium/app=operator | 定位 Cilium operator Pod 的标签 |
--sysdump-cilium-node-init-selector string | app=cilium-node-init | 定位 cilium-node-init Pod 的标签 |
--sysdump-cilium-namespace string | 继承--namespace | Cilium 所在命名空间 |
--sysdump-cilium-helm-release-name string | 继承--helm-release-name | Cilium Helm release 名称 |
--sysdump-cilium-spire-agent-selector string | app=spire-agent | 定位 spire-agent Pod 的标签 |
--sysdump-cilium-spire-server-selector string | app=spire-server | 定位 spire-server Pod 的标签 |
--sysdump-cilium-spire-namespace string | 空 | Cilium SPIRE 安装所在命名空间 |
--sysdump-clustermesh-apiserver-label-selector string | k8s-app=clustermesh-apiserver | 定位 clustermesh-apiserver Pod 的标签 |
--sysdump-clustermesh-generate-certs-label-selector string | k8s-app=clustermesh-apiserver-generate-certs | 定位证书生成 Pod 的标签 |
--sysdump-hubble-label-selector string | k8s-app=hubble | 定位 Hubble Pod 的标签 |
--sysdump-hubble-relay-labels string | k8s-app=hubble-relay | 定位 Hubble Relay Pod 的标签 |
--sysdump-hubble-ui-labels string | k8s-app=hubble-ui | 定位 Hubble UI Pod 的标签 |
--sysdump-hubble-flows-count int | 10000 | 采集的 Hubble 流数量(0 表示禁用) |
--sysdump-hubble-flows-timeout duration | 5s | 采集 Hubble 流的超时时间 |
--sysdump-cni-config-directory string | /etc/cni/net.d/ | CNI 配置所在目录 |
--sysdump-cni-configmap-name string | cni-configuration | CNI ConfigMap 名称 |
--sysdump-collect-logs-from-not-ready-agents | true | 是否从未就绪的 Cilium agent Pod 采集日志 |
--sysdump-copy-retry-limit int | 100 | 文件拷贝操作重试上限(-1 表示无限重试) |
--sysdump-debug | false | 是否启用调试日志 |
--sysdump-detect-gops-pid | false | 是否自动检测 gops agent PID |
--sysdump-extra-label-selectors stringArray | 空 | 追加的标签选择器,用于采集额外 Pod 日志 |
--sysdump-logs-limit-bytes int | 1073741824 | 采集日志的字节上限 |
--sysdump-logs-since-time duration | 8760h0m0s | 采集日志的时间回溯范围 |
--sysdump-node-list string | 空 | 按逗号分隔的节点 IP/名称,过滤采集 gops 与日志的 Pod |
--sysdump-output-filename string | cilium-sysdump-<ts> | 结果文件名(不含扩展名),<ts>为时间戳占位符 |
--sysdump-profiling | true | 是否采集 profiling 数据 |
--sysdump-quick | false | 快速模式(跳过cilium-bugtool输出与日志采集) |
--sysdump-tetragon-helm-release-name string | 空 | Tetragon Helm release 名称 |
--sysdump-tetragon-label-selector string | app.kubernetes.io/name=tetragon | 定位 Tetragon Pod 的标签 |
--sysdump-tetragon-operator-label-selector string | app.kubernetes.io/name=tetragon-operator | 定位 Tetragon operator Pod 的标签 |
--sysdump-tetragon-namespace string | kube-system | Tetragon 所在命名空间 |
--sysdump-tracing | false | 是否采集 tracing 数据 |
--sysdump-worker-count int | 20 | 使用的 worker 数(低于有效下限时会自动上调,默认等于可用 CPU 数) |
3. 性能测试:cilium connectivity perf
3.1 基本用法
cilium connectivity perf [flags]perf子命令用于测试集群网络的吞吐、延迟与 QoS 表现。从 connectivity.go 的PreRunE可以看出,执行 perf 测试时工具会自动强制params.Perf = true、params.ForceDeploy = true并关闭 Hubble(params.Hubble = false),复用与test相同的 RunE 执行链路;同时若指定了--report-dir会预先创建报告目录,而请求内核 profile 但未指定--report-dir时会告警并跳过该项。
3.2 测试维度选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--throughput | true | 运行吞吐测试 |
--throughput-multi | true | 运行多流吞吐测试 |
--rr | true | 运行 RR(Request-Response,请求-响应/延迟)测试 |
--crr | false | 运行 CRR(Connection Request-Response,连接型请求-响应)测试 |
--udp | false | 运行 UDP 测试 |
--bandwidth | false | 测试 Pod 网络带宽管理 |
--net-qos | false | 测试 Pod 网络服务质量(QoS) |
--host-net | true | 测试主机网络 |
--pod-net | true | 测试 Pod 网络 |
--pod-to-host | false | 测试 Pod 到主机流量 |
--host-to-pod | false | 测试主机到 Pod 流量 |
--same-node | true | 运行客户端与服务端在同一节点的测试 |
--other-node | true | 运行客户端与服务端在不同节点的测试 |
3.3 运行参数选项
| 选项 | 默认值 | 说明 |
|---|---|---|
--duration duration | 10s | 性能测试运行时长 |
--setup-delay duration | 0 | 性能测试开始前的额外延迟 |
--samples int | 1 | 性能采样次数(每个测试运行多少次) |
--streams uint | 4 | 多流测试的并行度 |
--msg-size int | 1024 | UDP 测试使用的消息大小(字节) |
--report-dir string | 空 | 以 JSON 格式保存性能结果到该目录 |
--performance-image string | quay.io/cilium/network-perf:3.21-...@sha256:... | 性能测试镜像 |
--node-selector-server string | cilium.io/no-schedule!=true | server Pod(以及同节点 client)的节点选择器 |
--node-selector-client string | cilium.io/no-schedule!=true | 跨节点 client Pod 的节点选择器 |
--namespace-labels map | 空 | 为测试命名空间添加标签 |
--test-namespace string | cilium-test | 执行测试的命名空间(同样会追加序号) |
--tolerations strings | 空 | 追加到测试 Pod 的额外 NoSchedule 容忍 |
-d, --debug | false | 显示调试信息 |
--print-image-artifacts | false | 打印使用的镜像工件 |
--unsafe-capture-kernel-profiles | false | 测试期间采集内核 profile(警告:仅可在一次性节点上运行,会安装额外软件并修改其配置) |
关于默认节点选择器,源码注释(connectivity.go)给出了明确解释:默认值排除了未运行 Cilium 的节点(带cilium.io/no-schedule!=true标签,例如通过cilium install --nodes-without-cilium安装的场景),因为这类节点上 perf Pod 永远不会 Ready——agent-not-ready的 NoExecute 污点只有在节点上运行了 Cilium Pod 后才会被移除。需要刻意将 Pod 调度到这类节点时,可自行覆盖该选择器。
3.4 perf 与 test 的共享基础设施
perf与test都通过 registerCommonFlags 注册共享标志(--debug、--tolerations、--test-namespace、--namespace-labels、--print-image-artifacts),且最终都走同一个RunE。测试套件的选择由 builder.GetTestSuites 根据参数决定:params.Perf为真时加载性能相关测试构建器(如 network_perf.go、network_qos.go、network_bandwidth_limit.go),否则加载连通性测试构建器集合。
4. 底层运行机制:从命令到测试套件
理解命令背后的执行链路,有助于解释参数的实际作用。
4.1 参数解析与测试过滤
cilium connectivity test的 flags 全部绑定到 check.Parameters 结构体。测试筛选逻辑位于RunE(connectivity.go):每个--test表达式被编译为正则,!前缀进入SkipTests,其余进入RunTests,随后由测试运行框架按正则匹配具体测试与 Scenario(如/pod-to-cidr)。
4.2 并发与命名空间隔离
--test-concurrency大于 1 时,newConnectivityTests 会为每个并发实例创建独立的ConnectivityTest:
- 测试命名空间被追加序号(如
cilium-test-1、cilium-test-2),第一个命名空间同时承载共享资源; - 外部部署端口
ExternalDeploymentPort(8190)与 echo server 主机端口EchoServerHostPort(4000)会按实例索引递增,避免端口冲突; - 每个实例在独立 goroutine 中执行
SetupAndValidate与Run(见 suite.go),并通过runner.MultiError汇总错误。
4.3 测试套件的组装
suite.go 中,builder.GetTestSuites返回一组测试构建函数;每个构建函数向ConnectivityTest注册大量具体测试(Pod-to-Pod、Pod-to-Service、Pod-to-CIDR、DNS、L7 HTTP、TLS/SNI、Egress Gateway、IPsec 加密、BGP 控制面等),随后执行静态路由设置、运行测试、收集 JUnit 报告并清理。这些测试构建器集中存放在 cilium-cli/connectivity/builder,策略清单(如 allow-all-egress、deny-all-ingress、client-egress-l7-http 等)通过go:embed从 manifests 目录嵌入二进制,测试执行时会动态下发这些 CiliumNetworkPolicy。
4.4 超时与取消
--timeout大于 0 时,RunE会为整个套件创建带 cause 的context.WithTimeoutCause(connectivity.go),超时信息为 "connectivity test suite timeout (%s) reached";同时通过signal.NotifyContext监听 SIGINT/SIGTERM,实现 Ctrl-C 优雅取消。取消/超时后会打印 "Cancellation request (...) received, cancelling tests..." 并中止后续测试。
5. 典型实战场景
5.1 快速验证集群连通性(默认套件)
cilium connectivity test该命令会创建cilium-test命名空间,部署 client/echo/DNS 等测试工作负载,运行默认的连通性、策略与 DNS 测试,并借助 Hubble(默认开启)以warning模式校验流量。
5.2 只关注特定场景
# 只运行 pod-to-pod 相关测试 cilium connectivity test --test '/pod-to-pod' # 运行除加密测试外的所有测试 cilium connectivity test --test '!encryption' # 跳过所有与 DNS 相关的测试 cilium connectivity test --test '!dns'5.3 单节点环境限制测试范围
cilium connectivity test --single-node限制在单节点上可运行的测试,适合 Minikube、Kind 单节点集群或资源受限环境。
5.4 失败即中断并保留现场
cilium connectivity test --pause-on-fail --collect-sysdump-on-failure失败时暂停执行,并自动收集 sysdump(含 Hubble 流、cilium-bugtool 输出、各组件日志),便于人工介入排查。
5.5 CI 集成:JUnit 报告
cilium connectivity test --junit-file cilium-junit.xml \ --junit-property job_name=nightly \ --exit-zero-on-failure产出 JUnit 报告供 CI 平台解析;--exit-zero-on-failure可按需让流水线在存在失败时仍返回 0(例如需要继续执行后续归档步骤的场景)。
5.6 性能基线测试
# 运行默认性能测试(吞吐 + 多流吞吐 + RR,双节点与同节点场景) cilium connectivity perf # 追加 UDP 与 CRR 测试,采样 3 次,结果落盘为 JSON cilium connectivity perf --udp --crr --samples 3 --report-dir ./perf-results # 只测 Pod 网络吞吐,时长 30s,4 流并行 cilium connectivity perf --throughput --pod-net --host-net=false --duration 30s --streams 4--report-dir指定的目录会保存 JSON 格式的性能结果,便于跨版本对比(如 Cilium 升级前后的吞吐/延迟变化)。
5.7 清理测试工件
cilium connectivity test --cleanup在不运行任何测试的情况下,删除连通性测试创建的所有命名空间、Deployment 与 Service。该模式在 suite.go 中优先处理:一旦检测到CleanupOnly,立即执行清理并返回。
6. 使用建议与注意事项
- 外部目标可达性:默认外部目标(
1.1.1.1、one.one.one.one.、k8s.io.等)依赖公网访问。离线环境或受限网络务必通过--external-target、--external-ip、--external-cidr等参数替换为内网可达地址,否则 to-cidr / to-fqdns 类测试必然失败。 - Hubble 依赖:
--hubble默认开启,流校验需要集群中已部署并启用 Hubble(含 Relay,端口localhost:4245)。未启用 Hubble 的集群可设置--hubble=false或--flow-validation=disabled。 - 镜像拉取:测试依赖 curl、CoreDNS、echo、FRR、socat、network-perf 等多个第三方镜像。首次运行前可先执行
--print-image-artifacts查看完整镜像清单,确保集群可以拉取或在离线环境提前导入。 - 性能测试资源:
--unsafe-capture-kernel-profiles会修改节点配置并安装额外软件,只能在可丢弃的专用节点上使用。 - 多集群场景:
--multi-cluster <context>支持跨集群连通性测试,用于 Cluster Mesh 场景下的服务发现与策略互通验证。 - 版本匹配:
--assume-cilium-version与--k8s-version用于在自动探测失败或需要模拟特定版本行为时显式指定版本。
7. 总结
cilium connectivity命令族把"连通性校验"与"性能测试"两类高频运维动作统一封装,配合 Hubble 流校验、JUnit 报告、sysdump 自动采集与正则化测试筛选,构成了从"发现问题 → 缩小范围 → 导出证据"的完整排查闭环。其命令实现位于 cilium-cli/cli/connectivity.go,测试编排核心位于 cilium-cli/connectivity/suite.go,测试套件构建器与策略清单则分别存放于 cilium-cli/connectivity/builder 与 cilium-cli/connectivity/tests,读者可按需深入研读源码,进一步理解每个测试场景对应的数据路径与策略语义。
【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考