diff --git a/contrib/metallb/roles/provision/defaults/main.yml b/contrib/metallb/roles/provision/defaults/main.yml
index 4a7c7c4716ed1f06ec013e2018e363da2d60457d..ff68d3303a25aeebe414ed72fd3c06d479f822e6 100644
--- a/contrib/metallb/roles/provision/defaults/main.yml
+++ b/contrib/metallb/roles/provision/defaults/main.yml
@@ -1,10 +1,12 @@
 ---
 metallb:
-  ip_range: "10.5.0.50-10.5.0.99"
+  ip_range:
+    - "10.5.0.50-10.5.0.99"
   protocol: "layer2"
   # additional_address_pools:
   #   kube_service_pool:
-  #     ip_range: "10.5.1.50-10.5.1.99"
+  #     ip_range:
+  #       - 10.5.1.50-10.5.1.99"
   #     protocol: "layer2"
   #     auto_assign: false
   limits:
diff --git a/contrib/metallb/roles/provision/templates/metallb-config.yml.j2 b/contrib/metallb/roles/provision/templates/metallb-config.yml.j2
index 6f2f873397ea6f7b23b5a67be5987fa709073510..f35aada1307135491bda62c3f160c2f848241f42 100644
--- a/contrib/metallb/roles/provision/templates/metallb-config.yml.j2
+++ b/contrib/metallb/roles/provision/templates/metallb-config.yml.j2
@@ -10,12 +10,16 @@ data:
     - name: loadbalanced
       protocol: {{ metallb.protocol }}
       addresses:
-      - {{ metallb.ip_range }}
+{% for ip_range in metallb.ip_range %}
+      - {{ ip_range }}
+{% endfor %}
 {% if metallb.additional_address_pools is defined %}{% for pool in metallb.additional_address_pools %}
     - name: {{ pool }}
       protocol: {{ metallb.additional_address_pools[pool].protocol }}
       addresses:
-      - {{ metallb.additional_address_pools[pool].ip_range }}
+{% for ip_range in metallb.additional_address_pools[pool].ip_range %}
+      - {{ ip_range }}
+{% endfor %}
       auto-assign: {{ metallb.additional_address_pools[pool].auto_assign }}
 {% endfor %}
 {% endif %}