创建外部 IP 地址池

外部 IP 地址池是 MetalLB 用于为 LoadBalancer 类型的内部路由获取外部访问 IP 的 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 提供的自定义资源 (CRD),用于控制在 Layer 2 模式下通过 ARP (IPv4) 或 NDP (IPv6) 广播哪些 IP 地址池地址。

问:L2Advertisement 的用途是什么?

答:

  1. 指定将 IPAddressPool 中的哪些 IP 地址通过 L2 广播(ARP/NDP 通告);

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

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

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

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

问:MetalLB 中的 BGPAdvertisement 是什么?

答:

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

问:BGPAdvertisement 为什么重要?

答:

在 MetalLB 的 BGP 模式下,controller 使用 BGP 与外部路由器建立对等连接,并通告分配给 Kubernetes Service 对象的 IP。BGPAdvertisement 资源允许你:

  • 控制要通告哪些地址池

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

    • 路由聚合

    • BGP 社区

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

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

使用 web 控制台创建外部 IP 地址池

  1. 进入管理员。

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

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

  4. 参考以下说明配置相应参数。

    参数描述
    类型
    • L2:基于 MAC 地址进行通信和转发,适用于需要简单、快速 Layer 2 交换的小型或本地区域网络,具有配置简单、延迟低等优势。
    • 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 的通用告警策略。