kubernetes 如何跟踪远程二进制文件?

9udxz4iz  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(90)

我正在寻找一种方法来将Kubernetes pod上的二进制文件流式传输(“tail”)到我的本地机器。
我试过了:
第一个月
tcpdumper只是tcpdump的一个薄薄的 Package ,它在pod中作为一个helper容器运行)。
这几乎可以工作了。当我运行这个命令时,我可以在我的本地机器上查看一个二进制数据流。
我在这里尝试做的最终目标是,我想把这个pcap数据的二进制流通过管道传输到运行在我机器上的Wireshark。这就是不起作用的地方,这是因为数据并不完全是写在pod上的数据。
不过,这与Kubernetes或数据包捕获无关。问题似乎在于我如何使用tail流式传输此数据;当我以这种方式执行此操作时,tail似乎添加了换行符。我认为这是因为tail不打算处理二进制数据。
如果我直接在pod上运行tcpdump,将其写入.pcap文件,然后使用kubectl cp传输该文件,然后将该文件加载到Wireshark中,它可以工作,我可以查看网络流量。我可以使用十六进制编辑器看到此方法与上面的tail方法之间的区别在于存在无关字符(“0xD”,这是换行符)每隔一段时间。
有什么想法吗?

zf2sa74q

zf2sa74q1#

我不知道是什么导致tail随机插入换行符,我不能复制你的问题,但我有几个想法:
1:base64在服务器上对写入的文件进行编码,在本地机器上读取时进行解码。
2:不要写文件,试着写FIFO(mkfifo),你可以简单地cat,而不是tailing。
在不了解你的情况下,我真的不能明智地谈论这些是否适用于你的情况,但认为它们值得一提。

xhv8bpkk

xhv8bpkk2#

我发现这个问题与kubectl输出有关,而不是tail本身添加了新行。
kubectl exec -it [pod_name] -c [container] -- bash -c "/usr/sbin/tcpdump -n -w - 2>/dev/null" | LC_ALL=C tr -d '\n' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -
这里简要说明一些主要组件:

  1. /usr/sbin/tcpdump -n -w - 2>/dev/null:写入stdout,但抑制tcpdump控制台输出,这将干扰到wireshark的流式传输。
  2. LC_ALL=C tr -d '\n',删除换行符并使用C语言,这样我们就可以对二进制流进行操作。
  3. /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -:打开wireshark(macOS)并立即从stdout开始捕获。

相关问题