ARTICLE DETAIL

资讯详情

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

Cilium 互信认证排查利器:cilium-dbg bpf auth list 命令详解与 BPF 认证映射原理

Cilium 互信认证排查利器:cilium-dbg bpf auth list 命令详解与 BPF 认证映射原理 Cilium 互信认证排查利器cilium-dbg bpf auth list 命令详解与 BPF 认证映射原理【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读cilium-dbg bpf auth list是 Cilium 提供的一条用于**列出所有已认证连接authenticated connections**的调试命令它直接读取节点本地 BPF 映射cilium_auth_map展示任意两个身份Identity之间已完成认证的条目及其过期时间。本文以 cilium-dbg bpf auth list 命令参考 为主体结合仓库源码与示例配置带你掌握该命令的完整用法、输出字段含义、底层映射结构以及在基于 SPIRE 的 Cilium 互信认证mutual authentication场景中的实战定位方法。命令概览管理身份间的已认证连接在 Cilium 的 eBPF 数据面中当策略要求两个端点之间的流量必须经过认证如基于 SPIFFE/SPIRE 的 mTLS 认证时认证结果会被记录到内核侧的cilium_auth_map中。cilium-dbg bpf auth子命令族正是面向该映射的管理入口cilium-dbg bpf auth list列出所有已认证连接本命令cilium-dbg bpf auth flush删除所有已认证连接条目详见 cilium-dbg bpf auth flush。其上一级命令cilium-dbg bpf的定位是Direct access to local BPF maps直接访问本地 BPF 映射说明这组命令是在节点上直连 BPF 映射的底层排障工具与通过 API 查看状态的用户态命令不同。完整命令树可参考 cilium-dbg bpf。基本语法cilium-dbg bpf auth list [flags]命令的用途Synopsis与长描述Long均为 List all authenticated connections between identities列出所有身份之间已认证的连接。需要注意的是命令实际运行时需要 root 权限——源码中在命令入口处显式调用了common.RequireRootPrivilege(cilium bpf auth list)见 bpf_auth_list.go。可用选项Options选项说明-h, --help显示 list 子命令的帮助信息-o, --output string输出格式可选json、yaml或jsonpath{}--output选项由command.AddOutputOption(bpfAuthListCmd)注入见 bpf_auth_list.go支持将结果以 JSON/YAML 结构化输出便于脚本解析。继承自父命令的选项--config string 配置文件默认 $HOME/.cilium.yaml -D, --debug 启用调试消息 -H, --host string URI 形式的服务端 API 地址 --log-driver strings 日志端点例如 syslog --log-opt map 日志驱动选项例如 formatjson这些选项与cilium-dbg主命令一致用于指定配置文件、调试开关、API 地址及日志配置。实战用法与输出解读在任一运行了 Cilium Agent 的节点上以 root 身份执行cilium-dbg bpf auth list该命令的别名是ls因此cilium-dbg bpf auth ls与完整写法等价见 bpf_auth_list.go。表格式输出当映射中存在条目时命令以制表符对齐的表格输出由text/tabwriter渲染见 printAuthListSRC IDENTITY DST IDENTITY REMOTE NODE ID AUTH TYPE EXPIRATION 123 456 2 spire 2026-09-11 23:28:49 0000 UTC各列含义如下列名含义数据来源SRC IDENTITY本地身份 IDLocalIdentityAuthKey.LocalIdentityDST IDENTITY远端身份 IDRemoteIdentityAuthKey.RemoteIdentityREMOTE NODE ID远端节点 IDRemoteNodeIDAuthKey.RemoteNodeIDAUTH TYPE认证类型如 spireAuthKey.AuthType经policy.AuthType(...)转字符串EXPIRATION认证条目的过期时间AuthInfo.Expiration其中 AUTH TYPE 列的展示值由policy.AuthType的String()方法决定见 pkg/policy/types/auth.godisabled数值 0无需认证spire数值 1基于 SPIFFE 身份、由 SPIRE server 提供的互信认证类型test-always-fail数值 2总是拒绝请求的简单认证类型测试用。过期时间Expiration在映射中实际存储为内核时间格式utime.UTime输出时通过val.Expiration.Time()转换为 Go 的time.Time见 bpf_auth_list.go。结构化输出需要将结果交给脚本或监控系统时可指定输出格式cilium-dbg bpf auth list -o json cilium-dbg bpf auth list -o yaml cilium-dbg bpf auth list -o jsonpath{.items[*].LocalIdentity}源码中定义的结果对象authEntry字段包括LocalIdentityuint32、RemoteIdentityuint32、RemoteNodeIDuint16、AuthTypeuint8和Expirationtime.Time见 bpf_auth_list.go。空映射与异常场景当映射中没有任何条目时命令向 stderr 输出No entries found.而非报错见 bpf_auth_list.go。此时说明当前没有处于有效认证期的连接——这可能是正常的例如未启用认证策略也可能意味着认证始终失败、条目从未写入。当本机找不到cilium_auth_mapBPF 映射时fs.ErrNotExist命令输出Cannot find auth bpf map并直接返回见 bpf_auth_list.go。这种情况通常出现在 Agent 尚未初始化该映射或命令运行在非 Cilium 节点上。加载映射或遍历映射失败时会以Fatalf终止并输出相应错误信息。底层原理cilium_auth_map 映射结构映射加载list命令通过authmap.LoadAuthMap(log)打开名为cilium_auth_map的 BPF 映射见 auth_map.go。源码注释明确指出该加载入口主要供Cilium CLI这类无法使用 Hive 框架的组件使用映射必须先由 Cilium Agent 初始化见 auth_map.go。键AuthKey四元组映射的键AuthKey由四个维度组成见 auth_map.go字段对齐名类型说明LocalIdentitylocal_sec_labeluint32本地安全身份 IDRemoteIdentityremote_sec_labeluint32远端安全身份 IDRemoteNodeIDremote_node_iduint16远端节点 IDAuthTypeauth_typeuint8认证类型Padpaduint8填充字节保证对齐即每个条目唯一标识(本地身份, 远端身份, 远端节点, 认证类型)四元组。源码中特别强调AuthKey必须与 bpf/lib/common.h 中的struct auth_key保持内存布局一致这是 eBPF 数据面与用户态共享数据结构的核心约定。值AuthInfo映射的值AuthInfo仅含一个字段Expirationutime.UTime类型表示该认证条目的过期时间见 auth_map.go。它同样要求与bpf/lib/common.h中的struct auth_info保持同步。认证条目带有 TTL过期后数据面会要求重新认证从而保证身份证书/信任关系发生变更时能够被及时感知。认证类型与策略关联认证类型的定义位于 pkg/policy/types/auth.go三种取值中spire是生产可用的互信认证类型它借助 SPIFFE 身份体系由 SPIRE server 为工作负载签发身份并完成双向认证。策略侧还会把认证要求AuthRequirement连同是否为显式要求的高位标志一并编码进 BPF 策略映射供数据面直接判读。实战场景结合认证策略排查启用互信认证的策略示例仓库提供了启用 mutual authentication 的完整示例 cnp-with-mutual-auth.yaml核心片段如下apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: mutual-auth-echo spec: endpointSelector: matchLabels: app: echo ingress: - fromEndpoints: - matchLabels: app: pod-worker authentication: mode: required toPorts: - ports: - port: 3000 protocol: TCP rules: http: - method: GET path: /headers该策略要求app: pod-worker的端点访问app: echo的 3000 端口HTTP GET /headers时必须先完成认证authentication.mode: required。三步排障法确认认证是否发生在 Agent 节点上执行cilium-dbg bpf auth list若能查到源/目的身份对应的spire条目说明认证已成功且记录仍在有效期内若输出No entries found.则需要进一步检查 SPIRE 部署与 Agent 的认证配置。定位具体身份对结合cilium-dbg identity list获取工作负载对应的身份 ID再对照输出中的SRC IDENTITY/DST IDENTITY列确认目标条目。检查过期与刷新观察EXPIRATION列若条目频繁过期且流量出现间歇性认证延迟可评估认证相关配置与证书轮换周期是否匹配。与 flush 命令配合若怀疑认证缓存状态异常可先用cilium-dbg bpf auth flush清空全部条目再观察业务流量触发重新认证后cilium-dbg bpf auth list能否正常重建条目以此区分认证机制本身故障与缓存陈旧两类问题。小结cilium-dbg bpf auth list是一条直连 BPF 映射的底层调试命令它以(本地身份, 远端身份, 远端节点, 认证类型)为键展示认证条目的类型与过期时间支持表格、JSON、YAML 及 jsonpath 输出并与 flush 命令共同构成 Cilium 互信认证的完整排障工具链。理解其背后的cilium_auth_map结构auth_map.go、认证类型定义auth.go以及策略示例cnp-with-mutual-auth.yaml能帮助你快速定位基于 SPIRE 的 mTLS 认证问题准确判断认证是否生效、条目是否过期以及缓存是否需要清理。【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表