十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Cilium 运维实战:cilium-operator-generic troubleshoot clustermesh 远程集群连通性排查指南

Cilium 运维实战:cilium-operator-generic troubleshoot clustermesh 远程集群连通性排查指南 Cilium 运维实战cilium-operator-generic troubleshoot clustermesh 远程集群连通性排查指南【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读在 Cilium 的 Cluster Mesh 多集群场景下跨集群的 etcd 数据面如节点、身份、服务信息同步依赖 operator 与远端clustermesh-apiserver建立的连接。当多集群同步异常、跨集群 Service 不可达时cilium-operator-generic troubleshoot clustermesh是首选的诊断工具它直接读取/var/lib/cilium/clustermesh/下的每集群 etcd 配置逐个执行解析、拨号、TLS 证书与鉴权检查并输出人可读的诊断报告。读完本文你将掌握该命令的全部参数、输出语义、底层检查链路以及如何将其用于实战排障。命令概览与适用场景该命令定义于 cilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go由 operator 通过 operator/cmd/root.go 注册到cilium-operator-generic的troubleshoot子命令树中cilium-operator-generic troubleshoot clustermesh [clusters...] [flags]命令语义为Troubleshoot connectivity towards remote clusters排查到远端集群的连通性。它适用于以下典型场景Cluster Mesh 已启用但跨集群服务Global Service无法访问operator 日志中出现与远端 clustermesh-apiserver 同步失败的错误远端集群 apiserver 地址、证书或认证信息变更后需要验证升级 Cilium 或重新生成集群配置后需要确认所有远端 etcd 配置是否仍然有效。从源码结构看该命令与cilium-dbg中的同名命令共用同一套实现逻辑cilium-operator-generic侧仅通过troubleshoot.DisableLocalNameLookup true见 operator/cmd/root.go关闭了本地集群名称的自动查询因为 operator 并不直接持有 Cilium Agent 的 API 客户端。参数说明参数类型默认值说明clusters...位置参数全部集群要排查的集群名列表不指定则排查配置目录下的所有集群--clustermesh-configstring/var/lib/cilium/clustermesh/ClusterMesh 配置目录路径目录内每个文件对应一个远端集群的 etcd 配置-h, --help--显示帮助--timeoutduration5s检查单个集群连通性的超时时间--without-service-resolutionboolfalse禁用通过 k8s client 将 Service 名解析为 IP此时回退到静态 HostAlias 解析与系统 DNS-H, --Hstring空服务器端 API 的 URI保留字段operator 侧因本地名称查询被禁用实际影响有限这些参数在 cilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go 中完成解析其中--clustermesh-config、--timeout、--without-service-resolution三个参数与cilium-dbg版本完全一致。配置目录与每集群配置命令的核心输入是--clustermesh-config指向的配置目录。默认路径/var/lib/cilium/clustermesh/下每个文件代表一个远端集群的 etcd 连接配置文件内容为 YAML 格式的 etcd client 配置。目录扫描逻辑位于 pkg/clustermesh/common/config.go 的ConfigFiles函数它遍历目录下所有文件并通过isEtcdConfigFile判断哪些是合法的 etcd 配置文件返回map[集群名]配置路径。注意该函数注释明确说明它仅供 CLI 工具使用不处理后续配置更新——也就是说本命令读取的是静态快照排障时若配置已变更需重新执行命令。每个集群的配置文件以集群名命名基本结构如下# cluster-name 文件示例内容由 cilium clustermesh enable 自动生成 endpoints: - https://clustermesh-apiserver.cilium.svc:2379 trusted-ca-file: /var/lib/cilium/clustermesh/cluster-name.ca.crt key-file: /var/lib/cilium/clustermesh/cluster-name.key cert-file: /var/lib/cilium/clustermesh/cluster-name.crt配置目录可能不存在时的行为若目录不存在或为空例如 Cluster Mesh 尚未启用ConfigFiles返回错误命令输出Unable to retrieve cluster configurations: ... This is expected when Cluster Mesh is disabled因此该命令的输出本身就是一个快速的Cluster Mesh 是否启用、配置是否就位探测。执行流程与输出解读TroubleshootClusterMeshcilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go按以下步骤工作读取配置调用ConfigFiles列出全部集群配置文件输出Found N cluster configurations筛选集群若提供了clusters...位置参数则只处理指定集群并输出Troubleshooting filtered subset of clusters: ...否则处理全部排序对集群名排序保证多次执行输出顺序稳定逐集群检查对每个集群依次输出Cluster cluster-name: ℹ️ This entry corresponds to the local cluster # 仅当与本地集群名相同时 ❌ Invalid cluster name: ... # 集群名不符合 DNS-1123 规范时 ❌ Configuration not found # 文件名不在配置集合中 ❌ Could not parse Cilium config: ... # 配置解析失败时集群名校验复用pkg/clustermesh/types的ValidateClusterName与 Cluster Mesh 运行时的命名约束保持一致配置解析使用common.ParseCiliumConfigpkg/clustermesh/common/config.go解析出的HostAliases用于后续静态拨号。每个集群的 etcd 检查细节对每个集群命令调用kvstore.EtcdDbgpkg/kvstore/etcd_debug.go执行四类检查这也是排障信息量最大的部分 Configuration path: /var/lib/cilium/clustermesh/cluster-name Endpoints: - https://clustermesh-apiserver.cilium.svc:2379 ... Digital certificates: ... ⚙️ Etcd client: ...各段含义如下 Configuration path当前使用的配置文件路径若解析失败会输出❌ Cannot parse etcd configuration: ... Endpoints逐个端点执行解析与 TCP 拨号详见下节无端点时输出❌ No available endpoints Digital certificates解析配置文件中的 CA、证书与私钥检查 SAN/DNS 名是否与端点匹配、证书有效期等实现见 pkg/kvstore/etcd_debug.go 的etcdDbgCerts⚙️ Etcd client使用上述配置与自定义 dialer 构建 etcd v3 client然后读取HeartbeatPath心跳键做基本鉴权与连通性验证成功输出✅ Etcd connection successfully established及ℹ️ Etcd cluster ID: ...若连接处于TransientFailure状态输出❌ Failed to establish connection: ...网络层问题否则输出❌ Failed to retrieve key from etcd: ...连通但鉴权/权限问题。正是这个心跳键读取让命令能够区分网络不通与认证失败两类根因。拨号与名称解析--without-service-resolution 的作用远端 apiserver 地址通常以 Kubernetes Service 域名形式出现如clustermesh-apiserver.cilium.svc:2379需要把 Service 名解析为 IP 才能拨号。该命令使用EtcdDbgDialer接口pkg/kvstore/etcd_debug.go抽象解析与拨号默认实现DefaultEtcdDbgDialer直接使用系统net.DefaultResolver做 DNS 解析、net.Dialer做 TCP 拨号若集群配置中包含HostAliases则包装为staticEtcdDbgDialerWithFallbackcilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go命中静态映射时直接返回预设 IP未命中时回退到默认 dialer。--without-service-resolution对应源码中的disableDialer布尔变量cilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go。从代码结构看该开关的意义在于当 operator 运行在 host network不使用集群 DNS或 kube-proxy 异常、无法通过 k8s client 解析 Service 时跳过 Service→IP 解析步骤避免解析失败导致拨号检查全部误报。实战建议当出现 DNS 类报错或集群内 Service 解析不可靠时可附加该参数对比验证--timeout则用于控制慢速网络下每个集群的检查时长默认5s在跨地域多集群场景下可适当调大。实战排查步骤与结果判读1. 基础连通性快照cilium-operator-generic troubleshoot clustermesh先看Found N cluster configurations的数量是否与预期集群数一致再看每个集群是否出现✅ Etcd connection successfully established。若某个集群只有❌则按输出定位层级配置路径段失败 → 配置文件格式/路径问题Endpoints 段失败 → 网络层问题详见第 3 步Certificates 段失败 → 证书过期、SAN 不匹配或 CA 链错误Etcd client 段Failed to establish connection→ 拨号失败Failed to retrieve key→ 认证凭据错误或 RBAC 权限不足。2. 定向排查单个集群cilium-operator-generic troubleshoot clustermesh cluster-a只输出指定集群避免大量输出干扰判断。3. 网络层与超时控制cilium-operator-generic troubleshoot clustermesh --timeout 10s网络抖动或跨地域链路时延长超时观察 Endpoints 段的拨号结果。4. 绕过 Service 解析cilium-operator-generic troubleshoot clustermesh --without-service-resolution当怀疑 Service 解析CoreDNS/kube-proxy 异常干扰检查时使用。5. 指定配置目录cilium-operator-generic troubleshoot clustermesh --clustermesh-config /path/to/clustermesh在离线分析或配置落盘于非默认路径时直接指向实际目录。与其它排查入口的关系该命令与cilium-dbg troubleshoot clustermesh共享同一实现cilium-dbg/cmd/troubleshoot/troubleshoot_clustermesh.go差异仅在于 operator 侧关闭本地集群名查询operator 的troubleshoot根命令见 cilium-operator-generic_troubleshoot.md还包含对本地 kvstore 等控制面组件的检查本命令专注于远端集群若需在 agent 侧排查可参考clustermesh-apiserver的clustermesh-dbg troubleshootclustermesh-apiserver/clustermesh-dbg/troubleshoot.go其对本地 etcd kvstore 执行类似检查。小结cilium-operator-generic troubleshoot clustermesh把 Cluster Mesh 排障中最常见的四类问题——配置损坏、网络不通、证书失效、鉴权失败——收敛为一条命令、一份可读输出。结合--timeout与--without-service-resolution两个开关可以进一步隔离网络抖动与 Service 解析两类干扰因素。将它与 operator 日志、cilium-dbg troubleshoot系列命令配合使用即可系统性地定位跨集群同步链路中的绝大多数故障。【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表