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) 对等体。MetalLB 运算符使用 BGP 对等体自定义资源来识别 MetalLB speaker
Pod 联系以启动 BGP 会话的哪些对等体。这些对等体接收 MetalLB 分配给服务的负载均衡器 IP 地址的路由通告。
BGP 对等体自定义资源的字段在下面的表格中描述。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 BGP 对等体自定义资源的名称。 |
|
|
指定 BGP 对等体自定义资源的命名空间。 |
|
|
指定 BGP 会话本地端的自治系统编号。在您添加的所有 BGP 对等体自定义资源中指定相同的值。范围是 |
|
|
指定 BGP 会话远程端的自治系统编号。范围是 |
|
|
指定要联系以建立 BGP 会话的对等体的 IP 地址。 |
|
|
可选:指定建立 BGP 会话时要使用的 IP 地址。该值必须是 IPv4 地址。 |
|
|
可选:指定要联系以建立 BGP 会话的对等体的网络端口。范围是 |
|
|
可选:指定要向 BGP 对等体建议的保持时间持续时间。最小值为 3 秒 ( |
|
|
可选:指定向 BGP 对等体发送保活消息的最大间隔。如果您指定此字段,则还必须为 |
|
|
可选:指定要向 BGP 对等体通告的路由器 ID。如果您指定此字段,则必须在您添加的每个 BGP 对等体自定义资源中指定相同的值。 |
|
|
可选:指定要发送到对等体的 MD5 密码,用于强制执行 TCP MD5 身份验证 BGP 会话的路由器。 |
|
|
可选:指定 BGP 对等体的身份验证密钥的名称。该密钥必须位于 |
|
|
可选:指定 BFD 配置文件的名称。 |
|
|
可选:使用匹配表达式和匹配标签指定选择器,以控制哪些节点可以连接到 BGP 对等体。 |
|
|
可选:指定 BGP 对等体距离多个网络跳。如果 BGP 对等体没有直接连接到同一个网络,除非将此字段设置为 |
|
|
指定 BGP 在尝试连接到邻居之间等待多长时间。 |
|
作为集群管理员,您可以添加 BGP 对等体自定义资源以与网络路由器交换路由信息并通告服务的 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 对等体的配置
$ oc apply -f bgppeer.yaml
此步骤说明如何:
配置一组地址池 (pool1
和 pool2
)。
配置一组 BGP 对等体 (peer1
和 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 对等体的配置
$ 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
您可以通过将网络接口上的 VRF 与 BGP 对等体关联来通过虚拟路由和转发 (VRF) 实例公开服务。
通过 BGP 对等体上的 VRF 公开服务仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您提前访问即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
通过使用网络接口上的 VRF 通过 BGP 对等体公开服务,您可以隔离服务的流量,配置独立的路由决策,并在网络接口上启用多租户支持。
通过在属于网络VRF的接口上建立BGP会话,MetalLB可以经由此接口发布服务,并使外部流量能够通过此接口访问该服务。但是,网络VRF路由表与OVN-Kubernetes使用的默认VRF路由表不同。因此,流量无法到达OVN-Kubernetes网络基础设施。 为了使指向服务的流量能够到达OVN-Kubernetes网络基础设施,必须配置路由规则来定义网络流量的下一跳。有关更多信息,请参阅附加资源部分“使用MetalLB管理对称路由”中的 |
以下是通过具有BGP对等体的网络VRF公开服务的步骤概述
定义BGP对等体并添加网络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对等体关联的网络VRF实例。MetalLB可以根据VRF中的路由信息发布服务并做出路由决策。 |
必须在 |
通过运行以下命令应用BGP对等体的配置
$ 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对等体。 |
通过运行以下命令应用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"
您可以指定节点选择器字段来控制哪些节点可以连接到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]
您可以指定一个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) 对等体资源的 |
要支持双协议栈网络,请为IPv4添加一个BGP对等体自定义资源,为IPv6添加一个BGP对等体自定义资源。
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