创建外部 IP 地址池

外部 IP 地址池是 MetalLB 用于获取 LoadBalancer 类型内部路由的外部访问 IP 的 IP 集合。

目录

前提条件

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

约束与限制

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

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

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

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

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

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

部署 MetalLB 插件

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

  1. 进入 Administrator

  2. 在左侧导航栏点击 Marketplace > Cluster Plugin

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

  4. 等待部署状态显示 Deployment Successful 即完成部署。

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),用于控制在二层模式下通过 ARP(IPv4)或 NDP(IPv6)广播哪些 IP 地址池中的地址。

问:L2Advertisement 的作用是什么?

答:

  1. 指定 IPAddressPool 中哪些 IP 地址需要进行二层广播(ARP/NDP 广播);

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

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

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

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

问:MetalLB 中的 BGPAdvertisement 是什么?

答:

BGPAdvertisement 是 Kubernetes 的自定义资源定义(CRD),用于 MetalLB 中,控制如何通过 BGP(边界网关协议)向外部网络广播 IP 地址范围(定义在 IPAddressPool 中)。

问:为什么 BGPAdvertisement 很重要?

答:

在 MetalLB 的 BGP 模式中,控制器通过 BGP 与外部路由器建立对等连接,并广播分配给 Kubernetes Service 对象的 IP。BGPAdvertisement 资源允许你:

  • 控制广播哪些地址池

  • 自定义路由广播设置,如:

    • 路由聚合

    • BGP 社区属性

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

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

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

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > External IP Address Pool

  3. 点击 Create External IP Address Pool

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

    参数说明
    Type
    • L2:基于 MAC 地址的通信和转发,适用于需要简单快速二层交换的小规模或局域网,优点是配置简单、延迟低。
    • BGP(Alpha):基于 IP 地址的路由和转发,使用 BGP 协议交换路由信息,适合需要跨多个自治系统复杂路由的大规模网络,优点是高扩展性和可靠性。
    IP Resources支持 CIDR 和 IP 范围格式输入。点击 Add 支持多条输入,示例如下:
    CIDR192.168.1.1/24
    IP 范围192.168.2.1 ~ 192.168.2.255
    Available NodesL2 模式下,可用节点是承载所有 VIP 流量的节点;BGP 模式下,可用节点是承载 VIP、与对等体建立 BGP 连接并对外宣布路由的节点。
    • 节点名称:根据节点名称选择可用节点。
    • 标签选择器:根据标签选择可用节点。
    • 显示节点详情:以列表形式查看最终可用节点。
    注意
    • 使用 BGP 类型时,可用节点即下一跳节点;确保所选可用节点是 BGP 连接节点 的子集。
    • 标签选择器和节点名称可单独配置,若同时配置,最终可用节点为两者的交集。
    BGP Peers选择 BGP 对等体;具体配置请参考 BGP Peers
  5. 点击 Create

通过 CLI 创建外部 IP 地址池

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

查看告警策略

  1. 进入 Administrator

  2. 在左侧导航栏点击 Network Management > External IP Address Pool

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