配置 MetalLB

前提条件

在继续之前,请确保您已阅读 安装 文档。

通过 Web 控制台配置外部 IP 地址池

  1. 进入 管理员

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

  3. 单击 创建外部 IP 地址池

  4. 参考以下说明配置某些参数。

    参数说明
    类型
    • L2:基于 MAC 地址进行通信和转发,适用于需要简单、快速二层交换的小规模或局域网,具有配置简单、延迟低的优势。
    • BGP (Alpha):基于 IP 地址进行路由和转发,使用 BGP 协议交换路由信息,适用于需要跨多个自治系统进行复杂路由的大规模网络,具有高扩展性和高可靠性的优势。
    IP 资源支持以 CIDR 和 IP 范围格式输入。单击 添加 可支持多个条目,例如:
    CIDR: 192.168.1.1/24.
    IP Range: 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 Multi-Hop允许在未直接连接的 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 监控面板包含以下图表:

图表说明
已暴露的 Services当前由 MetalLB 广播的 LoadBalancer Service 数量。
可用 IP所有地址池中仍可用的 IP 地址数量。
已建立的 BGP 会话当前已建立的 BGP 会话数量。
已广播的前缀当前由 MetalLB 广播的 BGP 前缀数量。
地址池使用趋势所选地址池的 IP 地址使用趋势。
所选地址池容量所选地址池中已使用和可用的 IP 地址容量。

访问 MetalLB 指标端点

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

检查 MetalLB monitor Services:

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表示是否从某个 speaker 节点广播了 LoadBalancer Service。检查哪些节点广播了 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 范围和命名空间
Pods 发生 CrashLoopSpeaker 或 Controller 缺少 RBAC 权限检查 Operator 权限
BGP 未建立AS 编号不匹配或对端不可达检查 BGPPeer 规范和网络路由
L2 不工作VLAN 错误或 ARP 过滤使用 arping 验证广播可达性

查看更多 MetalLB 故障排查