这是一个网络问题,主要涉及到 Linux Bridge,还涉及一点点 K8S (但我个人认为,这个问题可能呢和 K8S 本身无关)
先说一下背景吧
我用 linux bridge,配置 k8s 的 cni,将容器 IP,与宿主机 规划到大二层环境下。目的是,让容器 IP 不再是虚拟 IP。这样一来,Java 应用,也可以将容器 IP 暴露到注册中心。搭建完集群后,容器的 IP 访问什么的,都没有问题。但是我在抓包的时候,遇到一个现象。
比如说,有 3 个 K8S 的节点,分别是 A、B、C。
A 上有容器:a1、a2
B 上有容器:b1、b2。
C 上有容器:c1、c2。
我的期望是,在 b1 上抓包,只能抓到这个容器自己网络下的包。但实际上不是。
问题是,我在 B 节点的 b1 容器上抓包,居然可以抓到 A 主机发到 A 主机上的 a1 容器的包。
K8S 版本 1.13.7,CNI 都是官方的。没有任何定制化内容。google 和 baidu 完全找不到相关的问题描述。
1
choury 2019-08-26 11:46:44 +08:00
你这 3 个母机是怎么连接的?上面是用集线器互通的?
|
2
hanse OP @choury 是这样的,有一个背景我没有说。其实是生产环境有问题,生产环境,这 3 台物理机,是挂到一个交换机下的。因为生产环境有问题,我又在公司开发环境,起来 3 个 kvm 实例,发现依然是有这个问题。
|
3
choury 2019-08-26 12:39:35 +08:00 via Android
那你用的什么网络方案? overlay ?哪个 cni 插件?
|
4
shuaizi 2019-08-26 12:52:13 +08:00
具体是什么报文?是持续收到吗?
其他配置正确的情况下,有两种情况在 b1 上可能会收到这样的报文 1. 广播报文 2. 本地 linux bridge 还没有学习到这个目的 mac 地址,也会做广播处理(向所有端口复制发送一份报文) |
5
hanse OP @choury 网络方案没有虚拟网络,因为我的目的就是去除虚拟化,做到容器和宿主机在同一个大二层。网络方案,用的 bridge 网络。插件就是 CNI 官方的 bridge。
|
6
hanse OP |
7
tempdban 2019-08-26 14:15:50 +08:00 via Android
交换机端口 mac 表老化,广播报文了。
正常现象 |
9
hanse OP |
10
shuaizi 2019-08-27 10:08:10 +08:00
mac 表老化应该不是 hard_timeout,是持续 300s 都收不到这个目的 mac 的报文才会清除。
|