配置 BGP
Kube-OVN 可以使用 BGP 将 Pod 和 Subnet 路由通告到外部网络。要使用此功能,请在选定的(或所有)节点上安装 kube-ovn-speaker,并为需要从集群外部访问的 Pod 或 Subnet 添加 ovn.kubernetes.io/bgp 注解。
kube-ovn-speaker 使用 GoBGP 发布路由,并将下一跳设置为自身。
安装 kube-ovn-speaker
运行 kube-ovn-speaker 的节点必须能够承载返回流量。请为要部署 speaker 的节点添加标签:
NOTE
当运行多个 kube-ovn-speaker 实例时,每个实例都会向上游发布路由。上游路由器必须支持多路径 ECMP。
从与你的集群 Kube-OVN 版本匹配的 tag 或 branch 下载 speaker.yaml(与 kube-ovn 镜像 tag 保持一致),例如:
根据需要调整清单中的 BGP 参数。
如果你只有一个上游对等体:
如果你有一对交换机:
neighbor-address:BGP 对等体地址,通常为路由器网关。neighbor-as:BGP 对等体的自治系统号。cluster-as:容器网络的自治系统号。
应用该清单:
发布 Pod 和 Subnet 路由
对于 Subnet 的 BGP 导出,请将该 Subnet 上的 natOutgoing 设置为 false,以便 Pod IP 可以直接在底层网络上使用。
使用注解启用路由通告:
删除这些注解以停止通告:
有关注解使用不同值时的行为,请参见 通告策略。
通告策略
kube-ovn-speaker 支持两种策略:
- Cluster:即使某个节点上没有运行具有该 IP 的 Pod,也会由每个 speaker 通告 Pod IP 和 Subnet CIDR。外部流量可以进入任何运行 speaker 的节点,然后在集群内部转发。可能会产生额外跳数。Pod 和 Subnet 的默认策略均为此项。
- Local:仅由实际承载这些 Pod 的节点上的 speaker 通告 Pod IP(或其 Subnet 被标记为 BGP 的 Pod)。外部流量会落到工作负载运行的节点,从而缩短路径。
NOTE
对于 Local 策略,通常需要在每个节点上部署 kube-ovn-speaker。如果 Pod 调度到没有 speaker 的节点上,其 IP 将不会被通告。
可通过 ovn.kubernetes.io/bgp 注解为单个 Pod 或 Subnet 覆盖该策略:
ovn.kubernetes.io/bgp=cluster,或默认的ovn.kubernetes.io/bgp=yes,选择 Cluster 策略。ovn.kubernetes.io/bgp=local选择 Local 策略。
BGP 高级选项
kube-ovn-speaker 为复杂环境支持以下额外参数:
auth-password:BGP 对等体的密码。holdtime:BGP 保持时间;在此时间间隔内没有流量的邻居将被移除(默认 90 秒)。graceful-restart:启用 BGP Graceful Restart。graceful-restart-time:Graceful Restart 时间(RFC 4724 第 3 节)。graceful-restart-deferral-time:Graceful Restart 延迟时间(RFC 4724 第 4.1 节)。passivemode:speaker 仅接受连接(被动模式)。ebgp-multihop:EBGP 多跳对等体的 TTL(默认 1)。