将调试器附加到在 K8s Pod 上运行的容器/实例?

问题描述 投票:0回答:1

从本地计算机上的 VS Code 中,我尝试将调试器附加到在容器/Pod 中运行的远程进程,或附加到附加到在容器/Pod 中运行的进程的 gdb/gdbserver。

该项目是用C++编写的,VS Code支持使用GDB调试进程。

我的拓扑如下所示:

 -----------         ---------------        ------------------------------------
| localhost | <---> | access server | <--> | worker node                        |   
| (VS Code) |       | (ubuntu box)  |      | (k8s node)  <-> POD <-> Container  |
 -----------         ---------------        ------------------------------------             

出于安全原因,必须通过“访问服务器”(又名跳转盒)访问容器/Pod。 VS Code 已配置,并且能够通过访问服务器连接到工作节点(通过 VS Code ssh 配置选项

-ProxyCommand ssh -W %h:%p Access_Server
),K8s 扩展也可以工作,并且可以查看集群信息并与其交互。

在连接方面,我可以让 VS Code 连接到工作节点,但不能连接到容器本身。调试器可以附加到正在运行的进程。

我尝试在容器上运行 gdbserver 并打开所需的端口,由于 VS Code 理论上可以连接到节点,因此它应该看到 gdbserver,但这会失败并出现不伦不类的错误。

我尝试从交互式 shell 中使用 gdb,但由于项目的性质和范围,现代 GUI 调试器确实是我成功的最佳选择。

这是我在云环境中的第一个项目,所以对我来说有点新,请不要假设我知道一些事情,如果我可能不知道你认为显而易见的事情,请提供指导。我继承了一个项目,关于 DevOps 的信息不多,这里也没有人可以询问。我尝试遵循一些指南,但我所尝试的都没有真正起作用。

在这样的设置下,最合适的调试方法是什么?

visual-studio-code kubernetes debugging containers gdbserver
1个回答
0
投票

如果您具有 KubeAPI 访问权限并且在 Linux/macOS 上运行(或可以使用 WSL),我建议您查看 https://marketplace.visualstudio.com/items?itemName=MetalBear.mirrord - 它使您能够在现有 pod 的上下文中本地运行您的进程,然后您可以将调试器附加到它(或者只是使用带有mirrord的调试器来运行它)

完全公开,我正在开发mirrord。

© www.soinside.com 2019 - 2024. All rights reserved.