配置 MetalLB

先决条件

继续操作前,请确保已阅读 安装文档。

配置 MetalLB 组件

安装集群插件后,配置 MetalLB 自定义资源的 spec.controllerNodeSelector、spec.controllerTolerations、spec.nodeSelector 和 spec.speakerTolerations 字段。有关配置示例及其与 L2Advertisement.spec.nodeSelectors 的关系,请参阅配置组件放置。

若要调整 controller 和 speaker 的日志级别,请在同一资源上设置 spec.logLevel。有关支持的值,请参阅调整日志级别。

使用 Web 控制台配置外部 IP 地址池

  1. 前往管理员。

  2. 在左侧导航栏中,点击网络管理 > 外部 IP 地址池。

  3. 点击创建外部 IP 地址池。

  4. 按照以下说明配置相应参数。

    参数描述
    类型
    • L2:基于 MAC 地址进行通信和转发,适用于需要简单、快速二层交换的小型或局域网,具有配置简单、延迟低等优点。
    • BGP(Alpha):基于 IP 地址进行路由和转发,使用 BGP 协议交换路由信息,适用于需要跨多个自治系统进行复杂路由的大型网络,具有可扩展性高、可靠性强等优点。
    IP 资源支持输入 CIDR 和 IP 范围格式。点击添加以添加多个条目,例如:
    CIDR:192.168.1.1/24。
    IP 范围:192.168.2.1 ~ 192.168.2.255。
    可用节点在 L2 模式下,可用节点用于承载所有 VIP 流量;在 BGP 模式下,可用节点用于承载 VIP、与对等体建立 BGP 连接以及向外部通告路由。
    • 节点名称:根据节点名称选择可用节点。
    • 标签选择器:根据标签选择可用节点。
    • 显示节点详情:以列表形式查看最终的可用节点。
    注意:
    • 使用 BGP 类型时,可用节点是下一跳节点;请确保所选可用节点是 BGP 连接节点的子集。
    • 可以单独配置标签选择器或节点名称来选择可用节点;如果同时配置两者,最终的可用节点将是二者的交集。
    BGP 对等体选择 BGP 对等体;具体配置请参阅 BGP 对等体。
  5. 点击创建。

使用 Web 控制台配置 BGP 对等体

  1. 前往管理员。

  2. 在左侧导航栏中,点击网络管理 > BGP 对等体。

  3. 点击创建 BGP 对等体。

  4. 按照以下说明配置相应参数。

    参数描述
    本地 AS 编号BGP 连接节点所在 AS 的 AS 编号。

    注意:如果没有特殊要求,建议使用 IBGP 配置,即本地 AS 编号应与对等体 AS 编号一致。
    对等体 AS 编号BGP 对等体所在 AS 的 AS 编号。
    对等体 IPBGP 对等体的 IP 地址,必须是能够建立 BGP 连接的有效 IP 地址。
    本地 IPBGP 连接节点的 IP 地址。如果 BGP 连接节点有多个 IP,请选择指定的本地 IP,以便与对等体建立 BGP 连接。
    对等体端口BGP 对等体的端口号。
    BGP 连接节点建立 BGP 连接的节点。如果未配置此参数,则所有节点都会建立 BGP 连接。
    eBGP 多跳允许在未直接连接的 BGP 路由器之间建立 BGP 会话。启用此功能后,BGP 数据包的默认 TTL 值为 5,从而允许跨多个中间网络设备建立 BGP 对等关系,使网络设计更加灵活。
    RouterID一个 32 位数值(通常采用类似 IPv4 地址格式的点分十进制格式表示),用于在 BGP 网络中唯一标识 BGP 路由器,通常用于建立 BGP 邻居关系、检测路由环路、选择最佳路径以及排查网络问题。
  5. 点击创建。

注意:
使用 BGP 模式时,请允许每个 BGP 对等体与 MetalLB speaker 节点之间的 TCP 端口 179 通信。如果配置了自定义对等体端口,请改为允许配置的端口。

使用 CLI 通过 L2Advertisement 或 BGPAdvertisement 配置外部 IP 地址池

# ippool-with-L2advertisement.yaml
kind: IPAddressPool
apiVersion: metallb.io/v1beta1
metadata:
  name: test-ippool
  namespace: metallb-system
spec:
  addresses:
    - 13.1.1.1/24
  avoidBuggyIPs: true
