我在 AWS 上运行 EKS 集群,最近出现了周期性中断。我追踪到问题出在我的一个节点上重复的网络接口,我认为这是由AWS CNI 插件。
创建节点时,它有 2 个 NIC。但在节点生命周期的某个时候,创建了第三个 NIC(不是我创建的),这会导致奇怪的行为。看起来它rp_filter
正在拒绝来自 ELB 的数据包,因为 SYN 数据包在日志中显示messages
为 martian。
我应该补充一点,这似乎只发生在注释为service.beta.kubernetes.io/external-traffic: OnlyLocal
当我分离第三个 NIC 时,一切恢复正常。
我的问题是
- 为什么第三个 NIC 可能导致此问题?这是 CNI 中的错误吗?
- 我该如何解决这个问题?
- 有什么方法可以阻止连接第 3 个 NIC?
- 有什么方法可以配置 CNI以便正确连接第 3 个 NIC?我是否以某种方式错误地配置了 EKS?
一些证据:
netstat -s
显示IPReversePathFilter: 666179
并针对来自 ELB 的每个 SYN 精确地增加一。
tail /var/log/messages
显示火星数据包如下
Nov 22 18:37:17 ip-192-168-90-83 kernel: IPv4: martian source 192.168.102.150 from 192.168.236.246, on dev eth0
Nov 22 18:37:17 ip-192-168-90-83 kernel: ll header: 00000000: 0e 76 b3 cc 10 f4 0e 6f 51 60 fa be 08 00 .v.....oQ`....
当我设置时rp_filter=0
,来自 ELB 的 SYN 就不会再被丢弃,而且我看到 SYN-ACK 朝 ELB 前进,但它们从未到达那里。