从本地计算机上的 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 的信息不多,这里也没有人可以询问。我尝试遵循一些指南,但我所尝试的都没有真正起作用。
在这样的设置下,最合适的调试方法是什么?
如果您具有 KubeAPI 访问权限并且在 Linux/macOS 上运行(或可以使用 WSL),我建议您查看 https://marketplace.visualstudio.com/items?itemName=MetalBear.mirrord - 它使您能够在现有 pod 的上下文中本地运行您的进程,然后您可以将调试器附加到它(或者只是使用带有mirrord的调试器来运行它)
完全公开,我正在开发mirrord。