BGP session 的 local address 和 bgp announce 的 next hop 的关系

14 阅读1分钟

对,不是同一个东西,但在很多场景下它们的值可能相同。

区别

概念协议层作用
BGP Session 源地址TCP/IP 层建立 BGP TCP 连接时的本地 IP(端口 179)
NextHop 属性BGP 协议层告诉邻居:要到达这个路由前缀,数据包应该发到哪个 IP

举例说明


Speaker Node: 10.0.0.1 (eth0), 192.168.1.1 (eth1)
BGP Neighbor: 10.0.0.254
宣告的 EIP: 172.19.0.5/32

场景1:单网卡/简单场景

  • BGP Session 源地址: 10.0.0.1(TCP 连接源)
  • NextHop: 10.0.0.1(路由下一跳)
  • 两者相同

场景2:多网卡/复杂路由

  • BGP Session 源地址: 10.0.0.1(管理网)
  • NextHop: 192.168.1.1(数据网,因为返回 EIP 流量走这个接口)
  • 两者不同

在 kube-ovn-speaker 中



// BGP Session 源地址(可选,由 --peer-with-local 控制)
Transport: &api.Transport{
    LocalAddress: config.getBgpLocalAddress(isIPv4),  // Pod IP 或空
}

// NextHop(自动计算,每条路由宣告时动态获取)
NextHop: c.getNextHopAttribute(neighborAddress)  // netlink.RouteGet() 获取

两者独立配置,NextHop 始终是自动计算的,不受 bgp peer local address 影响。