配置 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 的节点添加标签:

kubectl label nodes speaker-node-1 ovn.kubernetes.io/bgp=true
kubectl label nodes speaker-node-2 ovn.kubernetes.io/bgp=true
NOTE

当运行多个 kube-ovn-speaker 实例时,每个实例都会向上游发布路由。上游路由器必须支持多路径 ECMP。

从与你的集群 Kube-OVN 版本匹配的 tag 或 branch 下载 speaker.yaml(与 kube-ovn 镜像 tag 保持一致),例如:

wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.15/yamls/speaker.yaml

根据需要调整清单中的 BGP 参数。

如果你只有一个上游对等体:

- --neighbor-address=10.32.32.254
- --neighbor-ipv6-address=2409:AB00:AB00:2000::AFB:8AFE
- --neighbor-as=65030
- --cluster-as=65000

如果你有一对交换机:

- --neighbor-address=10.32.32.252,10.32.32.253
- --neighbor-ipv6-address=2409:AB00:AB00:2000::AFB:8AFC,2409:AB00:AB00:2000::AFB:8AFD
- --neighbor-as=65030
- --cluster-as=65000
  • neighbor-address:BGP 对等体地址,通常为路由器网关。
  • neighbor-as:BGP 对等体的自治系统号。
  • cluster-as:容器网络的自治系统号。

应用该清单:

kubectl apply -f speaker.yaml

发布 Pod 和 Subnet 路由

对于 Subnet 的 BGP 导出,请将该 Subnet 上的 natOutgoing 设置为 false,以便 Pod IP 可以直接在底层网络上使用。

使用注解启用路由通告:

kubectl annotate pod sample ovn.kubernetes.io/bgp=true
kubectl annotate subnet ovn-default ovn.kubernetes.io/bgp=true

删除这些注解以停止通告:

kubectl annotate pod sample ovn.kubernetes.io/bgp-
kubectl annotate subnet ovn-default ovn.kubernetes.io/bgp-

有关注解使用不同值时的行为,请参见 通告策略

通告策略

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)。