跳转至

eBPF 调试

在部署 Balancing 后,可检测如下内容,确认 Balancing 工作符合预期。

eBPF map 作用

map_service
    记录了为每一个 service 生成的访问入口规则,为 port、nodeport、Loadbalancer、externalIP 分别都会生成一条记录 

map_backend
    记录了每一个后端 endpoint 的转发地址,每一个 endpoint 都会有一个记录,如果是nodePort 场景,记录数量再翻倍

map_affinity
    存储客户端亲和记录,实现会话亲和性

map_nat_record
    记录了 nat 链路追踪

map_node_proxy_ip
    记录了 节点的 id 和 ip 的映射 , 用于其它表格在查询时进行 id 和 ip 之间的索引

map_node_ip
    记录了每一个 node 的 ip ,用于匹配 nodePort 场景下的 目的 ip

map_configure
    ebpf 程序的实时工作配置

节点 eBPF 检查

# 在主机如下目录,挂载了 eBPF map
ls /sys/fs/bpf/balancing/
# 输出示例
map_affinity  map_backend  map_configure  map_event  map_nat_record  map_node_ip  map_node_proxy_ip  map_service

# 使用如下命令能够查询到 balancing eBPF map
bpftool map

# 主机如下目录挂载了 cgroup v2
ls /sys/fs/cgroup
# 输出示例
cgroup.controllers  cgroup.stat  cpuset.cpus.isolated  dev-mqueue.mount  io.prio.class  memory.reclaim  proc-sys-fs-binfmt_misc.mount  system.slice

# 使用如下命令能够查询到 balancing 加载的 cgroup_sock_addr 类型的 eBPF Program
bpftool prog

# 使用如下命令能够查询到 balancing 把 eBPF Program 关联到了 cgroup v2
bpftool cgroup tree /run/balancing/cgroupv2

# 主机上查看 eBPF 程序打印出的日志
bpftool prog tracelog
# 或
cat /sys/kernel/debug/tracing/trace_pipe

确认 Balancing agent 日志

# 查询 agent pod 的负载均衡解析事件日志
kubectl logs -n elf balancing-agent-q727g | grep "formatted ebpf event" | jq .

对象

如下这些对象的 id, 都是用在 ebpf 的 map 中代表相关对象

# 确认每一个节点,都被标记了如下 ID 唯一的 annotation
kubectl get nodes -o jsonpath='{.items[*].metadata.annotations}' | jq .
# 输出示例
{
  "balancing.elf.io/nodeId": "596592060",
  "balancing.elf.io/nodeProxyIpv4": "192.168.0.10",
  ...
}
# 所有的 balancingpolicies ,都有一个唯一的 id
kubectl get balancingpolicies -o jsonpath='{.items[*].metadata.annotations}' | jq .
# 输出示例
{
  "balancing.elf.io/serviceId": "20003",
  ...
}
# 所有的 localredirectpolicies ,都有一个唯一的 id
kubectl get localredirectpolicies -o jsonpath='{.items[*].metadata.annotations}' | jq .
# 输出示例
{
  "balancing.elf.io/serviceId": "10091",
  ...
}

查看 eBPF 中的数据

进入 agent pod 中,可使用 inspect 命令查看 eBPF map 中的数据。

# 查询所有 ebpf map 中的数据
inspect showMapData all

# 追踪指定 service 相关的 ebpf map 数据
inspect traceMapData service $namespace $serviceName

# 追踪指定 localredirectpolicies 相关的 ebpf map 数据
inspect traceMapData localRedirect $namespace $policyName

# 追踪指定 balancingpolicies 相关的 ebpf map 数据
inspect traceMapData balancing $namespace $serviceName