如何将 AWS 流量从容器 A 镜像到容器 B
How to mirror AWS traffic from container A into container B
我有一个 AWS 流量镜像会话,它从容器 A 的 ENI(弹性网络接口)收集流量并将其发送到容器 B 的 ENI。
在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接口是否限制捕获镜像数据包?我应该使用常规 ENI 以外的东西作为镜像目标吗?
默认的 docker 网络模式是 Docker Bridge,它将容器与网络隔离。
使用 --net=host
启动容器 B,它将能够根据需要捕获网络和主机之间的流量。
附加到 EC2 实例的 ENIS 在根中 namespace.Whenever 创建了一个新的 pod,使用暂停容器为该 pod 创建了一个新的命名空间,并且该 pod 中的所有容器都是该 pod 的一部分命名空间。
因此,在使用 VPC 流量镜像时,来自一个 ENI 的流量将被镜像到附加到 EC2 实例的另一个 ENI,但镜像目标 ENI 不会将这些网络推送到 PODs 的虚拟接口它们在不同的命名空间中。
作为解决方法,在 EKS 的情况下,我部署了一个带有 hostNetwork: true 容器参数的 pod,并且 pod 能够访问主机的所有接口,tcpdump 还显示了所有 pod 流量。
请尝试此方法并检查此方法是否适合您的用例。
示例 Pod 清单 yaml 以供参考
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork: true
containers:
- name: nginx
image: nginx
我有一个 AWS 流量镜像会话,它从容器 A 的 ENI(弹性网络接口)收集流量并将其发送到容器 B 的 ENI。
在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接口是否限制捕获镜像数据包?我应该使用常规 ENI 以外的东西作为镜像目标吗?
默认的 docker 网络模式是 Docker Bridge,它将容器与网络隔离。
使用 --net=host
启动容器 B,它将能够根据需要捕获网络和主机之间的流量。
附加到 EC2 实例的 ENIS 在根中 namespace.Whenever 创建了一个新的 pod,使用暂停容器为该 pod 创建了一个新的命名空间,并且该 pod 中的所有容器都是该 pod 的一部分命名空间。
因此,在使用 VPC 流量镜像时,来自一个 ENI 的流量将被镜像到附加到 EC2 实例的另一个 ENI,但镜像目标 ENI 不会将这些网络推送到 PODs 的虚拟接口它们在不同的命名空间中。
作为解决方法,在 EKS 的情况下,我部署了一个带有 hostNetwork: true 容器参数的 pod,并且 pod 能够访问主机的所有接口,tcpdump 还显示了所有 pod 流量。
请尝试此方法并检查此方法是否适合您的用例。
示例 Pod 清单 yaml 以供参考
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork: true
containers:
- name: nginx
image: nginx