32.6. 配置 MetalLB BGP peer
作为集群管理员,您可以添加、修改和删除边框网关协议(BGP)对等点。MetalLB Operator 使用 BGP peer 自定义资源来标识 MetalLB speaker
pod 联系的对等者启动 BGP 会话。对等点接收 MetalLB 分配给服务的负载均衡器 IP 地址的路由公告。
32.6.1. 关于 BGP peer 自定义资源
下表中描述了 BGP peer 自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 BGP peer 自定义资源的名称。 |
|
| 指定 BGP peer 自定义资源的命名空间。 |
|
|
为 BGP 会话的本地末尾指定 Autonomous System 号。在您添加的所有 BGP peer 自定义资源中指定相同的值。范围是从 |
|
|
为 BGP 会话的远程端指定 Autonomous System 号。范围是从 |
|
| 指定建立 BGP 会话的对等点的 IP 地址。 |
|
| 可选:指定建立 BGP 会话时要使用的 IP 地址。该值必须是 IPv4 地址。 |
|
|
可选:指定用来建立 BGP 会话的对等端口。范围为 |
|
|
可选:指定到 BGP 对等点的保留时间。最小值为 3 秒( |
|
|
可选:指定向 BGP 对等发送保留消息之间的最大间隔。如果指定此字段,还必须为 |
|
| 可选:指定要公告到 BGP peer 的路由器 ID。如果指定了此字段,则必须在添加的每个 BGP peer 自定义资源中指定相同的值。 |
|
| 可选:指定 MD5 密码,以发送到执行 TCP MD5 经过身份验证的 BGP 会话的路由器的对等点。 |
|
|
可选:指定 BGP Peer 的身份验证 secret 的名称。secret 必须存在于 |
|
| 可选:指定 BFD 配置集的名称。 |
|
| 可选:使用匹配表达式和匹配标签指定选择器,以控制哪些节点可以连接到 BGP 对等点。 |
|
|
可选:指定 BGP peer 是否有多个网络跃点。如果 BGP peer 没有直接连接到同一网络,则 speaker 无法建立 BGP 会话,除非此字段设置为 |
passwordSecret
字段与 password
字段相互排斥,包含对包含密码的 secret 的引用。设置这两个字段会导致解析失败。
32.6.2. 配置 BGP peer
作为集群管理员,您可以添加 BGP peer 自定义资源来与网络路由器交换路由信息,并为服务公告 IP 地址。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 使用 BGP 公告配置 MetalLB。
流程
创建一个文件,如
bgppeer.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: doc-example-peer spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
应用 BGP peer 的配置:
$ oc apply -f bgppeer.yaml
32.6.3. 为给定地址池配置一组特定的 BGP 对等组
此流程演示了如何:
-
配置一组地址池(
pool1
和pool2
)。 -
配置一组 BGP 对等点(
pe1
和peer2
)。 -
配置 BGP 广告,将
pool1
分配给peer1
,将pool2
分配给peer2
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建地址池
pool1
。创建一个文件,如
ipaddresspool1.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool1 spec: addresses: - 4.4.4.100-4.4.4.200 - 2001:100:4::200-2001:100:4::400
为 IP 地址池
pool1
应用配置:$ oc apply -f ipaddresspool1.yaml
创建地址池
pool2
。创建一个文件,如
ipaddresspool2.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool2 spec: addresses: - 5.5.5.100-5.5.5.200 - 2001:100:5::200-2001:100:5::400
为 IP 地址池
pool2
应用配置:$ oc apply -f ipaddresspool2.yaml
创建 BGP
peer1
。创建一个文件,如
bgppeer1.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer1 spec: peerAddress: 10.0.0.1 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
应用 BGP peer 的配置:
$ oc apply -f bgppeer1.yaml
创建 BGP
peer2
。创建一个文件,如
bgppeer2.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: namespace: metallb-system name: peer2 spec: peerAddress: 10.0.0.2 peerASN: 64501 myASN: 64500 routerID: 10.10.10.10
应用 BGP peer2 的配置:
$ oc apply -f bgppeer2.yaml
创建 BGP 广告 1。
创建一个文件,如
bgpadvertisement1.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-1 namespace: metallb-system spec: ipAddressPools: - pool1 peers: - peer1 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
应用配置:
$ oc apply -f bgpadvertisement1.yaml
创建 BGP 广告 2。
创建一个文件,如
bgpadvertisement2.yaml
,内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-2 namespace: metallb-system spec: ipAddressPools: - pool2 peers: - peer2 communities: - 65535:65282 aggregationLength: 32 aggregationLengthV6: 128 localPref: 100
应用配置:
$ oc apply -f bgpadvertisement2.yaml
32.6.4. 通过网络 VRF 公开服务
您可以通过在网络接口上将 VRF 与 BGP 对等点关联,通过虚拟路由和转发(VRF)实例公开服务。
通过 BGP 对等点上的 VRF 公开服务只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
通过使用网络接口上的 VRF 通过 BGP 对等点公开服务,您可以将流量隔离到服务,配置独立路由决策,并在网络接口上启用多租户支持。
通过一个属于网络 VRF 的接口建立 BGP 会话,MetalLB 可以通过该接口公告服务,并让外部流量通过这个接口访问该服务。但是,network VRF 路由表与 OVN-Kubernetes 使用的默认 VRF 路由表不同。因此,流量无法访问 OVN-Kubernetes 网络基础架构。
要启用定向到服务的流量访问 OVN-Kubernetes 网络基础架构,您必须配置路由规则来为网络流量定义下一跃点。如需更多信息,请参阅附加资源部分中的"使用 MetalLB 管理对称路由"中的 NodeNetworkConfigurationPolicy
资源。
这些是通过带有 BGP peer 的网络 VRF 公开服务的高级步骤:
- 定义 BGP peer 并添加网络 VRF 实例。
- 为 MetalLB 指定 IP 地址池。
- 为 MetalLB 配置 BGP 路由广告,以使用指定的 IP 地址池以及与 VRF 实例关联的 BGP 对等点公告路由。
- 部署服务来测试配置。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
权限的用户身份登录。 -
您定义了一个
NodeNetworkConfigurationPolicy
,将虚拟路由和转发(VRF)实例与网络接口关联。有关完成此先决条件的更多信息,请参阅附加资源部分。 - 在集群中安装了 MetalLB。
流程
创建
BGPPeer
自定义资源 (CR):创建一个文件,如
frrviavrf.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: frrviavrf namespace: metallb-system spec: myASN: 100 peerASN: 200 peerAddress: 192.168.130.1 vrf: ens4vrf 1
- 1
- 指定要与 BGP peer 关联的网络 VRF 实例。MetalLB 可以公告服务并根据 VRF 中的路由信息做出路由决策。
注意您必须在
NodeNetworkConfigurationPolicy
CR 中配置此网络 VRF 实例。如需更多信息,请参阅附加资源。运行以下命令,应用 BGP peer 的配置:
$ oc apply -f frrviavrf.yaml
创建一个
IPAddressPool
CR:创建一个文件,如
first-pool.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: first-pool namespace: metallb-system spec: addresses: - 192.169.10.0/32
运行以下命令,为 IP 地址池应用配置:
$ oc apply -f first-pool.yaml
创建
BGPAdvertisement
CR:创建一个文件,如
first-adv.yaml
,其内容类似以下示例:apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: first-adv namespace: metallb-system spec: ipAddressPools: - first-pool peers: - frrviavrf 1
- 1
- 在本例中,MetalLB 将来自
first-pool
IP 地址池的 IP 地址范围公告给frrviavrf
BGP peer。
运行以下命令,应用 BGP 公告的配置:
$ oc apply -f first-adv.yaml
创建一个
Namespace
,Deployment
, 和Service
CR:创建一个文件,如
deploy-service.yaml
,其内容类似以下示例:apiVersion: v1 kind: Namespace metadata: name: test --- apiVersion: apps/v1 kind: Deployment metadata: name: server namespace: test spec: selector: matchLabels: app: server template: metadata: labels: app: server spec: containers: - name: server image: registry.redhat.io/ubi9/ubi ports: - name: http containerPort: 30100 command: ["/bin/sh", "-c"] args: ["sleep INF"] --- apiVersion: v1 kind: Service metadata: name: server1 namespace: test spec: ports: - name: http port: 30100 protocol: TCP targetPort: 30100 selector: app: server type: LoadBalancer
运行以下命令,为命名空间、部署和服务应用配置:
$ oc apply -f deploy-service.yaml
验证
运行以下命令来识别 MetalLB speaker pod:
$ oc get -n metallb-system pods -l component=speaker
输出示例
NAME READY STATUS RESTARTS AGE speaker-c6c5f 6/6 Running 0 69m
运行以下命令,在 speaker pod 中验证 BGP 会话的状态是否为
Established
,替换变量以匹配您的配置:$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> neigh"
输出示例
BGP neighbor is 192.168.30.1, remote AS 200, local AS 100, external link BGP version 4, remote router ID 192.168.30.1, local router ID 192.168.30.71 BGP state = Established, up for 04:20:09 ...
运行以下命令验证该服务是否已正确公告:
$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> ipv4"
32.6.5. BGP 对等配置示例
32.6.5.1. 示例:限制节点连接到 BGP peer
您可以指定节点选择器字段来控制哪些节点可以连接到 BGP 对等点。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-nodesel namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 nodeSelectors: - matchExpressions: - key: kubernetes.io/hostname operator: In values: [compute-1.example.com, compute-2.example.com]
32.6.5.2. 示例:为 BGP peer 指定 BFD 配置集
您可以指定一个 BFD 配置集,以与 BGP 对等点关联。BFD 复杂的 BGP 通过单独提供与 BGP 间通信故障的更快速检测。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-peer-bfd namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64501 myASN: 64500 holdTime: "10s" bfdProfile: doc-example-bfd-profile-full
删除双向转发检测 (BFD) 配置集并删除添加到边框网关协议 (BGP) 对等资源中的 bfdProfile
不会禁用 BFD。相反,BGP 对等点开始使用默认的 BFD 配置集。要从 BGP peer 资源禁用 BFD,请删除 BGP 对等配置,并在没有 BFD 配置集的情况下重新创建它。如需更多信息,请参阅 BZ#2050824。
32.6.5.3. 示例:为双栈网络指定 BGP 对等点
要支持双栈网络,请为 IPv4 添加一个 BGP peer 自定义资源,并为 IPv6 添加一个 BGP peer 自定义资源。
apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv4 namespace: metallb-system spec: peerAddress: 10.0.20.1 peerASN: 64500 myASN: 64500 --- apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: doc-example-dual-stack-ipv6 namespace: metallb-system spec: peerAddress: 2620:52:0:88::104 peerASN: 64500 myASN: 64500