当另一台设备连接到网络时,“ip 地址”输出中这个额外条目的含义/原因是什么?

当另一台设备连接到网络时,“ip 地址”输出中这个额外条目的含义/原因是什么?

我最近想建立一个EspressIf边界路由器适用于我的网络。刷新设备并让其启动后,我网络上的单机 Kubernetes 主机重新启动了其所有 pod(!)。

经过一番挖掘,我发现这是由网络变化引起的:

microk8s.daemon-apiserver-kicker[1653]: 检测到 CSR 变更。重新配置 kube-apiserver

我可以通过--bind-address=0.0.0.0在 Kubernetes 中设置显式来防止这种情况发生,但是我试图了解为什么启动边界路由器(我希望它只是网络上的另一个设备)会触发 Kubernetes 认为应该重新启动所有 pod 的操作。

ip address在启动 BR 之前和之后运行了一次,不同之处在于下面的这个新条目enp2s0f0

2: enp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 3c:7c:3f:f2:08:b1 brd ff:ff:ff:ff:ff:ff
    // The two lines below are new
    inet6 fdde:ad00:beef:cafe:3e7c:3fff:fef2:8b1/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 1702sec preferred_lft 1702sec

我无法理解这个条目的真正含义(特别是,它为什么会出现,以及它对本地网络有何影响,以了解 Kubernetes 是否过于激进或者重新启动是否是合理的操作)。

我的第一个想法是,也许 BR 包含一个 DHCP 服务器。我确实找到了一些 DHCP 设置并关闭了它们,但没有什么变化(我怀疑可能是针对 Thread 端的?)。

答案1

观察到的症状的可能原因是:在启动同一 LAN 上的 IPv6 路由器后,LAN 中的某个节点(恰好运行 microk8s)上出现了一个新的 IPv6 地址,这是因为路由器发送了路由器通告(RA)作为详见 RFC 4861关于邻居发现协议:

邻居发现定义了五种不同的 ICMP 数据包类型:一对路由器请求和路由器通告消息 [...]

  • 路由器通告:路由器定期或响应路由器请求消息来通告其存在以及各种链路和 Internet 参数。路由器通告包含用于确定另一个地址是否共享同一链路(链路上确定)和/或地址配置的前缀、建议的跳数限制值等。

Linux 系统在收到 RA 后在接口上添加了一个新的 IPv6 地址。这旨在在低级别内置(不需要 DHCPv6):当配置为接受 RA在内核中处理这个问题(“DNS RA选项”可能除外),然后进行相关RFC 4862(IPv6 无状态地址自动配置):

自动配置的下一阶段涉及获取路由器通告或确定不存在路由器。如果存在路由器,它们将发送路由器通告,指定主机可以执行哪种自动配置。[...]

由于路由器会定期生成路由器通告,因此主机会不断收到新的通告。主机会如上所述处理每个通告中包含的信息,添加和刷新先前通告中收到的信息。

看来,microk8s 在处理 IPv6 时也会对此类网络配置更改做出反应(这是合理的),但在 OP 的案例中,这会中断正在运行的 pod(这不太合理)。我不知道 OP 特定设置的这种反应是可以预料的还是应该被视为错误。

相关内容