7.4. 使用 MetalLB 进行负载平衡
7.4.1. 配置 MetalLB 地址池 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加、修改和删除地址池。MetalLB Operator 使用地址池自定义资源来设置 MetalLB 可分配给服务的 IP 地址。示例中使用的命名空间假定命名空间是 metallb-system
。
有关如何安装 MetalLB Operator 的更多信息,请参阅关于 MetalLB 和 MetalLB Operator。
7.4.1.1. 关于 IPAddressPool 自定义资源 复制链接链接已复制到粘贴板!
下表中描述了 IPAddressPool
自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定地址池的名称。添加服务时,您可以在 |
|
| 指定地址池的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
可选:指定分配给 |
|
| 指定分配给服务的 MetalLB Operator 的 IP 地址列表。您可以在一个池中指定多个范围 ; 它们将共享相同的设置。以 CIDR 表示法指定每个范围,或者指定为以连字符隔开的起始和结束 IP 地址。 |
|
|
可选:指定 MetalLB 是否从这个池自动分配 IP 地址。如果要使用 注意
对于 IP 地址池配置,请确保 address 字段只指定可用的 IP,而不被其他网络设备(特别是网关地址)使用,以防止启用 |
|
|
可选:这样可确保在启用 IP 地址以 |
您可以通过配置 spec.serviceAllocation
规格,将 IP 地址从 IPAddressPool
分配给服务和命名空间。
字段 | 类型 | 描述 |
---|---|---|
|
| 可选:当多个 IP 地址池与服务或命名空间匹配时,定义 IP 地址池之间的优先级。较低数字表示优先级更高。 |
|
| 可选:指定您可以分配给 IP 地址池 IP 地址的命名空间列表。 |
|
| 可选:指定您可以使用列表格式的标签选择器从 IP 地址池分配给 IP 地址的命名空间标签。 |
|
| 可选:指定您可以使用列表格式的标签选择器从地址池中分配给 IP 地址的服务标签。 |
7.4.1.2. 配置地址池 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群中添加地址池来控制 MetalLB 可分配给负载均衡器服务的 IP 地址。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 分配给
IPAddressPool
的该标签可通过BGPAdvertisement
CRD 中的ipAddressPoolSelectors
来引用,以将IPAddressPool
与广告关联。
应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令来查看地址池:
oc describe -n metallb-system IPAddressPool doc-example
$ oc describe -n metallb-system IPAddressPool doc-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确认输出中已存在地址池名称,如
doc-example
,以及 IP 地址范围。
7.4.1.3. 为 VLAN 配置 MetalLB 地址池 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群中添加地址池来控制 MetalLB 可分配给负载均衡器服务的创建的 VLAN 上的 IP 地址
先决条件
-
安装 OpenShift CLI(
oc
)。 - 配置单独的 VLAN。
-
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个文件,如
ipaddresspool-vlan.yaml
,该文件类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool-vlan.yaml
$ oc apply -f ipaddresspool-vlan.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为确保此配置适用于您需要将
spec
gatewayConfig.ipForwarding
设置为Global
的 VLAN。运行以下命令来编辑网络配置自定义资源 (CR):
oc edit network.operator.openshift/cluster
$ oc edit network.operator.openshift/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
spec.defaultNetwork.ovnKubernetesConfig
部分,将gatewayConfig.ipForwarding
设置为Global
。它应该类似如下:Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.1.4. 地址池配置示例 复制链接链接已复制到粘贴板!
以下示例演示了特定场景的地址池配置。
7.4.1.4.1. 示例:IPv4 和 CIDR 范围 复制链接链接已复制到粘贴板!
您可以使用无类别域间路由(CIDR)标记指定 IP 地址范围。您可以将 CIDR 表示法与使用连字符分隔下限和上限的表示法合并。
7.4.1.4.2. 示例:分配 IP 地址 复制链接链接已复制到粘贴板!
您可以将 autoAssign
字段设置为 false
,以防止 MetalLB 自动从地址池中分配 IP 地址。然后,您可以从 IP 地址池分配单个 IP 地址或多个 IP 地址。要分配 IP 地址,请将 /32
CIDR 表示法附加到 spec.addresses
参数中的目标 IP 地址。此设置可确保只有特定 IP 地址可以分配,保留非保留 IP 地址供应用程序使用。
分配多个 IP 地址的 IPAddressPool
CR 示例
添加服务时,您可以从地址池中请求特定的 IP 地址,或者在注解中指定池名称,从池中请求任何 IP 地址。
7.4.1.4.3. 示例:IPv4 和 IPv6 地址 复制链接链接已复制到粘贴板!
您可以添加使用 IPv4 和 IPv6 的地址池。您可以像几个 IPv4 示例一样在 地址
列表中指定多个范围。
无论服务被分配一个 IPv4 地址、一个 IPv6 地址,还是由您添加该服务来确定。spec.ipFamilies
和 spec.ipFamilyPolicy
字段控制 IP 地址如何分配给该服务。
- 1
- 其中
10.0.100.0/28
是本地网络 IP 地址,后跟/28
网络前缀。
7.4.1.4.4. 示例:将 IP 地址池分配给服务或命名空间 复制链接链接已复制到粘贴板!
您可以将 IP 地址从 IPAddressPool
分配给您指定的服务和命名空间。
如果您将服务或命名空间分配给多个 IP 地址池,MetalLB 将使用较高优先级 IP 地址池中的可用 IP 地址。如果分配的 IP 地址池没有 IP 地址可用,MetalLB 将使用较低优先级或没有优先级的 IP 地址池的可用 IP 地址。
对于 namespaceSelectors
和 serviceSelectors
规格,您可以使用 matchLabels
标签选择器、matchExpressions
标签选择器或两者。本例展示了每个规格的一个标签选择器。
7.4.1.5. 后续步骤 复制链接链接已复制到粘贴板!
7.4.2. 关于 IP 地址池的广告 复制链接链接已复制到粘贴板!
您可以配置 MetalLB,以便使用第 2 层协议、BGP 协议或两者来广告 IP 地址。通过第 2 层,MetalLB 提供了容错的外部 IP 地址。使用 BGP,MetalLB 为外部 IP 地址和负载均衡提供容错功能。
MetalLB 支持将 L2 和 BGP 用于同一组 IP 地址。
MetalLB 提供了将地址池分配给特定 BGP 对等对象到网络上节点子集的灵活性。这可以实现更复杂的配置,例如促进节点隔离或网络分段。
7.4.2.1. 关于 BGPAdvertisement 自定义资源 复制链接链接已复制到粘贴板!
BGPAdvertise
对象的字段在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 BGP 广告的名称。 |
|
| 指定 BGP 广告的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
可选:指定 32 位 CIDR 掩码中包含的位数。为了聚合发言人向 BGP 对等者公告的路由,掩码将应用于多个服务 IP 地址的路由,speaker 会公告聚合的路由。例如,聚合长度为 |
|
|
可选:指定 128 位 CIDR 掩码中包含的位数。例如,在聚合长度为 |
|
| 可选:指定一个或多个 BGP 社区。每个社区都被指定为两个 16 位值,用冒号字符分隔。知名的社区必须指定为 16 位值:
|
|
| 可选:指定这个广播的本地首选项。此 BGP 属性适用于 Autonomous System 中的 BGP 会话。 |
|
|
可选:用于使用这个广告进行广告的 |
|
|
可选:使用这个广告进行广告的 |
|
|
可选: |
|
|
可选:使用列表为每个 |
7.4.2.2. 使用 BGP 公告和基本用例配置 MetalLB 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,使对等 BGP 路由器为每个 MetalLB 分配为服务的负载均衡器 IP 地址接收一个 203.0.113.200/32
路由和一个 fc00:f853:ccd:e799::1/128
路由。因为没有指定 localPref
和 community
字段,所以路由会公告,并将 localPref
设置为 0,且没有 BGP 社区。
7.4.2.2.1. 示例:使用 BGP 传输基本地址池配置 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,以便使用 BGP 协议公告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP 公告。
创建一个文件,如
bgpadvertisement.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f bgpadvertisement.yaml
$ oc apply -f bgpadvertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.2.3. 使用 BGP 广告和高级用例配置 MetalLB 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,使得 MetalLB 分配给负载均衡器的 IP 地址范围是 203.0.113.200
到 203.0.113.203
,以及 fc00:f853:ccd:e799::0
到 fc00:f853:ccd:e799::f
。
为了说明两个 BGP 公告,在 MetalLB 分配 IP 地址 203.0.113.200
时,请考虑实例。以该 IP 地址为例,发言人向 BGP 对等点公告两个路由:
-
203.0.113.200/32
,localPref
设置为100
,社区设置为NO_ADVERTISE
社区的数字值。此规范指示它们可以使用此路由的对等路由器,但它们不应将有关此路由的信息传播到 BGP 对等点。 -
203.0.113.200/30
将 MetalLB 分配的负载均衡器 IP 地址聚合到一个路由中。MetalLB 公告到 BGP 对等点的聚合路由,并将 community 属性设置为8000:800
。BGP 同行将203.0.113.200/30
个路由传播到其他 BGP 同级服务器。当流量通过发言人路由到节点时,使用203.0.113.200/32
路由将流量转发到集群以及与该服务关联的 pod。
当添加更多服务和 MetalLB 从池中分配更多负载均衡器 IP 地址时,对等路由器收到一个本地路由,203.0.113.20x/32
,以及 203.0.113.200/30
聚合路由。您添加的每个服务都会生成 /30
路由,但 MetalLB 会将路由重复数据删除到一个 BGP 公告,然后再与对等路由器通信。
7.4.2.3.1. 示例:使用 BGP 传输高级地址池配置 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,以便使用 BGP 协议公告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP 公告。
创建一个文件,如
bgpadvertisement1.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f bgpadvertisement1.yaml
$ oc apply -f bgpadvertisement1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个文件,如
bgpadvertisement2.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f bgpadvertisement2.yaml
$ oc apply -f bgpadvertisement2.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.2.4. 从节点的子集公告 IP 地址池 复制链接链接已复制到粘贴板!
要从 IP 地址池公告 IP 地址,请只使用特定的节点集合,使用 BGPAdvertisement 自定义资源中的 .spec.nodeSelector
规格。此规格将 IP 地址池与集群中的一组节点关联。如果您在集群中的不同子网上有节点,而您想要从特定子网的地址池中公告 IP 地址,例如仅面向公共的子网。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
使用自定义资源创建 IP 地址池:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 BGPAdvertisement 自定义资源中定义
.spec.nodeSelector
值,控制pool1
广告的 IP 地址来自集群中的哪些节点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在本例中,pool1
广告的 IP 地址仅来自 NodeA
和 NodeB
。
7.4.2.5. 关于 L2Advertisement 自定义资源 复制链接链接已复制到粘贴板!
l2Advertise
对象的字段在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 L2 广告的名称。 |
|
| 指定 L2 广告的命名空间。指定 MetalLB Operator 使用的同一命名空间。 |
|
|
可选:用于使用这个广告进行广告的 |
|
|
可选:使用这个广告进行广告的 |
|
|
可选: 重要 限制节点,因为下一跃点只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。 |
|
|
可选:用于声明负载均衡器 IP 的 |
7.4.2.6. 使用 L2 广告配置 MetalLB 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,以便使用 L2 协议广告 IPAddressPool
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 L2 广告。
创建一个文件,如
l2advertisement.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f l2advertisement.yaml
$ oc apply -f l2advertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.2.7. 使用 L2 广告和标签配置 MetalLB 复制链接链接已复制到粘贴板!
BGPAdvertisement
和 L2Advertisement
中的 ipAddress
Pools 字段用于根据分配给 IPAddressPool
的标签将 IPAddressPool
与广告相关联。
本例演示了如何配置 MetalLB,以便通过配置 ipAddressPoolSelectors
字段来广告使用 L2 协议的 IPAddressPools
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
ipAddressPoolSelectors
创建 L2 广告广告 IP。创建一个文件,如
l2advertisement.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f l2advertisement.yaml
$ oc apply -f l2advertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.2.8. 为所选接口配置带有 L2 广告的 MetalLB 复制链接链接已复制到粘贴板!
默认情况下,分配给该服务的 IP 地址池的 IP 地址将从所有网络接口公告。L2Advertisement
自定义资源定义中的 interfaces
字段用于限制公告 IP 地址池的网络接口。
本例演示了如何配置 MetalLB,以便仅从所有节点的 interfaces
字段中列出的网络接口公告 IP 地址池。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您以具有
cluster-admin
权限的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,并输入类似以下示例的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IP 地址池应用配置,如下例所示:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
接口
选择器创建 L2 广告广告 IP。创建一个 YAML 文件,如
l2advertisement.yaml
,并输入类似以下示例的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为公告应用配置,如下例所示:
oc apply -f l2advertisement.yaml
$ oc apply -f l2advertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
接口选择器不会影响 MetalLB 如何使用 L2 选择给定 IP 的节点。如果节点没有所选接口,则所选节点不会宣布该服务。
7.4.2.9. 使用二级网络配置 MetalLB 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 4.14 中,默认的网络行为是不允许在网络接口之间转发 IP 数据包。因此,当在二级接口上配置 MetalLB 时,您需要添加机器配置来只为所需的接口启用 IP 转发。
从 4.13 升级的 OpenShift Container Platform 集群不受影响,因为在升级过程中设置了全局参数来启用全局 IP 转发。
要为二级接口启用 IP 转发,有两个选项:
- 为特定接口启用 IP 转发。
为所有接口启用 IP 转发。
注意为特定接口启用 IP 转发提供了更精细的控制,同时为所有接口启用它应用全局设置。
7.4.2.9.1. 为特定接口启用 IP 转发 复制链接链接已复制到粘贴板!
流程
运行以下命令修补 Cluster Network Operator,将参数
routingViaHost
设置为true
:oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig": {"routingViaHost": true} }}}}' --type=merge
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig": {"routingViaHost": true} }}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过创建并应用
MachineConfig
CR,为特定二级接口启用转发,如bridge-net
:在本地机器中运行以下命令来配置网络内核参数的字符串(基于 Base64 编码):
echo -e "net.ipv4.conf.bridge-net.forwarding = 1\nnet.ipv6.conf.bridge-net.forwarding = 1\nnet.ipv4.conf.bridge-net.rp_filter = 0\nnet.ipv6.conf.bridge-net.rp_filter = 0" | base64 -w0
$ echo -e "net.ipv4.conf.bridge-net.forwarding = 1\nnet.ipv6.conf.bridge-net.forwarding = 1\nnet.ipv4.conf.bridge-net.rp_filter = 0\nnet.ipv6.conf.bridge-net.rp_filter = 0" | base64 -w0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
bmV0LmlwdjQuY29uZi5icmlkZ2UtbmV0LmZvcndhcmRpbmcgPSAxCm5ldC5pcHY2LmNvbmYuYnJpZGdlLW5ldC5mb3J3YXJkaW5nID0gMQpuZXQuaXB2NC5jb25mLmJyaWRnZS1uZXQucnBfZmlsdGVyID0gMApuZXQuaXB2Ni5jb25mLmJyaWRnZS1uZXQucnBfZmlsdGVyID0gMAo=
bmV0LmlwdjQuY29uZi5icmlkZ2UtbmV0LmZvcndhcmRpbmcgPSAxCm5ldC5pcHY2LmNvbmYuYnJpZGdlLW5ldC5mb3J3YXJkaW5nID0gMQpuZXQuaXB2NC5jb25mLmJyaWRnZS1uZXQucnBfZmlsdGVyID0gMApuZXQuaXB2Ni5jb25mLmJyaWRnZS1uZXQucnBfZmlsdGVyID0gMAo=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建
MachineConfig
CR,为名为bridge-net
的指定的二级接口启用 IP 转发。 将以下 YAML 保存到
enable-ip-forward.yaml
文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用配置:
oc apply -f enable-ip-forward.yaml
$ oc apply -f enable-ip-forward.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
应用机器配置后,按照以下步骤验证更改:
运行以下命令,在目标节点上进入 debug 会话:
oc debug node/<node-name>
$ oc debug node/<node-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此步骤实例化一个名为
<node-name>-debug
的 debug pod。运行以下命令,将
/host
设置为 debug shell 中的根目录:chroot /host
$ chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow debug pod 在 pod 中的
/host
中挂载主机的 root 文件系统。通过将根目录改为/host
,您可以运行主机可执行路径中包含的二进制文件。运行以下命令验证 IP 转发是否已启用:
cat /etc/sysctl.d/enable-global-forwarding.conf
$ cat /etc/sysctl.d/enable-global-forwarding.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
net.ipv4.conf.bridge-net.forwarding = 1 net.ipv6.conf.bridge-net.forwarding = 1 net.ipv4.conf.bridge-net.rp_filter = 0 net.ipv6.conf.bridge-net.rp_filter = 0
net.ipv4.conf.bridge-net.forwarding = 1 net.ipv6.conf.bridge-net.forwarding = 1 net.ipv4.conf.bridge-net.rp_filter = 0 net.ipv6.conf.bridge-net.rp_filter = 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示
bridge-net
接口上启用了 IPv4 和 IPv6 数据包转发。
7.4.2.9.2. 全局启用 IP 转发 复制链接链接已复制到粘贴板!
- 运行以下命令来全局启用 IP 转发:
oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
7.4.3. 配置 MetalLB BGP peer 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加、修改和删除边框网关协议(BGP)对等点。MetalLB Operator 使用 BGP peer 自定义资源来标识 MetalLB speaker
pod 联系的对等者启动 BGP 会话。对等点接收 MetalLB 分配给服务的负载均衡器 IP 地址的路由公告。
7.4.3.1. 关于 BGP peer 自定义资源 复制链接链接已复制到粘贴板!
下表中描述了 BGP peer 自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 BGP peer 自定义资源的名称。 |
|
| 指定 BGP peer 自定义资源的命名空间。 |
|
|
为 BGP 会话的本地末尾指定 Autonomous System Number (ASN)。在您添加的所有 BGP peer 自定义资源中,指定相同的值。范围是从 |
|
|
指定 BGP 会话的远程端的 ASN。范围是从 |
|
|
检测用于会话远程端的 ASN,而不明确设置它。为具有相同 ASN 的对等点指定 |
|
|
指定建立 BGP 会话的对等点的 IP 地址。如果使用此字段,则无法在 |
|
|
指定建立会话时使用的接口名称。使用此字段配置未编号的 BGP 对等。您必须在两个 BGP 对等点之间建立点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。如果使用此字段,则无法在 |
|
| 可选:指定建立 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 会话,除非此字段设置为 |
|
| 指定 BGP 在连接尝试到邻居之间等待的时间。 |
passwordSecret
字段与 password
字段相互排斥,包含对包含密码的 secret 的引用。设置这两个字段会导致解析失败。
7.4.3.2. 配置 BGP peer 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加 BGP peer 自定义资源来与网络路由器交换路由信息,并为服务公告 IP 地址。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 使用 BGP 公告配置 MetalLB。
流程
创建一个文件,如
bgppeer.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 BGP peer 的配置:
oc apply -f bgppeer.yaml
$ oc apply -f bgppeer.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3.3. 为给定地址池配置一组特定的 BGP 对等组 复制链接链接已复制到粘贴板!
此流程演示了如何:
-
配置一组地址池(
pool1
和pool2
)。 -
配置一组 BGP 对等点(
pe1
和peer2
)。 -
配置 BGP 广告,将
pool1
分配给peer1
,将pool2
分配给peer2
。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建地址池
pool1
。创建一个文件,如
ipaddresspool1.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IP 地址池
pool1
应用配置:oc apply -f ipaddresspool1.yaml
$ oc apply -f ipaddresspool1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建地址池
pool2
。创建一个文件,如
ipaddresspool2.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IP 地址池
pool2
应用配置:oc apply -f ipaddresspool2.yaml
$ oc apply -f ipaddresspool2.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP
peer1
。创建一个文件,如
bgppeer1.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 BGP peer 的配置:
oc apply -f bgppeer1.yaml
$ oc apply -f bgppeer1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP
peer2
。创建一个文件,如
bgppeer2.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 BGP peer2 的配置:
oc apply -f bgppeer2.yaml
$ oc apply -f bgppeer2.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP 广告 1。
创建一个文件,如
bgpadvertisement1.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f bgpadvertisement1.yaml
$ oc apply -f bgpadvertisement1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建 BGP 广告 2。
创建一个文件,如
bgpadvertisement2.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc apply -f bgpadvertisement2.yaml
$ oc apply -f bgpadvertisement2.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3.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
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要与 BGP peer 关联的网络 VRF 实例。MetalLB 可以公告服务并根据 VRF 中的路由信息做出路由决策。
注意您必须在
NodeNetworkConfigurationPolicy
CR 中配置此网络 VRF 实例。如需更多信息,请参阅附加资源。运行以下命令,应用 BGP peer 的配置:
oc apply -f frrviavrf.yaml
$ oc apply -f frrviavrf.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
IPAddressPool
CR:创建一个文件,如
first-pool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 IP 地址池应用配置:
oc apply -f first-pool.yaml
$ oc apply -f first-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
BGPAdvertisement
CR:创建一个文件,如
first-adv.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,MetalLB 将来自
first-pool
IP 地址池的 IP 地址范围公告给frrviavrf
BGP peer。
运行以下命令,应用 BGP 公告的配置:
oc apply -f first-adv.yaml
$ oc apply -f first-adv.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
Namespace
,Deployment
, 和Service
CR:创建一个文件,如
deploy-service.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为命名空间、部署和服务应用配置:
oc apply -f deploy-service.yaml
$ oc apply -f deploy-service.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令来识别 MetalLB speaker pod:
oc get -n metallb-system pods -l component=speaker
$ oc get -n metallb-system pods -l component=speaker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE speaker-c6c5f 6/6 Running 0 69m
NAME READY STATUS RESTARTS AGE speaker-c6c5f 6/6 Running 0 69m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在 speaker pod 中验证 BGP 会话的状态是否为
Established
,替换变量以匹配您的配置:oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> neigh"
$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> neigh"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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 ...
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 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证该服务是否已正确公告:
oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> ipv4"
$ oc exec -n metallb-system <speaker_pod> -c frr -- vtysh -c "show bgp vrf <vrf_name> ipv4"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3.5. BGP 对等配置示例 复制链接链接已复制到粘贴板!
7.4.3.5.1. 示例:限制节点连接到 BGP peer 复制链接链接已复制到粘贴板!
您可以指定节点选择器字段来控制哪些节点可以连接到 BGP 对等点。
7.4.3.5.2. 示例:为 BGP peer 指定 BFD 配置集 复制链接链接已复制到粘贴板!
您可以指定一个 BFD 配置集,以与 BGP 对等点关联。BFD 复杂的 BGP 通过单独提供与 BGP 间通信故障的更快速检测。
删除双向转发检测 (BFD) 配置集并删除添加到边框网关协议 (BGP) 对等资源中的 bfdProfile
不会禁用 BFD。相反,BGP 对等点开始使用默认的 BFD 配置集。要从 BGP peer 资源禁用 BFD,请删除 BGP 对等配置,并在没有 BFD 配置集的情况下重新创建它。如需更多信息,请参阅 BZ#2050824。
7.4.3.5.3. 示例:为双栈网络指定 BGP 对等点 复制链接链接已复制到粘贴板!
要支持双栈网络,请为 IPv4 添加一个 BGP peer 自定义资源,并为 IPv6 添加一个 BGP peer 自定义资源。
7.4.3.5.4. 示例:为未编号的 BGP 对等指定 BGP 对等点 复制链接链接已复制到粘贴板!
spec.interface
字段只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要配置未编号的 BGP peering,请使用以下示例配置在 spec.interface
字段中指定接口:
要使用 interface
字段,您必须在两个 BGP 对等点之间建立点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。
如果使用此字段,则无法在 spec.bgp.routers.neighbors.address
字段中指定一个值。
7.4.3.6. 后续步骤 复制链接链接已复制到粘贴板!
7.4.4. 配置社区别名 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置一个社区别名并在不同的广告中使用它。
7.4.4.1. 关于社区自定义资源 复制链接链接已复制到粘贴板!
community
自定义资源是社区的一个别名集合。用户可使用 BGPAdvertis
定义广告 ipAddressPools
时使用的命名别名。下表中描述了 community
自定义资源的字段。
community
CRD 仅适用于 BGPAdvertisement。
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 |
|
|
指定 |
|
|
指定可在 BGPAdvertisements 中使用的 BGP 社区别名列表。社区别名由名称(别名)和值(数字:number)组成。通过引用 |
字段 | 类型 | 描述 |
---|---|---|
|
|
|
|
|
与给定名称对应的 BGP |
7.4.4.2. 使用 BGP 广告和社区别名配置 MetalLB 复制链接链接已复制到粘贴板!
按如下所示配置 MetalLB,以便 BGP 协议广告 IPAddressPool
,并将社区别名设置为 NO_ADVERTISE 社区的数字值。
在以下示例中,对等 BGP 路由器 doc-example-peer-community
接收一个 203.0.113.200/32
路由,以及一个 fc00:f853:ccd:e799::1/128
路由,每个 load-balancer IP 地址都分配给服务。使用 NO_ADVERTISE
社区配置了一个社区别名。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建 IP 地址池。
创建一个文件,如
ipaddresspool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 IP 地址池的配置:
oc apply -f ipaddresspool.yaml
$ oc apply -f ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建名为
community1
的社区别名。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个名为
doc-example-bgp-peer
的 BGP peer。创建一个文件,如
bgppeer.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 BGP peer 的配置:
oc apply -f bgppeer.yaml
$ oc apply -f bgppeer.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个带有社区别名的 BGP 广告。
创建一个文件,如
bgpadvertisement.yaml
,内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在这里指定
CommunityAlias.name
,而不是社区自定义资源 (CR) 名称。
应用配置:
oc apply -f bgpadvertisement.yaml
$ oc apply -f bgpadvertisement.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.5. 配置 MetalLB BFD 配置集 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加、修改和删除双向检测(BFD)配置集。MetalLB Operator 使用 BFD 配置集自定义资源来识别哪个 BGP 会话使用 BFD 来单独提供比 BGP 更快地提供的路径故障检测。
7.4.5.1. 关于 BFD 配置集自定义资源 复制链接链接已复制到粘贴板!
下表中描述了 BFD 配置集自定义资源的字段。
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 BFD 配置集自定义资源的名称。 |
|
| 指定 BFD 配置集自定义资源的命名空间。 |
|
| 指定确定数据包丢失的检测倍数。远程传输间隔乘以这个值来确定连接丢失检测计时器。
例如,当本地系统的检测倍数设置为
范围为 |
|
|
指定回显传输模式。如果您不使用分布式 BFD,则回显传输模式仅在 peer 也是 FRR 时才可以正常工作。默认值为
启用回显传输模式时,请考虑增加控制数据包的传输间隔,以减少带宽使用量。例如,考虑将传输间隔增加到 |
|
|
指定此系统用来发送和接收回显数据包的最小传输间隔(较少的)。范围为 |
|
| 指定传入控制数据包的最低预期 TTL。此字段只适用于多跃点会话。 设置最小 TTL 的目的是使数据包验证要求更加严格,并避免从其他会话接收控制数据包。
默认值为 |
|
| 指定会话是否标记为主动或者被动。被动会话不会尝试启动连接。相反,被动会话会等待来自 peer 的控制数据包,然后再开始回复。 当您有一个作为星星网络的中央节点,并且您希望发送不需要系统发送的控制数据包时,如果您有一个路由器将会话标记为被动。
默认值为 |
|
|
指定此系统可以接收控制数据包的最低间隔。范围为 |
|
|
指定此系统用来发送控制数据包的最小传输间隔(较少的)。范围为 |
7.4.5.2. 配置 BFD 配置集 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加 BFD 配置集,并配置 BGP 对等点来使用配置集。BFD 仅提供比 BGP 快于 BGP 的路径故障检测速度。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建一个文件,如
bfdprofile.yaml
,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 BFD 配置集应用配置:
oc apply -f bfdprofile.yaml
$ oc apply -f bfdprofile.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.5.3. 后续步骤 复制链接链接已复制到粘贴板!
- 将 BGP peer 配置为使用 BFD 配置集。
7.4.6. 将服务配置为使用 MetalLB 复制链接链接已复制到粘贴板!
作为集群管理员,当添加类型为 LoadBalancer
的服务时,您可以控制 MetalLB 如何分配 IP 地址。
7.4.6.1. 请求特定 IP 地址 复制链接链接已复制到粘贴板!
与其他一些负载均衡器实施一样,MetalLB 接受服务规格中的 spec.loadBalancerIP
字段。
如果请求的 IP 地址位于任何地址池中,MetalLB 会分配请求的 IP 地址。如果请求的 IP 地址不在任何范围内,MetalLB 会报告警告。
特定 IP 地址的服务 YAML 示例
如果 MetalLB 无法分配请求的 IP 地址,服务报告的 EXTERNAL-IP
会报告 <pending>
,运行 oc describe service <service_name>
会包括一个类似以下示例的事件。
当 MetalLB 无法分配请求的 IP 地址时的示例
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning AllocationFailed 3m16s metallb-controller Failed to allocate IP for "default/invalid-request": "4.3.2.1" is not allowed in config
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning AllocationFailed 3m16s metallb-controller Failed to allocate IP for "default/invalid-request": "4.3.2.1" is not allowed in config
7.4.6.2. 从特定池中请求 IP 地址 复制链接链接已复制到粘贴板!
要从特定范围分配 IP 地址,但您不关注特定的 IP 地址,您可以使用 metallb.io/address-pool
注解从指定地址池中请求 IP 地址。
来自特定池的 IP 地址的服务 YAML 示例
如果您为 <address_pool_name>
指定的地址池不存在,MetalLB 会尝试从允许自动分配的池中分配 IP 地址。
7.4.6.3. 接受任何 IP 地址 复制链接链接已复制到粘贴板!
默认情况下,地址池配置为允许自动分配。MetalLB 从这些地址池中分配 IP 地址。
若要接受任何为自动分配配置的池的 IP 地址,不需要特殊注释或配置。
接受任何 IP 地址的服务 YAML 示例
7.4.6.5. 使用 MetalLB 配置服务 复制链接链接已复制到粘贴板!
您可以将负载平衡服务配置为使用地址池中的外部 IP 地址。
先决条件
-
安装 OpenShift CLI (
oc
) 。 - 安装 MetalLB Operator 并启动 MetalLB。
- 至少配置一个地址池。
- 配置网络,将流量从客户端路由到集群的主机网络。
流程
创建一个
<service_name>.yaml
文件。在文件中,确保将spec.type
字段设置为LoadBalancer
。有关如何请求 MetalLB 分配给服务的外部 IP 地址的信息,请参考示例。
创建服务:
oc apply -f <service_name>.yaml
$ oc apply -f <service_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
service/<service_name> created
service/<service_name> created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
描述该服务:
oc describe service <service_name>
$ oc describe service <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.7. 使用 MetalLB 管理对称路由 复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过从 MetalLB、NMState 和 OVN-Kubernetes 实现功能来有效地管理带有多个主机接口的 MetalLB 负载均衡器服务后面的 pod 的流量。通过结合此上下文中的这些功能,您可以提供对称路由、流量隔离,并支持具有不同网络上的客户端及重叠 CIDR 地址。
要实现此功能,了解如何使用 MetalLB 实施虚拟路由和转发(VRF)实例,并配置出口服务。
使用带有 MetalLB 和出口服务的 VRF 实例配置对称流量只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
7.4.7.1. 使用 MetalLB 管理对称路由的挑战 复制链接链接已复制到粘贴板!
当您将 MetalLB 与多个主机接口搭配使用时,MetalLB 通过主机上的所有可用接口公开并宣布服务。这可能会造成与网络隔离、非对称返回流量和重叠 CIDR 地址相关的挑战。
确保返回流量达到正确的客户端的一个选项是使用静态路由。但是,使用这个解决方案,MetalLB 无法隔离服务,然后通过不同的接口声明每个服务。另外,静态路由需要手动配置,并在添加远程站点时需要维护。
在实现 MetalLB 服务时,对称路由的进一步挑战是外部系统预期应用程序的源和目标 IP 地址相同的情况。OpenShift Container Platform 的默认行为是将主机网络接口的 IP 地址分配为来自 pod 的流量的源 IP 地址。这在多个主机接口中存在问题。
您可以通过实施组合来自 MetalLB、NMState 和 OVN-Kubernetes 的功能的配置来解决这些挑战。
7.4.7.2. 使用带有 MetalLB 的 VRF 管理对称路由概述 复制链接链接已复制到粘贴板!
您可以使用 NMState 在主机上配置 VRF 实例、将 VRF 实例与 MetalLB BGPPeer
资源关联,以及为出口流量配置出口服务来克服实施对称路由的挑战。
图 7.7. 使用带有 MetalLB 的 VRF 管理对称路由的网络概述
配置过程涉及三个阶段:
1.定义 VRF 和路由规则
-
配置
NodeNetworkConfigurationPolicy
自定义资源 (CR),将 VRF 实例与网络接口关联。 - 使用 VRF 路由表直接入口和出口流量。
2.将 VRF 链接到 MetalLB BGPPeer
-
配置 MetalLB
BGPPeer
资源,以使用网络接口上的 VRF 实例。 -
通过将
BGPPeer
资源与 VRF 实例关联,指定的网络接口成为 BGP 会话的主接口,MetalLB 通过这个接口公告服务。
3.配置出口服务
- 配置出口服务,为出口流量选择与 VRF 实例关联的网络。
- 可选:将出口服务配置为使用 MetalLB 负载均衡器服务的 IP 地址作为出口流量的源 IP。
7.4.7.3. 使用带有 MetalLB 的 VRF 配置对称路由 复制链接链接已复制到粘贴板!
您可以为需要同一入口和出口网络路径的 MetalLB 服务后面的应用程序配置对称网络路由。
这个示例将 VRF 路由表与 MetalLB 和出口服务相关联,以便为 LoadBalancer
服务后面的 pod 启用对称路由。
-
如果您在
EgressService
CR 中使用sourceIPBy: "LoadBalancerIP"
设置,您必须在BGPAdvertisement
自定义资源 (CR) 中指定负载均衡器节点。 -
在使用带有
gatewayConfig.routingViaHost
规格设置为true
的 OVN-Kubernetes 的集群中,您可以使用sourceIPBy: "Network"
设置。另外,如果您使用sourceIPBy: "Network"
设置,您必须在使用网络 VRF 实例配置的节点上调度应用程序工作负载。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 安装 Kubernetes NMState Operator。
- 安装 MetalLB Operator。
流程
创建一个
NodeNetworkConfigurationPolicy
CR 来定义 VRF 实例:创建一个文件,如
node-network-vrf.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 策略的名称。
- 2
- 这个示例将策略应用到带有
vrf:true
标签的所有节点。 - 3
- 接口的名称。
- 4
- 接口的类型。这个示例创建了一个 VRF 实例。
- 5
- VRF 附加到的节点接口。
- 6
- VRF 的路由表 ID 的名称。
- 7
- 与 VRF 关联的接口的 IPv4 地址。
- 8
- 定义网络路由的配置。
next-hop-address
字段定义路由的下一跃点的 IP 地址。next-hop-interface
字段定义路由的传出接口。在本例中,VRF 路由表是2
,它引用您在EgressService
CR 中定义的 ID。 - 9
- 定义额外的路由规则。
ip-to
字段必须与Cluster Network
CIDR、Service Network
CIDR 和Internal Masquerade
子网 CIDR 匹配。您可以运行以下命令来查看这些 CIDR 地址规格的值:oc describe network.operator/cluster
。 - 10
- 计算路由时使用的 Linux 内核的主路由表的 ID 为
254
。
运行以下命令来应用策略:
oc apply -f node-network-vrf.yaml
$ oc apply -f node-network-vrf.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
BGPPeer
自定义资源 (CR):创建一个文件,如
frr-via-vrf.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要与 BGP peer 关联的 VRF 实例。MetalLB 可以公告服务并根据 VRF 中的路由信息做出路由决策。
运行以下命令,应用 BGP peer 的配置:
oc apply -f frr-via-vrf.yaml
$ oc apply -f frr-via-vrf.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
IPAddressPool
CR:创建一个文件,如
first-pool.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为 IP 地址池应用配置:
oc apply -f first-pool.yaml
$ oc apply -f first-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
BGPAdvertisement
CR:创建一个文件,如
first-adv.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,应用 BGP 公告的配置:
oc apply -f first-adv.yaml
$ oc apply -f first-adv.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
EgressService
CR:创建一个文件,如
egress-service.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定出口服务的名称。
EgressService
资源的名称必须与您要修改的负载均衡器服务的名称匹配。 - 2
- 指定出口服务的命名空间。
EgressService
的命名空间必须与您要修改的负载均衡器服务的命名空间匹配。egress 服务是命名空间范围的。 - 3
- 这个示例将
LoadBalancer
服务入口 IP 地址分配为出口流量的源 IP 地址。 - 4
- 如果为
sourceIPBy
规格指定LoadBalancer
,则单一节点处理LoadBalancer
服务流量。在本例中,只有标签vrf: "true"
的节点才能处理服务流量。如果没有指定节点,OVN-Kubernetes 会选择一个 worker 节点来处理服务流量。当选择节点时,OVN-Kubernetes 以以下格式标记节点:egress-service.k8s.ovn.org/<svc_namespace>-<svc_name>: ""
。 - 5
- 指定出口流量的路由表 ID。确保值与
NodeNetworkConfigurationPolicy
资源中定义的route-table-id
ID 匹配,例如route-table-id: 2
。
运行以下命令,为出口服务应用配置:
oc apply -f egress-service.yaml
$ oc apply -f egress-service.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证您可以访问 MetalLB 服务后运行的 pod 的应用程序端点:
curl <external_ip_address>:<port_number>
$ curl <external_ip_address>:<port_number>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 更新外部 IP 地址和端口号,以适合您的应用程序端点。
-
可选:如果您将
LoadBalancer
服务入口 IP 地址指定为出口流量的源 IP 地址,请使用tcpdump
等工具分析外部客户端接收的数据包,以此验证此配置。
7.4.8. 配置 MetalLB 和 FRR-K8s 的集成 复制链接链接已复制到粘贴板!
FRRouting (FRR) 是一个免费的开源互联网路由协议套件,用于 Linux 和 UNIX 平台。FRR-K8s
是基于 Kubernetes 的 DaemonSet,它以 Kubernetes 兼容的方式公开 FRR
API 的子集。作为集群管理员,您可以使用 FRRConfiguration
自定义资源 (CR) 访问 MetalLB 未提供的一些 FRR 服务,例如接收路由。MetalLB
生成 FRR-K8s
配置,对应于应用的 MetalLB 配置。
在配置虚拟路由转发(VRF)用户时,必须将其 VRF 改为小于 1000 的表 ID,因为 OpenShift Container Platform 保留大于 1000。
7.4.8.1. FRR 配置 复制链接链接已复制到粘贴板!
您可以创建多个 FRRConfiguration
CR,以便在 MetalLB
中使用 FRR
服务。MetalLB
生成一个 FRRConfiguration
对象,它 FRR-K8s
与所有用户创建的所有配置合并。
例如,您可以配置 FRR-K8s
,以接收给定邻居公告的所有前缀。以下示例将 FRR-K8s
配置为接收带有主机 172.18.0.5
的 BGPPeer
公告的所有前缀:
FRRConfiguration CR 示例
您还可以将 FRR-K8s 配置为始终阻止一组前缀,而不考虑应用的配置。这可用于避免到可能造成集群故障的 pod 或 ClusterIP
CIDR 的路由。以下示例阻止了一组前缀 192.168.1.0/24
:
MetalLB CR 示例
您可以将 FRR-K8s
设置为阻止 Cluster Network
CIDR 和 Service Network
CIDR。您可以运行以下命令来查看这些 CIDR 地址规格的值:
oc describe network.config/cluster
$ oc describe network.config/cluster
7.4.8.2. 配置 FRRConfiguration CRD 复制链接链接已复制到粘贴板!
以下部分提供了使用 FRRConfiguration
自定义资源 (CR) 的参考示例。
7.4.8.2.1. router 字段 复制链接链接已复制到粘贴板!
您可以使用 router
字段配置多个路由器,每个虚拟路由和转发 (VRF) 资源对应一个。对于每个路由器,您必须定义自主系统号 (ASN)。
您还可以定义要连接的边框网关协议 (BGP) 邻居列表,如下例所示:
FRRConfiguration CR 示例
7.4.8.2.2. toAdvertise 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s
不会公告配置为路由器配置的前缀。要公告它们,您可以使用 toAdvertise
字段。
您可以公告前缀的子集,如下例所示:
FRRConfiguration CR 示例
- 1
- 广告一个前缀子集。
以下示例演示了如何公告所有前缀:
FRRConfiguration CR 示例
- 1
- 公告所有前缀。
7.4.8.2.3. toReceive 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s
不处理邻居公告的任何前缀。您可以使用 toReceive
字段来处理此类地址。
您可以为前缀的子集配置,如下例所示:
FRRConfiguration CR 示例
以下示例将 FRR 配置为处理声明的所有前缀:
FRRConfiguration CR 示例
7.4.8.2.4. bgp 字段 复制链接链接已复制到粘贴板!
您可以使用 bgp
字段定义各种 BFD
配置集,并将它们与邻居关联。在以下示例中,BFD
备份 BGP
会话,FRR
可以检测链接失败:
FRRConfiguration CR 示例
7.4.8.2.5. nodeSelector 字段 复制链接链接已复制到粘贴板!
默认情况下,FRR-K8s
将配置应用到守护进程运行的所有节点。您可以使用 nodeSelector
字段指定要应用配置的节点。例如:
FRRConfiguration CR 示例
7.4.8.2.6. interface 字段 复制链接链接已复制到粘贴板!
spec.bgp.routers.neighbors.interface
字段只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
您可以使用 interface
字段配置 unnumbered BGP peering,使用以下示例配置:
FRRConfiguration
CR 示例
- 1
- 激活未编号的 BGP 对等。
要使用 interface
字段,您必须在两个 BGP 对等点之间建立点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。
如果使用此字段,则无法在 spec.bgp.routers.neighbors.address
字段中指定一个值。
FRRConfiguration
自定义资源的字段在下表中描述:
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 FRR 来配置的路由器(每个 VRF 一个)。 |
|
| 用于会话的本地后端的自主系统编号(ASN)。 |
|
|
指定 |
|
| 指定用于建立来自此路由器会话的主机 vrf。 |
|
| 指定要建立 BGP 会话的邻居。 |
|
|
指定用于会话远程结尾的 ASN。如果使用此字段,则无法在 |
|
|
检测用于会话远程端的 ASN,而不明确设置它。为具有相同 ASN 的邻居指定 |
|
|
指定要建立会话的 IP 地址。如果使用此字段,则无法在 |
|
|
指定建立会话时使用的接口名称。使用此字段配置未编号的 BGP 对等。必须有两个 BGP 对等点之间的点对点、第 2 层连接。您可以将未编号的 BGP 对等用于 IPv4、IPv6 或双栈,但您必须启用 IPv6 RAs (Router Advertisements)。每个接口都限制为一个 BGP 连接。 |
|
| 指定建立会话时要结束的端口。默认值为 179。 |
|
|
指定用来建立 BGP 会话的密码。 |
|
|
指定邻居的身份验证 secret 的名称。secret 必须是 "kubernetes.io/basic-auth" 类型,并且与 FRR-K8s 守护进程位于同一个命名空间中。密钥 "password" 将密码存储在 secret 中。 |
|
| 根据 RFC4271 指定请求的 BGP 保留时间。默认为 180s。 |
|
|
根据 RFC4271 指定请求的 BGP keepalive 时间。默认值为 |
|
| 指定 BGP 在连接尝试到邻居之间等待的时间。 |
|
| 指明 BGPPeer 是否离开了多跃点。 |
|
| 指定用于与 BGP 会话关联的 BFD 会话的 BFD Profile 名称。如果没有设置,则不会设置 BFD 会话。 |
|
| 表示要公告给邻居的前缀列表,以及相关的属性。 |
|
| 指定要公告到邻居的前缀列表。此列表必须与您在路由器中定义的前缀匹配。 |
|
|
指定处理前缀时要使用的模式。您可以将 |
|
| 指定与公告的本地首选项关联的前缀。您必须在允许公告的前缀中指定与本地首选项关联的前缀。 |
|
| 指定与本地首选项关联的前缀。 |
|
| 指定与前缀关联的本地首选项。 |
|
| 指定与公告的 BGP 社区关联的前缀。您必须在您要公告的前缀列表中包含与本地首选项关联的前缀。 |
|
| 指定与社区关联的前缀。 |
|
| 指定与前缀关联的社区。 |
|
| 指定要从邻居接收的前缀。 |
|
| 指定要从邻居接收的信息。 |
|
| 指定来自邻居的前缀。 |
|
|
指定处理前缀时要使用的模式。当设置为 |
|
| 禁用 MP BGP 以防止它将 IPv4 和 IPv6 路由划分为不同的 BGP 会话。 |
|
| 指定从此路由器实例公告的所有前缀。 |
|
| 指定配置邻居时要使用的 bfd 配置集列表。 |
|
| 要在配置的其他部分中引用的 BFD 配置集的名称。 |
|
|
指定此系统可以接收控制数据包的最小间隔(以毫秒为单位)。默认值为 |
|
|
指定排除 jitter 的最小传输间隔,此系统希望用来发送 BFD 控制数据包(以毫秒为单位)。默认值为 |
|
| 配置检测倍数以确定数据包丢失。要确定连接丢失检测计时器,请将远程传输间隔乘以这个值。 |
|
|
配置此系统可以处理的最小 echo receive transfer-interval (以毫秒为单位)。默认值为 |
|
| 启用或禁用回显传输模式。这个模式默认为禁用,在多跃点设置中不支持。 |
|
| 将会话标记为被动。被动会话不会尝试启动连接,并在开始回复前等待来自对等的控制数据包。 |
|
| 仅限多跃点会话。为传入的 BFD 控制数据包配置最低预期 TTL。 |
|
| 限制尝试应用此配置的节点。如果指定,则只有标签与指定选择器匹配的节点才会应用配置。如果没有指定,则所有节点都会尝试应用此配置。 |
|
| 定义 FRRConfiguration 的观察状态。 |
7.4.8.3. FRR-K8s 如何合并多个配置 复制链接链接已复制到粘贴板!
如果多个用户添加选择同一节点的配置,FRR-K8s
会合并配置。每个配置都只能扩展其他配置。这意味着,可以添加新的邻居到路由器,或向邻居公告额外的前缀,但不能删除由其他配置添加的组件。
7.4.8.3.1. 配置冲突 复制链接链接已复制到粘贴板!
某些配置可能会导致冲突,从而导致错误,例如:
- 同一路由器的不同 ASN (在同一 VRF 中)
- 同一邻居的不同 ASN (具有相同 IP / 端口)
- 多个带有相同名称的 BFD 配置集,但不同的值
当守护进程为节点找到无效的配置时,它会将配置报告为无效,并恢复到之前有效的 FRR
配置。
7.4.8.3.2. 合并 复制链接链接已复制到粘贴板!
在合并时,可以执行以下操作:
- 将您要公告的 IP 集合扩展到邻居。
- 使用 IP 集合添加额外的邻居。
- 扩展您要关联社区的 IP 集合。
- 允许邻居的传入路由。
每个配置都必须自包含。例如,通过利用来自其他配置的前缀,不允许在路由器部分中定义的前缀。
如果要应用的配置兼容,则合并可以正常工作,如下所示:
-
frr-K8s
结合了所有路由器。 -
frr-K8s
合并每个路由器的所有前缀和邻居。 -
frr-K8s
合并每个邻居的所有过滤器。
不太严格的过滤会优先于更严格的过滤。例如,接受某些前缀的过滤会优先于不接受任何前缀的过滤,接受所有前缀的过滤优先于接受部分前缀的过滤。
7.4.9. MetalLB 日志记录、故障排除和支持 复制链接链接已复制到粘贴板!
如果您需要对 MetalLB 配置进行故障排除,请查看以下部分来了解常用命令。
7.4.9.1. 设置 MetalLB 日志记录级别 复制链接链接已复制到粘贴板!
MetalLB 在带有默认设置 info
的容器中使用 FRRouting(FRR)会生成大量日志。您可以通过设置 logLevel
来控制生成的日志的详细程度,如下例所示。
通过将 logLevel
设置为 debug
来深入了解 MetalLB,如下所示:
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
创建一个文件,如
setdebugloglevel.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置:
oc replace -f setdebugloglevel.yaml
$ oc replace -f setdebugloglevel.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意使用
oc replace
可以被理解为,metallb
CR 已被创建,您在此处更改了日志级别。显示
speaker
pod 的名称:oc get -n metallb-system pods -l component=speaker
$ oc get -n metallb-system pods -l component=speaker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE speaker-2m9pm 4/4 Running 0 9m19s speaker-7m4qw 3/4 Running 0 19s speaker-szlmx 4/4 Running 0 9m19s
NAME READY STATUS RESTARTS AGE speaker-2m9pm 4/4 Running 0 9m19s speaker-7m4qw 3/4 Running 0 19s speaker-szlmx 4/4 Running 0 9m19s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意重新创建发言人和控制器 Pod,以确保应用更新的日志记录级别。对于 MetalLB 的所有组件,会修改日志记录级别。
查看
speaker
日志:oc logs -n metallb-system speaker-7m4qw -c speaker
$ oc logs -n metallb-system speaker-7m4qw -c speaker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 FRR 日志:
oc logs -n metallb-system speaker-7m4qw -c frr
$ oc logs -n metallb-system speaker-7m4qw -c frr
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.9.1.1. FRRouting(FRR)日志级别 复制链接链接已复制到粘贴板!
下表描述了 FRR 日志记录级别。
日志级别 | 描述 |
---|---|
| 为所有日志记录级别提供所有日志信息。 |
|
这些信息有助于相关人员进行问题诊断。设置为 |
| 提供始终应记录的信息,但在正常情况下,不需要用户干预。这是默认的日志记录级别。 |
|
任何可能导致 |
|
对 |
| 关闭所有日志。 |
7.4.9.2. BGP 故障排除问题 复制链接链接已复制到粘贴板!
作为集群管理员,如果您需要对 BGP 配置问题进行故障排除,您需要在 FRR 容器中运行命令。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令,显示
frr-k8s
pod 的名称:oc -n metallb-system get pods -l component=frr-k8s
$ oc -n metallb-system get pods -l component=frr-k8s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE frr-k8s-thsmw 6/6 Running 0 109m
NAME READY STATUS RESTARTS AGE frr-k8s-thsmw 6/6 Running 0 109m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令显示 FRR 的运行配置:
oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show running-config"
$ oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show running-config"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令显示 BGP 概述:
oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show bgp summary"
$ oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show bgp summary"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,显示接收地址池的 BGP 对等点:
oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show bgp ipv4 unicast 203.0.113.200/30"
$ oc exec -n metallb-system frr-k8s-thsmw -c frr -- vtysh -c "show bgp ipv4 unicast 203.0.113.200/30"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ipv4
替换为ipv6
,以显示接收 IPv6 地址池的 BGP 对等点。将203.0.113.200/30
替换为地址池的 IPv4 或 IPv6 IP 地址范围。输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 确认输出中包含 BGP peer 的 IP 地址。
7.4.9.3. BFD 问题故障排除 复制链接链接已复制到粘贴板!
红帽支持双向转发检测(BFD)实施,在 speaker
Pod 中使用 FRRouting(FRR)。BFD 实施依赖于 BFD 对等点,也被配置为带有已建立的 BGP 会话的 BGP 对等点。作为集群管理员,如果您需要排除 BFD 配置问题,则需要在 FRR 容器中运行命令。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
显示
speaker
pod 的名称:oc get -n metallb-system pods -l component=speaker
$ oc get -n metallb-system pods -l component=speaker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE speaker-66bth 4/4 Running 0 26m speaker-gvfnf 4/4 Running 0 26m ...
NAME READY STATUS RESTARTS AGE speaker-66bth 4/4 Running 0 26m speaker-gvfnf 4/4 Running 0 26m ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 BFD 对等点:
oc exec -n metallb-system speaker-66bth -c frr -- vtysh -c "show bfd peers brief"
$ oc exec -n metallb-system speaker-66bth -c frr -- vtysh -c "show bfd peers brief"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Session count: 2 SessionId LocalAddress PeerAddress Status ========= ============ =========== ====== 3909139637 10.0.1.2 10.0.2.3 up <.>
Session count: 2 SessionId LocalAddress PeerAddress Status ========= ============ =========== ====== 3909139637 10.0.1.2 10.0.2.3 up <.>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
PeerAddress
列包含每个 BFD 对等点。如果输出没有列出输出要包含的 BFD peer IP 地址,并与 peer 对 BGP 连接性进行故障排除。如果状态字段显示down
,请检查在节点和对等点间的链接和设备连接。您可以使用oc get pods -n metallb-system speaker-66bth -o jsonpath='{.spec.nodeName}'
命令确定 speaker pod 的节点名称。
7.4.9.4. BGP 和 BFD 的 MetalLB 指标 复制链接链接已复制到粘贴板!
OpenShift Container Platform 捕获与 BGP peer 和 BFD 配置集相关的 MetalLB 的以下 Prometheus 指标。
Name | 描述 |
---|---|
| 统计从每个 BFD peer 接收的 BFD 控制数据包的数量。 |
| 统计发送到每个 BFD 对等点的 BFD 控制数据包的数量。 |
| 统计从每个 BFD 对等点接收的 BFD 回显数据包的数量。 |
| 计算发送到每个 BFD 的 BFD 回显数据包的数量。 |
|
统计 BFD 会话进入 |
|
指示与 BFD 对等点的连接状态。 |
|
统计 BFD 会话进入 |
| 统计每个 BFD Zebra 通知的数量。 |
Name | 描述 |
---|---|
| 计算公告给 BGP 对等的负载均衡器 IP 地址前缀的数量。术语 前缀(prefix) 和聚合路由(aggregated route) 具有相同的含义。 |
|
指示与 BGP 对等点的连接状态。 |
| 计算发送到每个 BGP 对等点的 BGP 更新消息数量。 |
| 计算发送到每个 BGP 对等点的 BGP 打开消息数量。 |
| 计算从每个 BGP 对等点接收的 BGP 打开消息的数量。 |
| 计算发送到每个 BGP 对等点的 BGP 通知消息数量。 |
| 计算从每个 BGP 对等点接收的 BGP 更新消息数量。 |
| 计算发送到每个 BGP 对等点的 BGP keepalive 消息数量。 |
| 计算从每个 BGP 对等点接收的 BGP keepalive 消息数量。 |
| 计算发送到每个 BGP 对等点的 BGP 路由刷新消息的数量。 |
| 计算发送到每个 BGP 对等点的 BGP 消息总数。 |
| 计算从每个 BGP 对等点接收的 BGP 消息总数。 |
其他资源
- 有关使用监控仪表板的信息,请参阅使用监控仪表板查询所有项目的指标。
7.4.9.5. 关于收集 MetalLB 数据 复制链接链接已复制到粘贴板!
您可以使用 oc adm must-gather
CLI 命令来收集有关集群、MetalLB 配置和 MetalLB Operator 的信息。以下功能和对象与 MetalLB 和 MetalLB Operator 关联:
- 在其中部署 MetalLB Operator 的命名空间和子对象
- 所有 MetalLB Operator 自定义资源定义(CRD)
oc adm must-gather
CLI 命令会收集红帽用来实施 BGP 和 BFD 的 FRRouting(FRR)的以下信息:
-
/etc/frr/frr.conf
-
/etc/frr/frr.log
-
/etc/frr/daemons
配置文件 -
/etc/frr/vtysh.conf
上述列表中的日志和配置文件从每个 speaker
pod 中的 frr
容器收集。
除了日志和配置文件外,oc adm must-gather
CLI 命令还会从以下 vtysh
命令收集输出:
-
show running-config
-
show bgp ipv4
-
show bgp ipv6
-
show bgp neighbor
-
show bfd peer
运行 oc adm must-gather
CLI 命令时不需要额外的配置。
其他资源