我有一个AWS流量镜像会话,从容器A的弹性网卡(弹性网卡)采集流量,并发送到容器B的弹性网卡。
在A内部,/sys/class/net/ eth0 /iflink输出'8',主机上的/sys/class/net/ eni123 /ifindex也输出'8',所以来自容器A的eth0在主机上是eni123的。
我可以使用tcpdump -i eni123从主机捕获指向A的镜像HTTP流量。但是来自B的eth0上的tcpdump没有捕获任何数据包。它捕获我手动从A发送到B的ping。
我用securityContext: privileged: true创建了容器B。
容器eth接口是否限制捕获镜像数据包?是否应该使用普通弹性网卡以外的其他网卡作为镜像目标?
发布于 2020-02-04 19:11:01
默认的docker网络模式是Docker Bridge,它将容器与网络隔离。
使用--net=host启动容器B,它将能够根据需要捕获网络和主机之间的流量。
发布于 2020-02-07 22:08:35
附加到EC2实例的弹性网卡在根namespace.Whenever中创建一个新的pod,使用暂停容器为该pod创建一个新的命名空间,该pod中的所有容器都是该命名空间的一部分。
因此,在使用私有网络流量镜像时,来自一个弹性网卡的流量将被镜像到连接到EC2实例的另一个弹性网卡,但镜像目标弹性网卡不会将这些网络推送到位于不同命名空间的PODs的虚拟接口。
作为一种解决方法,在EKS的情况下,我为容器部署了一个具有hostNetwork: true参数的pod,该pod能够访问主机的所有接口,并且tcpdump还显示了所有pod流量。
请尝试此方法,并检查此方法是否适合您的用例。
示例Pod清单yaml以供参考
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork: true
containers:
- name: nginx
image: nginxhttps://stackoverflow.com/questions/60009029
复制相似问题