拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Cilium 安全身份(Security Identity)管理实战:cilium-dbg identity 命令全解析

Cilium 安全身份Security Identity管理实战cilium-dbg identity 命令全解析【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读本文围绕 Cilium 数据路径安全模型中的核心抽象——安全身份Security Identity——展开完整讲解cilium-dbg identity命令族的用法、参数与输出格式。你将掌握如何通过标签或 ID 查询身份、如何列出全量身份及本地端点身份、如何用 JSON/YAML/jsonpath 输出对接自动化脚本并理解这些命令背后的 REST API 调用链与 Cilium 身份分配机制。什么是 Cilium 安全身份Security Identity在 Cilium 中安全策略的判定并不直接针对 IP 地址或 Kubernetes Pod 名称而是基于安全身份Security Identity。每个端点Endpoint根据其安全标签集合Security Labels被赋予一个全局唯一的身份 ID网络策略NetworkPolicy、可观测性标签均围绕该身份展开。cilium-dbg identity子命令族正是用于管理和查询这些身份的入口它位于 cilium-dbg/cmd/identity.go其命令定义如下var IdentityCmd cobra.Command{ Use: identity, Short: Manage security identities, }从源码结构看identity是一个纯分组命令Group Command自身不执行任何操作真正的功能由其两个子命令承担子命令作用文档cilium-dbg identity get根据标签或 ID 检索单个/一组身份信息cilium-dbg_identity_get.mdcilium-dbg identity list列出全部身份或列出本节点管理的端点身份cilium-dbg_identity_list.mdcilium-dbg identity 全局使用说明命令语法与选项cilium-dbg identity [flags] cilium-dbg identity [command]identity命令自身仅有一个选项选项说明-h, --help显示 identity 命令的帮助信息继承自父命令的全局选项所有cilium-dbg子命令包括identity都会继承一组持久化persistent选项定义于 cilium-dbg/cmd/root.go选项说明--config string配置文件路径默认$HOME/.cilium.yaml对应 root.go 中vp.SetConfigName(.cilium)与vp.AddConfigPath($HOME)的查找逻辑-D, --debug启用调试日志输出-H, --host string服务端 API 的 URI即 Cilium Agent 的 API 地址对应 root.go 中clientPkg.NewClient(vp.GetString(host))的客户端初始化--log-driver strings日志输出端点例如syslog--log-opt map日志驱动选项例如formatjson其中--host值得特别说明cilium-dbg是一个与本地 Cilium Agent 交互的 CLIroot.go 中声明CLI for interacting with the local Cilium Agent所有身份查询最终都通过 HTTP 请求发往 Agent 暴露的 REST API。默认情况下它会尝试连接本机 Agent跨节点或远程调试场景下需要显式指定--host。配置文件的加载逻辑root.go 中的initConfig依次为读取--config指定文件 → 读取$HOME/.cilium.yaml→ 读取CILIUM_*前缀的环境变量vp.SetEnvPrefix(cilium)vp.AutomaticEnv()。按 ID 或标签检索身份cilium-dbg identity get命令格式cilium-dbg identity get [flags]get子命令支持两种互补的查询方式其分发逻辑位于 cilium-dbg/cmd/identity_get.go按标签查询通过--label参数传入一个或多个标签按 ID 查询将身份 ID 作为位置参数传入。对应源码实现Run: func(cmd *cobra.Command, args []string) { if len(lookupLabels) 0 { params : identityApi.NewGetIdentityParams().WithLabels(lookupLabels).WithTimeout(api.ClientTimeout) if id, err : client.Policy.GetIdentity(params); err ! nil { Fatalf(Cannot get identity for labels %s: %s\n, lookupLabels, err) } else { printIdentities(id.Payload) } } else { if len(args) 1 || args[0] { Usagef(cmd, Invalid identity ID) } params : identityApi.NewGetIdentityIDParams().WithID(args[0]).WithTimeout(api.ClientTimeout) if id, err : client.Policy.GetIdentityID(params); err ! nil { Fatalf(Cannot get identity for given ID %s: %s\n, args[0], err) } else { printIdentities([]*models.Identity{id.Payload}) } } },按标签查询--labelcilium-dbg identity get --label label [--label label ...]选项说明--label strings要查询的标签可重复指定多个标签共同构成查询条件取交集-o, --output string输出格式json、yaml或jsonpath{}当传入标签时命令通过GetIdentityParams().WithLabels(...)调用 REST 端点GET /identity携带标签集合查询与之精确匹配的身份。--label是StringSliceVar类型的 flag见 identity_get.go可以像下面这样重复使用# 查询同时携带 appweb 与 zoneprod 标签的身份 cilium-dbg identity get --label appweb --label zoneprod按 ID 查询cilium-dbg identity get identity-id不指定任何--label时命令将第一个位置参数当作身份 ID通过GetIdentityIDParams().WithID(args[0])调用 REST 端点GET /identity/{id}。ID 无效缺失或为空时源码会调用Usagef(cmd, Invalid identity ID)报错并展示用法。输出内容get输出的是models.Identity结构定义于 api/v1/models/identity.go其字段包括字段JSON 键说明IDid唯一的身份标识int64Labelslabels描述该身份的一组标签LabelsSHA256labelsSHA256标签集合的 SHA256 摘要用于身份校验与一致性比对表格输出中printIdentitiesidentity_get.go使用text/tabwriter按ID与LABELS两列排版第一行输出 ID 与该身份的第一个标签后续标签换行缩进对齐输出。列出身份cilium-dbg identity list命令格式cilium-dbg identity list [LABELS] [flags]list子命令别名ls有两种列出现模式分发逻辑位于 cilium-dbg/cmd/identity_list.go选项说明--endpoints仅列出本节点本地管理的端点所拥有的身份-o, --output string输出格式json、yaml或jsonpath{}-h, --help帮助信息列出全部身份cilium-dbg identity list不带任何参数时命令调用GET /identity拉取整个身份空间的全量身份列表若提供了位置参数LABELS则通过params.WithLabels(args)附加标签过滤条件仅返回匹配这些标签的身份。返回结果按 ID 排序后输出im : cache.IdentitiesModel(identities.Payload) sort.Slice(im, im.Less) printIdentities(identities.Payload)身份列表的排序逻辑复用了 pkg/identity/cache 中的IdentitiesModel.Less比较器保证输出顺序稳定、便于 diff 和脚本处理。列出本地端点身份--endpointscilium-dbg identity list --endpoints--endpoints模式调用的是GET /identity/endpoints端点见 identity_list.go返回的是本节点上仍被端点引用引用计数 0的身份与全量身份列表的区别在于全量列表包含集群范围所有已知身份即使本地没有活跃端点--endpoints列表只包含本地活跃端点正在使用的身份并额外输出每个身份的REFCOUNT引用计数。models.IdentityEndpoints定义于 api/v1/models/identity_endpoints.go由Identity与RefCount两个字段构成字段JSON 键说明Identityidentity安全身份详情ID、Labels、LabelsSHA256RefCountrefCount本地消费该身份的端点数量规范保证始终 0该模式的表格输出printIdentitesEndpointsidentity_list.go列头为ID、LABELS、REFCOUNT三列方便排查某身份在本地仍被多少个端点引用。位置参数 LABELS 的过滤用法list的位置参数[LABELS]与get --label的语义一致——传入的标签会被组装进GET /identity请求的参数中实现按标签过滤。例如# 列出所有身份全量 cilium-dbg identity list # 仅列出带有 k8s:appweb 标签的身份 cilium-dbg identity list k8s:appweb注意--endpoints模式会忽略位置参数直接拉取本地端点身份列表。结构化输出json、yaml 与 jsonpathget与list均支持通过-o, --output切换结构化输出其实现统一收敛在 pkg/command/output.gofunc PrintOutputWithType(data any, outputType string) error { if outputType json { return dumpJSON(data, ) } if outputType yaml { return dumpYAML(data) } if re.MatchString(outputType) { return dumpJSON(data, re.ReplaceAllString(outputType, $1)) } return fmt.Errorf(couldnt find output printer) }取值效果json输出格式化 JSONjson.MarshalIndent缩进 2 空格yaml输出 YAMLjsonpath{}输出 JSON并用 jsonpath 表达式过滤字段{}内为表达式例如jsonpath{.items[*].id}例如# 输出全部身份的 JSON cilium-dbg identity list -o json # 输出全部身份的 YAML cilium-dbg identity list -o yaml # 仅提取所有身份 IDjsonpath 过滤 cilium-dbg identity list -o jsonpath{.items[*].id}注意OutputOptionStringoutput.go会将yaml识别为YAML、json/jsonpath识别为JSON非法的输出格式会直接报错退出。实战场景与排查技巧场景一根据 Kubernetes 工作负载标签反查身份 ID在编写或核对 Cilium NetworkPolicy 时常需要确认某组工作负载对应的身份 ID# 反查 appweb 工作负载的身份 ID cilium-dbg identity get --label k8s:appweb # 输出为 JSON 便于程序解析 cilium-dbg identity get --label k8s:appweb -o json场景二根据身份 ID 反查标签当监控/日志中只出现身份 ID例如identity1234时可用 ID 反查其标签快速定位身份对应的工作负载cilium-dbg identity get 1234场景三审计本节点端点身份与引用排查哪些身份仍被本节点端点使用或身份是否泄漏/残留时使用--endpointscilium-dbg identity list --endpoints该命令返回的REFCOUNT能直观反映每个身份被多少本地端点消费若某个身份引用计数异常如长期不为 0可进一步结合cilium-dbg endpoint list定位具体端点。场景四跨节点/远程 Agent 调试cilium-dbg默认连接本地 Agent若需查询其他节点的身份信息通过--host指定目标 Agent 的 API 地址cilium-dbg --host agent-api-uri identity list相关命令与进一步阅读身份命令的上层入口为 cilium-dbgCLI更多运维命令可参考 cmdref 目录与身份密切相关的底层数据面操作cilium-dbg bpf identity list查看 eBPF 映射中的身份条目cilium-dbg identity则是控制面 API 层视图端点视角cilium-dbg endpoint list可查看每个端点的身份 ID 与其标签两者结合即可完整还原端点 ↔ 身份 ↔ 标签的映射关系身份分配的底层实现可进一步阅读 pkg/identity 与 pkg/identity/cache理解IdentitiesModel排序、身份缓存与引用计数的运作细节。小结cilium-dbg identity是 Cilium 身份体系中最直接的观测入口get支持标签→身份与ID→身份双向检索list提供全量视图与本地端点视图配合-o json/yaml/jsonpath可无缝对接脚本与自动化平台。理解其背后的 REST APIGET /identity、GET /identity/{id}、GET /identity/endpoints与Identity/IdentityEndpoints数据模型将帮助你在排障与策略审计时快速定位问题。【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门