泊坞窗 – stream量镜像

我有2个不同的运行容器。 我希望能够将容器#1的stream量镜像到容器#2中。

有没有一个docker的命令呢?

stream量镜像是可能的Linux接口,我不相信docker提供了一个方法来设置,虽然。 镜像应该通过veth接口泊坞窗为每个容器设置,如果你手动添加。

交通pipe制

tc允许您以多种方式pipe理stream量,通常用于服务质量types排队。 tc还提供mirror操作。 以下内容匹配所有入站和出站stream量,并将其镜像到另一个接口。

 tc qdisc add dev vethb692b75@if13 ingress tc filter add dev vethb692b75@if13 parent ffff: \ protocol all prio 2 u32 \ match u32 0 0 flowid 1:1 \ action mirred egress mirror dev veth4305fdd@if15 tc qdisc replace dev vethb692b75@if13 parent root handle 10: prio tc filter add dev vethb692b75@if13 parent 10: \ protocol all prio 2 u32 \ match u32 0 0 flowid 10:1 \ action mirred egress mirror dev veth4305fdd@if15 

IP表

iptables可以将克隆的数据包转发给可路由的主机。 这通常用于将stream量镜像到外部主机。

 iptables -t mangle -I PREROUTING -i vethb692b75@if13 -j TEE --gateway <monitor_ip> iptables -t mangle –I POSTROUTING -i vethb692b75@if13 -j TEE --gateway <monitor_ip> 

tcpdump的

由于Linux世界中的大多数networking监控软件都是在tcpdump中进行处理的,因此您也可以将主机的接口tcpdump转储到安装在监控容器中的fifo。

 mkfifo /tmp/remotecapture.fifo tcpdump -s 0 -n -w - -U -i vethb692b75@if13 > /tmp/remotecapture.fifo docker run -v /tmp/remotecapture.fifo:/tmp/remotecapture.fifo <image> netmonitor -f /tmp/remotecapture.fifo 

笔记

veth名称分配给每个容器启动,因此捕获将需要成为您的容器启动/停止过程的一部分。 您想删除集装箱站点上的任何规则。

在stream量转发到某个地方的情况下,收件人容器/主机不应该将这些数据包中的任何一个路由回到原始目的地。

如果将容器#2设置为容器#1的反向代理更容易

这意味着容器#2会查看所有stream量并将其发送到容器#1

你可以使用容器#2 traefik.io/ 。 这是为了负载平衡,但在你的情况下,你可以定义只有一个后端(所以没有负载平衡那里)引用容器#1。
你可以很容易地构build一个traefik容器(例如, 参见这个Dockerfile ,用于arm架构)