23.3. 配置 MetalLB 地址池

作为集群管理员,您可以添加、修改和删除地址池。MetalLB Operator 使用地址池自定义资源来设置 MetalLB 可分配给服务的 IP 地址。

23.3.1. 关于地址池自定义资源

下表中描述了地址池自定义资源的字段。

表 23.1. MetalLB 地址池自定义资源

字段类型描述

metadata.name

字符串

指定地址池的名称。添加服务时,您可以在 metallb.universe.tf/address-pool 注解中指定这个池名称,以从特定池中选择 IP 地址。整个文档中都使用名称 doc-examplesilvergold

metadata.namespace

字符串

指定地址池的命名空间。指定 MetalLB Operator 使用的同一命名空间。

spec.protocol

字符串

指定向对等节点发布负载均衡器 IP 地址的协议。唯一支持的值是 L2

spec.autoAssign

布尔值

可选:指定 MetalLB 是否从这个池自动分配 IP 地址。如果要使用 metallb.universe.tf/address-pool 注解从这个池中明确请求 IP 地址,请指定 false。默认值为 true

spec.addresses

数组

指定分配给服务的 MetalLB 的 IP 地址列表。您可以在单个池中指定多个范围。以 CIDR 表示法指定每个范围,或者指定为以连字符隔开的起始和结束 IP 地址。

23.3.2. 配置地址池

作为集群管理员,您可以向集群添加地址池,以控制 MetaLLB 可分配给负载均衡器服务的 IP 地址。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建一个包含类似以下示例内容的文件,如 addresspool.yaml

    apiVersion: metallb.io/v1alpha1
    kind: AddressPool
    metadata:
      namespace: metallb-system
      name: doc-example
    spec:
      protocol: layer2
      addresses:
      - 203.0.113.1-203.0.113.10
      - 203.0.113.65-203.0.113.75
  2. 为地址池应用配置:

    $ oc apply -f addresspool.yaml

验证

  • 查看地址池:

    $ oc describe -n metallb-system addresspool doc-example

    输出示例

    Name:         doc-example
    Namespace:    metallb-system
    Labels:       <none>
    Annotations:  <none>
    API Version:  metallb.io/v1alpha1
    Kind:         AddressPool
    Metadata:
      ...
    Spec:
      Addresses:
        203.0.113.1-203.0.113.10
        203.0.113.65-203.0.113.75
      Auto Assign:  true
      Protocol:     layer2
    Events:         <none>

确认输出中显示了地址池名称,如 doc-example,并且 IP 地址范围显示在输出中。

23.3.3. 地址池配置示例

23.3.3.1. 示例:IPv4 和 CIDR 范围

您可以使用 CIDR 表示法指定 IP 地址范围。您可以将 CIDR 表示法与使用连字符分隔下限和上限的表示法合并。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-cidr
  namespace: metallb-system
spec:
  protocol: layer2
  addresses:
  - 192.168.100.0/24
  - 192.168.200.0/24
  - 192.168.255.1-192.168.255.5

23.3.3.2. 示例:保留 IP 地址

您可以将 autoAssign 字段设置为 false,以防止 MetalLB 自动从池中分配 IP 地址。添加服务时,您可以从池中请求特定的 IP 地址,或者在注解中指定池名称从池中请求任何 IP 地址。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-reserved
  namespace: metallb-system
spec:
  protocol: layer2
  addresses:
  - 10.0.100.0/28
  autoAssign: false

23.3.3.3. 示例:IPv6 地址池

您可以添加使用 IPv6 的地址池。以下示例显示了单个 IPv6 范围。但是,您可以像几个 IPv4 示例一样,在 addresses 列表中指定多个范围。

apiVersion: metallb.io/v1beta1
kind: AddressPool
metadata:
  name: doc-example-ipv6
  namespace: metallb-system
spec:
  protocol: layer2
  addresses:
  - 2002:2:2::1-2002:2:2::100

23.3.4. 后续步骤