创建外部 IP 地址池

外部 IP 地址池是一个 IP 集合,MetalLB 使用它为 LoadBalancer 类型的内部路由获取外部访问 IP。

NOTE

从 ACP 4.5 开始,Alauda Container Platform Load Balancer for MetalLB 更名为 Alauda Container Platform Load Balancer。从 Customer Portal 下载插件时,请搜索 Alauda Container Platform Load Balancer。重命名前发布的插件包上传后,在平台中仍显示为 Alauda Container Platform Load Balancer for MetalLB。

前提条件

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

约束和限制

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

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

  • 这些 IP 必须可供平台使用,且不能包含物理网络中已在使用的 IP,例如网关 IP。

  • 不得与集群使用的网络重叠,包括 Cluster CIDR、Service CIDR、子网等。

  • 在双栈环境中,请确保同一外部地址池中同时包含 IPv4 和 IPv6 地址,且两者的数量都大于 0。否则,双栈 LoadBalancer 类型的内部路由将无法获取外部访问地址。

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

部署 MetalLB 插件

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

  1. 前往平台管理。

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

  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

问:L2Advertisement 是什么?

答:

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

问:L2Advertisement 的用途是什么?

答:

  1. 指定要在二层中通过 ARP/NDP 通告的 IPAddressPool 中的 IP 地址;

  2. 控制广播行为,以避免 IP 冲突或跨网段广播;

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

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

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

问:MetalLB 中的 BGPAdvertisement 是什么?

答:

BGPAdvertisement 是 Kubernetes Custom Resource Definition(CRD),用于 MetalLB。MetalLB 是适用于裸机 Kubernetes 集群的负载均衡器实现。它控制如何通过 BGP(边界网关协议)向外部网络通告 IPAddressPool 中定义的 IP 地址范围。

问:为什么 BGPAdvertisement 很重要?

答:

在 MetalLB 的 BGP 模式下,controller 使用 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 范围格式输入。点击添加以支持添加多个条目,示例如下:
    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. 点击创建。

使用 CLI 创建外部 IP 地址池

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

查看告警策略

  1. 前往平台管理。

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

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