---
kind: L2Advertisement
apiVersion: metallb.io/v1beta1
metadata:
  name: test-ippool
  namespace: metallb-system
spec:
  ipAddressPools:
    - test-ippool
  nodeSelectors:
    - matchLabels: {}
      matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
            - 192.168.66.210

BGP 模式

# ippool-with-bgpadvertisement.yaml
kind: IPAddressPool
apiVersion: metallb.io/v1beta1
metadata:
  name: test-pool-bgp
  namespace: metallb-system
spec:
  addresses:
    - 4.4.4.3/23
  avoidBuggyIPs: true
---
kind: BGPAdvertisement
apiVersion: metallb.io/v1beta1
metadata:
  name: test-pool-bgp
  namespace: metallb-system
spec:
  ipAddressPools:
    - test-pool-bgp
  nodeSelectors:
    - matchLabels:
        alertmanager: 'true'
  peers:
    - test-bgp-example
kubectl apply -f ippool-with-L2advertisement.yaml -f ippool-with-bgpadvertisement.yaml

监控 MetalLB

配置 MetalLB 后,您可以使用内置监控面板和监控指标来观察 IP 地址分配和 BGP 会话状态。

注意:
内置 MetalLB 监控面板在 ACP 4.4 中可用。

查看内置 MetalLB 监控面板

  1. 前往运维中心。

  2. 在左侧导航栏中,点击监控 > 监控面板。

  3. 搜索 MetalLB,然后打开监控面板。

内置 MetalLB 监控面板包含以下图表:

图表描述
已暴露的 ServiceMetalLB 当前已通告的 LoadBalancer Service 数量。
可用 IP所有地址池中仍可用的 IP 地址数量。
已建立的 BGP 会话当前已建立的 BGP 会话数量。
已通告的前缀MetalLB 当前通告的 BGP 前缀数量。
地址池使用趋势所选地址池的 IP 地址使用趋势。
所选地址池容量所选地址池中已使用和可用的 IP 地址容量。

访问 MetalLB 指标端点

MetalLB 通过 metallb-system 命名空间中的监控 Service 暴露 controller 和 speaker 指标。您可以从集群内部访问这些指标,以确认组件是否正确暴露指标。

检查 MetalLB 监控 Service:

kubectl get svc -n metallb-system | grep monitor

检查 Service 端点:

kubectl get endpointslice -n metallb-system -l kubernetes.io/service-name=controller-monitor-service
kubectl get endpointslice -n metallb-system -l kubernetes.io/service-name=speaker-monitor-service

端点地址默认使用端口 17472。

从集群内部查询 controller 指标端点:

curl -s http://<controller-endpoint-address>:17472/metrics | grep '^metallb_'

从集群内部查询 speaker 指标端点:

curl -s http://<speaker-endpoint-address>:17472/metrics | grep '^metallb_'

如果命令返回 MetalLB 指标,则表示组件指标端点可用。

MetalLB 指标参考

内置 MetalLB 监控面板使用以下指标:

指标源组件描述使用场景
metallb_speaker_announcedSpeaker指示 LoadBalancer Service 是否由 speaker 节点进行通告。检查哪些节点通告 LoadBalancer Service。
metallb_allocator_addresses_totalController地址池中的 IP 地址总数。计算地址池总容量和可用 IP 数量。
metallb_allocator_addresses_in_use_totalController地址池中已分配的 IP 地址数量。计算已使用的 IP 数量和地址池使用趋势。
metallb_bgp_session_upSpeaker / BGP exporter指示 BGP 会话是否已建立。检查 BGP 会话运行状况。
metallb_bgp_announced_prefixes_totalSpeaker / BGP exporterMetalLB 通告的 BGP 前缀数量。检查路由通告状态。

MetalLB 故障排除

症状可能原因解决方法
未分配外部 IP没有有效的 IPAddressPool 或地址池配置错误验证 IP 范围和命名空间
Pod 进入 CrashLoopSpeaker 或 Controller 缺少 RBAC 配置检查 Operator 权限
BGP 未建立ASN 不匹配或无法访问对等方检查 BGPPeer spec 和网络路由
L2 无法正常工作VLAN 错误或 ARP 过滤使用 arping 验证广播可达性

要查看更多信息,请参阅 MetalLB 故障排除