Please enable Javascript to view the contents

gdb 调试 istio proxy (envoy)

 ·  ☕ 2 分钟

出于各种原因,需要 debug istio-proxy (envoy),记录一下步骤,希望地球上的有缘人有用。

编译生成执行文件

下载 code

我用的是 release-1.11.1-patch。

1
2
3
4
git clone https://github.com/istio/proxy.git
cd proxy
export PROXY_HOME=`pwd`
git checkout -b release-1.11.1-patch origin/release-1.11.1-patch

容器中编译

编译大项目,是个环境相关的工作。对于我这小白,还是直接用 Istio 官方 CI 的编译用的容器。好处是:

  1. 环境和 Istio 官方 一致,避免各位版本坑。理论上生成的可执行文件是一样的
  2. 内置工具,使用方便,

注:build-tools-proxy 容器 image 列表可以在 https://console.cloud.google.com/gcr/images/istio-testing/global/build-tools-proxy 获得。请对应你要编译的 istio-proxy 版本来选择 image。 以下仅以 release-1.11 为例子。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
docker run --init  --log-driver none --privileged --name istio-testing --hostname istio-testing \
    -v /etc/localtime:/etc/localtime:ro \
    -v /sys:/sys:rw \
    -v /usr/src:/usr/src:rw \
    -v /lib/modules:/lib/modules:rw \
    -v /var/run/docker.sock:/var/run/docker.sock:rw \
    -v $PROXY_HOME:/home/proxy \
    -d gcr.io/istio-testing/build-tools-proxy:release-1.14-latest-amd64 bash -c '/bin/sleep 300d'

#进入容器
docker exec -it istio-testing bash

# 开始编译
cd /home/proxy
make build BAZEL_STARTUP_ARGS='' BAZEL_BUILD_ARGS='-s  --explain=explain.txt --config=debug' BAZEL_TARGETS='//src/envoy:envoy'

进入慢长的等待,我的机器要 3 小时。。。

完成后,查看生成文件:

build-tools:/home/proxy# ls -lh /home/proxy/bazel-out/k8-dbg/bin/src/envoy/envoy
-r-xr-xr-x 1 root root 1.2G Feb 18 21:46 /home/proxy/bazel-out/k8-dbg/bin/src/envoy/envoy

debug执行文件中包含大量信息,size 很大。

启动和 debug

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#进入容器
docker exec -it istio-testing bash

#下载一个简单的 envoy 配置文件
curl -L -O https://github.com/labilezhu/pub-diy/raw/main/low-tec/trace/trace-istio/bpftrace/envoy-demo.yaml

#运行
/home/proxy/bazel-out/k8-dbg/bin/src/envoy/envoy -c envoy-demo.yaml

#调试 attach
gdb -p `pgrep envoy`

调试 Istio 网格中运行的 Envoy sidecar C++ 代码

如果你的目标不单单是个裸 Envoy,而是在 Istio 网格中运行的 istio-poxy(Envoy) ,那么这篇可能帮忙: 调试 Istio 网格中运行的 Envoy sidecar C++ 代码

分享

Mark Zhu
作者
Mark Zhu
An old developer