配置 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用于在 BGP 网络中唯一标识 BGP 路由器的 32 位数值(通常采用类似 IPv4 地址格式的点分十进制格式),一般用于建立 BGP 邻居关系、检测路由环路、选择最佳路径以及排查网络问题。
  5. 点击创建。

使用 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 进入 CrashLoop 状态Speaker 或 Controller 缺少 RBAC 权限检查 Operator 权限
BGP 未建立ASN 不匹配或对等方不可达检查 BGPPeer spec 和网络路由
L2 无法正常工作VLAN 错误或 ARP 过滤使用 arping 验证广播可达性

如需了解更多信息,请参阅 MetalLB 故障排除