Cilium `cilium-dbg lrp list` 命令全解析:查看与验证 Local Redirect Policy 的必备工具
Ciliumcilium-dbg lrp list命令全解析查看与验证 Local Redirect Policy 的必备工具【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/ciliumcilium-dbg lrp list是 Cilium 提供的用于列出本地重定向策略Local Redirect PolicyLRP的命令行工具。在配置了 LRP 的集群中它让你能够直观地看到每条策略的前端地址、匹配的 Kubernetes Service 以及策略选中的 node-local 后端 Pod 映射关系是验证策略是否生效、排查 DNS 缓存不生效等问题时的第一手排查入口。读完本文你将掌握该命令的完整用法、输出字段含义、源码级实现原理以及它在 Local Redirect Policy 生命周期中与cilium-dbg service list搭配使用的实战技巧。命令概览与语法cilium-dbg lrp list属于cilium-dbg lrp命令族用于在 Cilium agent 本地查看当前节点上已被该 agent 处理的全部 Local Redirect Policy。命令本身不接收任何位置参数语法如下cilium-dbg lrp list [flags]其作用可用一句话概括——列出本地重定向策略List local redirect policies。在集群环境中通常需要进入 Cilium agent Pod 后执行$ kubectl exec -it -n kube-system cilium-pod -- cilium-dbg lrp list子命令选项选项说明-h, --help显示list子命令的帮助信息-o, --output string指定输出格式支持json、yaml、jsonpath{}从父命令继承的全局选项选项说明--config string配置文件路径默认为$HOME/.cilium.yaml-D, --debug启用调试消息-H, --host string服务端 API 的 URI用于连接远程 agent--log-driver strings日志输出端点例如syslog--log-opt map日志驱动选项例如formatjson输出格式解析从表格到结构化数据默认的表格输出不带任何选项执行时命令通过 Go 标准库text/tabwriter输出对齐的表格。表头固定为四列LRP namespace LRP name FrontendType Matching Service真实运行输出示例来自 NodeLocal DNS 场景见 local-redirect-policy.rst 的排障章节$ kubectl exec -it cilium-mhnhz -n kube-system -- cilium-dbg lrp list LRP namespace LRP name FrontendType Matching Service kube-system nodelocaldns clusterIP all svc ports kube-system/kube-dns | 10.96.0.10:53/UDP - 10.244.1.49:53(kube-system/node-local-dns-72r7m), | 10.96.0.10:53/TCP - 10.244.1.49:53(kube-system/node-local-dns-72r7m),注意输出中的细节策略主体命名空间、名称、前端类型、匹配 Service占据首行随后每个以|开头缩进的续行是该策略下每一个前端Frontend到后端Backend的映射格式为前端IP:前端端口/协议 - 后端IP:后端端口(后端Pod命名空间/后端Pod名称)例如10.96.0.10:53/UDP - 10.244.1.49:53(kube-system/node-local-dns-72r7m)表示发往10.96.0.10:53/UDP的流量将被重定向到 Podnode-local-dns-72r7m的10.244.1.49:53。结构化输出json / yaml / jsonpath通过-o选项可以获得便于脚本解析的结构化数据$ cilium-dbg lrp list -o json $ cilium-dbg lrp list -o yaml $ cilium-dbg lrp list -o jsonpath{.items[*].name}结构化输出中的每个策略对象字段如下对应 API 模型 l_r_p_spec.goJSON 字段类型含义frontend-mappings数组前端到 Pod 后端的映射列表对应FrontendMapping模型 frontend_mapping.gofrontend-typestringLRP 前端类型如address、clusterIP、clusterIP all svc ports等lrp-typestringLRP 配置类型addressMatcher/serviceMatchernamestringLRP 名称namespacestringLRP 所在命名空间service-idstring匹配的 Kubernetes Service 的命名空间与名称格式为namespace/nameuidstring唯一标识其中frontend-mappings数组中的每个元素包含frontend-addressIP、端口、协议以及backends列表每个后端包含 IP、端口以及对应的 Pod ID即namespace/pod-name。这些正是默认表格输出中-前后内容的来源。源码级实现一次 API 调用 两层渲染从源码结构看cilium-dbg lrp list的完整调用链非常清晰可分为三层第一层命令注册cilium-dbg/cmd/lrp.govar LRPCmd cobra.Command{ Use: lrp, Short: Manage local redirect policies, } func init() { RootCmd.AddCommand(LRPCmd) }lrp是根命令的直接子命令lrp list别名为ls在其下注册并在init()中通过command.AddOutputOption(lrpListCmd)挂接-o/--output选项。第二层API 客户端调用cilium-dbg/cmd/lrp_list.go 与 pkg/client/lrp.gofunc listLRPs(cmd *cobra.Command, args []string) { list, err : client.GetLRPs() if err ! nil { Fatalf(Cannot get lrp list: %s, err) } ... }client.GetLRPs()通过 REST API 调用 agent 的GetLrp端点超时由api.ClientTimeout控制返回[]*models.LRPSpec。这意味着lrp list展示的是当前连接的 Cilium agent 节点上已同步的策略视图——在多节点集群中不同节点可能因策略下发时序不同而展示出略有差异的结果这正是排障时需要在对应节点上执行的原因。第三层输出渲染cilium-dbg/cmd/lrp_list.gofunc printLRPList(w *tabwriter.Writer, list []*models.LRPSpec) { fmt.Fprintln(w, LRP namespace\tLRP name\tFrontendType\tMatching Service) for _, lrp : range list { entry : fmt.Sprintf(%s\t%s\t%s\t%s, lrp.Namespace, lrp.Name, lrp.FrontendType, lrp.ServiceID) fmt.Fprintln(w, entry) for _, feM : range lrp.FrontendMappings { fmt.Fprintf(w, \t|\t%s\n, getPrintableMapping(feM)) } } w.Flush() }渲染逻辑分为两步先输出策略主行namespace、name、frontend-type、service-id 四列再遍历该策略的FrontendMappings用getPrintableMapping把每个前端映射格式化为IP:端口/协议 - IP:端口(PodID)的可读字符串以|前缀续行打印。若指定了-o选项则跳过表格渲染直接输出 JSON/YAML/jsonpath。前置背景理解 LRP 才能读懂输出lrp list的输出字段与 Cilium 的 Local Redirect Policy 功能一一对应。LRP 通过CiliumLocalRedirectPolicyCRD 配置利用 eBPF 将发往特定 IP:端口/协议 元组或 Kubernetes Service 的 Pod 流量重定向到节点本地node-local的后端 Pod。LRP 支持两种匹配方式详见 local-redirect-policy.rstAddressMatcherlrp-type: address按 IP 地址 L4 端口/协议 匹配流量典型用途是拦截如169.254.169.254:8080/TCP这样的非 Service 地址。当多个前端端口通过toPorts指定时端口必须命名端口名用于前端端口与后端端口的映射。ServiceMatcherlrp-type: service按 Kubernetes Service 名称与命名空间匹配流量Service 必须为clusterIP类型。策略生效后原ClusterIPService 条目会被替换为类型为LocalRedirect的新条目且后端只能是节点本地 Pod。对应地lrp list输出中的FrontendType列会显示address、clusterIP、clusterIP all svc ports等取值Matching Service列显示namespace/service-name而frontend-mappings则精确揭示了前端 → 节点本地后端 Pod的重定向关系。实战用lrp list验证策略生效与排障cilium-dbg lrp list最典型的实战价值体现在验证策略是否正确下发到 agent、以及定位重定向不生效的问题上。场景一Node-local DNS 缓存排障在 Cilium 集群中启用 NodeLocal DNSCache 后如果应用 Pod 的 DNS 解析出现异常官方排障流程见 local-redirect-policy.rst建议按如下顺序检查确认 node-local-dns Pod 运行正常$ kubectl --namespace kube-system get pods --selectork8s-appnode-local-dns NAME READY STATUS RESTARTS AGE node-local-dns-72r7m 1/1 Running 0 2d2h node-local-dns-gc5bx 1/1 Running 0 2d2h用cilium-dbg lrp list检查 LRP 是否正确应用到了 agent$ kubectl exec -it cilium-mhnhz -n kube-system -- cilium-dbg lrp list LRP namespace LRP name FrontendType Matching Service kube-system nodelocaldns clusterIP all svc ports kube-system/kube-dns | 10.96.0.10:53/UDP - 10.244.1.49:53(kube-system/node-local-dns-72r7m), | 10.96.0.10:53/TCP - 10.244.1.49:53(kube-system/node-local-dns-72r7m),看到策略条目且 FrontendType 为clusterIP all svc ports、Mapping 中的后端指向 node-local-dns Pod即代表策略已被该节点 agent 接受并完成前后端映射。用cilium-dbg service list交叉验证重定向 Service 条目$ kubectl exec -it cilium-mhnhz -n kube-system -- cilium-dbg service list | grep LocalRedirect 11 10.96.0.10:53 LocalRedirect 1 10.244.1.49:53 (active)若lrp list中策略存在但service list中缺少对应的LocalRedirect条目官方文档提示可能存在策略应用与 node-local-dns DaemonSet Pod 资源之间的竞态条件race condition可尝试重启 node-local-dns DaemonSet Pod 作为临时规避手段。场景二AddressMatcher 策略验证使用 AddressMatcher 类型时lrp list会展示前端为原始 IP:端口 元组的映射。例如针对169.254.169.254:8080的地址匹配策略FrontendType列会显示为addressfrontend-mappings中前端为169.254.169.254:8080/TCP后端为被localEndpointSelector选中的节点本地 Pod。配合该节点上的cilium-dbg service list可以看到LocalRedirect类型条目如4 172.20.0.51:80 LocalRedirect 1 10.16.70.187:80。场景三ServiceMatcher 策略验证ServiceMatcher 策略生效后原ClusterIP条目会被替换为LocalRedirect类型条目。lrp list的Matching Service列会显示被匹配的 Service如my-serviceFrontendType显示clusterIP或clusterIP all svc portsMapping 中后端为策略选中的节点本地 Pod。注意cilium-dbg service list需要在与后端 Pod 同一节点的 Cilium Pod 中运行才能看到该LocalRedirect条目。使用注意事项与限制节点视图语义lrp list展示的是所连接 agent 节点上的策略视图并非集群全局视图。多节点排查时应在相关节点如后端 Pod 所在节点的 Cilium Pod 内执行。更新语义Local Redirect Policy 目前不支持原地更新如需变更请删除旧策略并重新创建见 local-redirect-policy.rst 的 Limitations 章节。已有连接不受影响策略只对生效后新建的连接生效已有的匹配连接不会自动被重定向必要时需重启客户端 Pod。与skipRedirectFromBackend的联动若策略启用了skipRedirectFromBackend要求内核 5.12 支持SO_NETNS_COOKIE从 Cilium 1.16.0 起需要删除旧策略及被选中的后端 Pod 后重新创建才能生效lrp list可用于确认重建后的策略状态。前置条件LRP 功能需要 Helm 配置localRedirectPolicies.enabledtrue且 CRDciliumlocalredirectpolicies.cilium.io已注册负载均衡实现上支持 socket-level 与 tc 两种具体取决于kubeProxyReplacement与socketLB的组合配置详见 local-redirect-policy.rst 的 Prerequisites 章节。参考与延伸阅读命令父级cilium-dbg lrp 帮助文档Manage local redirect policies命令实现源码cilium-dbg/cmd/lrp_list.go、cilium-dbg/cmd/lrp.goAPI 客户端实现pkg/client/lrp.goAPI 数据模型api/v1/models/l_r_p_spec.go、api/v1/models/frontend_mapping.goLocal Redirect Policy 完整指南含 AddressMatcher / ServiceMatcher 的 CRD 配置示例、NodeLocal DNSCache 部署与排障Documentation/network/kubernetes/local-redirect-policy.rstLRP 相关示例清单examples/kubernetes-local-redirect/后端实现pkg/loadbalancer/redirectpolicy/【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →