【发布时间】:2023-01-02 12:11:47
【问题描述】:
是否有任何命令或任何东西可以找到来自 pod 的所有传出流量。
【问题讨论】:
-
问题略有变化我想找到传出流量的所有 IP。
-
你的问题解决了吗?如果是,您能否提供您遵循的解决步骤并将其作为答案提供给社区以提高知名度。
是否有任何命令或任何东西可以找到来自 pod 的所有传出流量。
【问题讨论】:
也许这会有所帮助:https://kubeshark.co/。您可以查看所有流量并在任何现有集群上运行它,几乎不需要准备。
【讨论】:
要找到您的应用程序与之通信的所有 IP 地址,您必须捕获 pod 网络接口上的网络流量。这可以使用tcpdump来完成。捕获后,可以使用 tcpdump 或 wireshark 等 GUI 工具轻松读取。
如果你有能力在运行的容器上安装 tcpdump,你可以下载并运行它。例如:
apt-get install tcpdump
然后捕获并以 .pcap 格式保存文件
tcpdump -w 0001.pcap -i eth0
要读取和分析捕获的数据包 0001.pcap 文件,请使用带有 -r 选项的命令
tcpdump -r 0001.pcap
您可以将 .pcap 文件导出到本地工作区并在 wireshark(可以理解 pcap)上打开它,而不是使用 tcpdump 读取。这将为您提供一个漂亮的界面。
如果您无法在容器上下载 tcpdump,则必须将其包含在镜像中。(这会给镜像增加不必要的膨胀)
其他选项如下所述:
斯尼夫
https://github.com/eldadru/ksniff - Kubectl 插件可以使用 tcpdump 和 wireshark 轻松嗅探 kubernetes pod
Ksniff 作为一个 kubectl 插件发布,允许使用 tcpdump 和 Wireshark 用于捕获集群中特定 pod 上的流量。 Ksniff 使用 kubectl 将 tcpdump 二进制文件(数据包嗅探器)上传到 目标容器,并将输出重定向到 Wireshark 实例 在你的机器上运行。
这个博客解释更多 - https://kubesandclouds.com/index.php/2021/01/20/ksniff/
临时调试容器
k8s(来自 k8s v1.23)提供了一种将临时容器附加到正在运行的 pod 并运行调试实用程序的方法。
kubectl -n myns debug -i nginx-9456bbbf9-97gjc --image=nicolaka/netshoot –-target=nginx -- tcpdump -i eth0 -w - | wireshark -k -i ---这里的target是要调试的容器。
此命令会将包含 tcpdump 的容器附加到 pod 并捕获 eth0 接口上的流量。然后将捕获的数据通过管道传输到检查的 wireshark。
【讨论】: