创建外部 IP 地址池

外部 IP 地址池是一组 IP,MetalLB 利用这些 IP 来获取负载均衡器类型内部路由的外部访问 IP。

目录

前提条件

如果您需要使用 BGP 类型的外部 IP 地址池,请联系管理员以启用相关功能。

约束与限制

外部地址的 IP 资源必须满足以下条件:

  • 外部地址池必须与可用节点以第二层(L2)互联。

  • IP 必须可以被平台使用,且不能包括物理网络中已使用的 IP,例如网关 IP。

  • 必须与集群使用的网络没有重叠,包括集群 CIDR、服务 CIDR、子网等。

  • 在双栈环境中,确保同时在同一外部地址池中存在 IPv4 和 IPv6 地址,且它们的数量都大于 0。否则,双栈负载均衡器类型的内部路由将无法获取外部访问地址。

  • 在 IPv6 环境中,节点的 DNS 必须支持 IPv6;否则,MetalLB 插件无法成功部署。

部署 MetalLB 插件

使用外部地址池依赖于 MetalLB 插件。

  1. 进入 平台管理

  2. 在左侧导航栏中,点击 市场 > 集群插件

  3. 搜索 MetalLB,点击 MetalLB 右侧的 ⋮ > 部署

  4. 等待部署状态显示 部署成功 以完成部署。

示例 IPAddressPool 自定义资源 (CR)

# 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
  1. IP 池参考。
INFO

Q: 什么是 L2Advertisement

A:

  1. L2Advertisement 是 MetalLB 提供的自定义资源 (CRD),用于控制哪些 IP 地址池的地址应通过 ARP (IPv4) 或 NDP (IPv6) 在第二层模式下广播。

Q: L2Advertisement 的目的是什么?

A:

  1. 指定在 IPAddressPool 中哪些 IP 地址进行 L2 广播 (ARP/NDP 广告);

  2. 控制广播行为以防止 IP 冲突或跨段广播;

  3. 在多 NIC、多网络环境中限制广播范围。

简而言之,它告诉 MetalLB:哪些 IP 可以广播,广播给谁(例如,哪些节点)。

在第二层模式下,如果未定义 L2Advertisement,MetalLB 将不会广播任何地址。

Q: MetalLB 中的 BGPAdvertisement 是什么?

A:

BGPAdvertisement 是 Kubernetes 自定义资源定义 (CRD),用于 MetalLB,这是一个用于裸金属 Kubernetes 集群的负载均衡器实现。它控制如何通过 BGP (边界网关协议) 将 IP 地址范围(在 IPAddressPool 中定义)通告给外部网络。

Q: BGPAdvertisement 重要吗?

A:

在 MetalLB 的 BGP 模式下,控制器与外部路由器通过 BGP 建立对等关系,并通告分配给 Kubernetes Service 对象的 IP。BGPAdvertisement 资源允许您:

  • 控制哪些地址池被通告

  • 自定义路由通告设置,例如:

    • 路由聚合

    • BGP 社区

    • 本地优先级 (BGP 优先级)

如果未定义 BGPAdvertisement,即使您已配置 BGP 对等体,MetalLB 也不会通告任何地址。

通过 Web 控制台创建外部 IP 地址池

  1. 进入 平台管理

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

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

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

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

通过 CLI 创建外部 IP 地址池

kubectl apply -f ippool-with-L2advertisement.yaml -f ippool-with-bgpadvertisement.yaml

查看告警策略

  1. 进入 平台管理

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

  3. 点击页面右上角的 查看告警策略 以查看 MetalLB 的通用告警策略。