Kube-Debug定位工具

起因

之前逛技术博客的时候, 看了一个kubectl-debug介绍, 可以使用外部的工具, 来处理容器内部的信息, 这个能力非常有用.

因为容器制作的时候有个原则就是容器尽量的小, 导致基础镜像上连一些基础的命令都没有. 例如vi, ping这些基本的命令, 都可能要自己安装, 但是很多云环境上, 又没法正常的访问互联网, 导致严重浪费时间.

技术

实现原理说起来很简单, 就是用到容器注入的方式处理, 假设你已经启动了一个TARGET_CONTAINER容器, 它的ID为TARGET_ID, 你可以将busybox的镜像注入到TARGET_CONTAINER里面, 此时容器空间内的命令为busybox镜像所提供的, 但是网络或者进程空间全是TARGET_CONTAINER

1
2
3
export TARGET_ID=666666666
# 加入目标容器的 network, pid 以及 ipc namespace
docker run -it --network=container:$TARGET_ID --pid=container:$TARGET_ID --ipc=container:$TARGET_ID busybox

这个技术点确实很牛逼, 之前都不了解, 后面在kubernete上的实现, 就顺理成章了, 只需要通过API接口将需要的TARGET_ID查询出来, 注入镜像即可

总结

目前看这个kubectl-debug只是个人项目, 可能会有一些场景支持的并不好, 特别是各个云上的安全系统. 所以有需要可以拿过来改改代码试用一下, 如果偶尔使用的话, 直接在kubernete的节点上使用容器注入会更快和可控一点.