amazon-web-services - 如何将 AWS 流量从容器 A 镜像到容器 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
.
容器 eth 接口是否限制捕获镜像数据包?我应该使用常规 ENI 以外的东西作为镜像目标吗?
解决方案
附加到 EC2 实例的 ENIS 位于根命名空间中。每当创建新 pod 时,都会使用暂停容器为该 pod 创建一个新命名空间,并且该 pod 中的所有容器都是该命名空间的一部分。
因此,在使用 VPC 流量镜像时,来自一个 ENI 的流量将被镜像到连接到 EC2 实例的另一个 ENI,但镜像目标 ENI 不会将这些网络推送到位于不同命名空间中的 POD 的虚拟接口。
作为一种解决方法,在 EKS 的情况下,我为容器部署了一个带有 hostNetwork: true 参数的 pod,该 pod 能够访问主机的所有接口,并且 tcpdump 还显示了所有 pod 流量。
请尝试这种方法并检查这种方法是否适合您的用例。
示例 Pod manifest yaml 供参考
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
hostNetwork: true
containers:
- name: nginx
image: nginx
推荐阅读
- python - Python 多处理和组合 DF
- powershell - 从 Powershell 脚本更改 MSBuild 属性
- python - 为什么这个正则表达式不删除'\'和'-'?
- unity3d - 在开发自己的游戏时如何阅读和使用 Unity Doc Scripting API?
- python - Pepper 和 NAO 机器人的远程视频流
- javascript - 未捕获的类型错误:无法读取 null 的属性“addEventListener”无法弄清楚原因
- c# - Cefsharp 75 中的已下载项目不再显示图标
- couchbase - 查询以过滤必须具有数组所有值的结果
- javascript - 如何使用 node.js 使用 Gremlin 发布边缘
- python - 在 Python3-x 中解码字节数组