Configuring MetalLB address pools

    The fields for the IPAddressPool custom resource are described in the following tables.

    Table 1. MetalLB IPAddressPool pool custom resource
    FieldTypeDescription

    metadata.name

    string

    Specifies the name for the address pool. When you add a service, you can specify this pool name in the metallb.universe.tf/address-pool annotation to select an IP address from a specific pool. The names doc-example, silver, and gold are used throughout the documentation.

    metadata.namespace

    string

    Specifies the namespace for the address pool. Specify the same namespace that the MetalLB Operator uses.

    metadata.label

    string

    Optional: Specifies the key value pair assigned to the IPAddressPool. This can be referenced by the ipAddressPoolSelectors in the BGPAdvertisement and L2Advertisement CRD to associate the IPAddressPool with the advertisement

    spec.addresses

    string

    Specifies a list of IP addresses for MetalLB Operator to assign to services. You can specify multiple ranges in a single pool; they will all share the same settings. Specify each range in CIDR notation or as starting and ending IP addresses separated with a hyphen.

    spec.autoAssign

    boolean

    You can assign IP addresses from an IPAddressPool to services and namespaces by configuring the spec.serviceAllocation specification.

    As a cluster administrator, you can add address pools to your cluster to control the IP addresses that MetalLB can assign to load-balancer services.

    Prerequisites

    • Install the OpenShift CLI (oc).

    Procedure

    1. Create a file, such as ipaddresspool.yaml, with content like the following example:

      1This label assigned to the IPAddressPool can be referenced by the ipAddressPoolSelectors in the BGPAdvertisement CRD to associate the IPAddressPool with the advertisement.
    2. Apply the configuration for the IP address pool:

      1. $ oc apply -f ipaddresspool.yaml

    Verification

    • View the address pool:

      Example output

      1. Name: doc-example
      2. Namespace: metallb-system
      3. Labels: zone=east
      4. Annotations: <none>
      5. API Version: metallb.io/v1beta1
      6. Metadata:
      7. ...
      8. Spec:
      9. Addresses:
      10. 203.0.113.1-203.0.113.10
      11. 203.0.113.65-203.0.113.75
      12. Auto Assign: true
      13. Events: <none>

    Confirm that the address pool name, such as doc-example, and the IP address ranges appear in the output.

    You can specify a range of IP addresses in CIDR notation. You can combine CIDR notation with the notation that uses a hyphen to separate lower and upper bounds.

    You can set the autoAssign field to false to prevent MetalLB from automatically assigning the IP addresses from the pool. When you add a service, you can request a specific IP address from the pool or you can specify the pool name in an annotation to request any IP address from the pool.

    1. apiVersion: metallb.io/v1beta1
    2. kind: IPAddressPool
    3. metadata:
    4. name: doc-example-reserved
    5. namespace: metallb-system
    6. addresses:
    7. - 10.0.100.0/28
    8. autoAssign: false

    You can add address pools that use IPv4 and IPv6. You can specify multiple ranges in the addresses list, just like several IPv4 examples.

    Whether the service is assigned a single IPv4 address, a single IPv6 address, or both is determined by how you add the service. The spec.ipFamilies and spec.ipFamilyPolicy fields control how IP addresses are assigned to the service.

    You can assign IP addresses from an IPAddressPool to services and namespaces that you specify.

    If you assign a service or namespace to more than one IP address pool, MetalLB uses an available IP address from the higher-priority IP address pool. If no IP addresses are available from the assigned IP address pools with a high priority, MetalLB uses available IP addresses from an IP address pool with lower priority or no priority.

    1. apiVersion: metallb.io/v1beta1
    2. kind: IPAddressPool
    3. metadata:
    4. namespace: metallb-system
    5. spec:
    6. addresses:
    7. - 192.168.20.0/24
    8. serviceAllocation:
    9. priority: 50 (1)
    10. namespaces: (2)
    11. - namespace-a
    12. - namespace-b
    13. namespaceSelectors: (3)
    14. - matchLabels:
    15. zone: east
    16. serviceSelectors: (4)
    17. - matchExpressions:
    18. - key: security
    19. operator: In
    20. values:
    1Assign a priority to the address pool. A lower number indicates a higher priority.
    2Assign one or more namespaces to the IP address pool in a list format.
    3Assign one or more namespace labels to the IP address pool by using label selectors in a list format.
    4Assign one or more service labels to the IP address pool by using label selectors in a list format.