配置 Alauda Container Platform 负载均衡器

前提条件

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

配置 MetalLB 组件

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

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

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

  1. 前往管理员。

  2. 在左侧导航栏中,依次点击网络 > 外部 IP > 外部 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. 在左侧导航栏中,点击网络 > 外部 IP > 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. 点击创建。

注意: 使用 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 反复崩溃重启缺少 Speaker 或 Controller RBAC检查 operator 权限
BGP 未建立ASN 不匹配或对等端不可达检查 BGPPeer spec 和网络路由
L2 无法正常工作VLAN 配置错误或 ARP 过滤使用 arping 验证广播可达性

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

商标声明

MetalLB™ 是 The Linux Foundation 的商标。

Alauda 是独立供应商。本产品与 The Linux Foundation 不存在关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处仅用于标识目的。