配置 MetalLB

前提条件

请确保您已阅读安装文档后再继续操作。

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

  1. 进入 Administrator

  2. 在左侧导航栏中,点击 Network Management > External IP Address Pool

  3. 点击 Create External IP Address Pool

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

    参数说明
    Type
    • L2:基于 MAC 地址的通信和转发,适用于需要简单快速二层交换的小规模或局域网,具有配置简单和低延迟的优势。
    • BGP (Alpha):基于 IP 地址的路由和转发,使用 BGP 协议交换路由信息,适用于需要跨多个自治系统复杂路由的大规模网络,具有高扩展性和可靠性的优势。
    IP Resources支持 CIDR 和 IP 范围格式输入。点击 Add 支持多条输入,示例如下:
    CIDR192.168.1.1/24
    IP 范围192.168.2.1 ~ 192.168.2.255
    Available Nodes在 L2 模式下,可用节点是用于承载所有 VIP 流量的节点;在 BGP 模式下,可用节点是用于承载 VIP、与对等体建立 BGP 连接并对外宣布路由的节点。
    • 节点名称:根据节点名称选择可用节点。
    • 标签选择器:根据标签选择可用节点。
    • 显示节点详情:以列表形式查看最终的可用节点。
    注意
    • 使用 BGP 类型时,可用节点为下一跳节点;确保所选可用节点是 BGP 连接节点的子集。
    • 可单独配置标签选择器或节点名称选择可用节点;若同时配置,最终可用节点为两者的交集。
    BGP Peers选择 BGP 对等体;具体配置请参考 BGP Peers
  5. 点击 Create

通过 Web 控制台配置 BGP Peers

  1. 进入 Administrator

  2. 在左侧导航栏中,点击 Network Management > BGP Peers

  3. 点击 Create BGP Peer

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

    参数说明
    Local AS NumberBGP 连接节点所在自治系统的 AS 号。

    注意:若无特殊需求,建议使用 IBGP 配置,即本地 AS 号应与对等体 AS 号保持一致。
    Peer AS NumberBGP 对等体所在自治系统的 AS 号。
    Peer IPBGP 对等体的 IP 地址,必须是能够建立 BGP 连接的有效 IP 地址。
    Local IPBGP 连接节点的 IP 地址。当 BGP 连接节点有多个 IP 时,选择指定的本地 IP 与对等体建立 BGP 连接。
    Peer PortBGP 对等体的端口号。
    BGP-Connected Node建立 BGP 连接的节点。若不配置此参数,则所有节点均建立 BGP 连接。
    eBGP Multi-Hop允许在非直接相连的 BGP 路由器之间建立 BGP 会话。启用此功能时,BGP 包的默认 TTL 值为 5,允许跨多个中间网络设备建立 BGP 对等关系,使网络设计更灵活。
    RouterID一个 32 位数字值(通常以点分十进制格式表示,类似 IPv4 地址格式),用于唯一标识 BGP 网络中的 BGP 路由器,通常用于建立 BGP 邻居关系、检测路由环路、选择最优路径以及排查网络问题。
  5. 点击 Create

通过 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 故障排除

现象可能原因解决方案
未分配外部 IP无有效 IPAddressPool 或池配置错误验证 IP 范围和命名空间
Pod CrashLoopSpeaker 或 Controller 缺少 RBAC 权限检查 Operator 权限
BGP 未建立ASN 不匹配或对等体不可达检查 BGPPeer 规范和网络路由
L2 不工作VLAN 配置错误或 ARP 过滤使用 arping 验证广播可达性

查看更多内容请访问 Troubleshooting MetalLB