diff --git a/ansible/roles/haproxy/defaults/main.yml b/ansible/roles/haproxy/defaults/main.yml
index ab75993a8e..c2e6e61400 100644
--- a/ansible/roles/haproxy/defaults/main.yml
+++ b/ansible/roles/haproxy/defaults/main.yml
@@ -44,3 +44,6 @@ haproxy_glance_api_server_timeout: "6h"
 
 syslog_server: "{{ api_interface_address }}"
 syslog_haproxy_facility: "local1"
+
+# Traffic mode. Valid options are [ multicast, unicast ]
+keepalived_traffic_mode: "multicast"
diff --git a/ansible/roles/haproxy/templates/keepalived.conf.j2 b/ansible/roles/haproxy/templates/keepalived.conf.j2
index 8307a2f503..0fd81bf8e1 100644
--- a/ansible/roles/haproxy/templates/keepalived.conf.j2
+++ b/ansible/roles/haproxy/templates/keepalived.conf.j2
@@ -12,8 +12,21 @@ vrrp_instance kolla_internal_vip_{{ keepalived_virtual_router_id }} {
     virtual_router_id {{ keepalived_virtual_router_id }}
     priority {{ groups['haproxy'].index(inventory_hostname) + 1 }}
     advert_int 1
+{% if keepalived_traffic_mode == 'unicast' %}
+    unicast_src_ip {{ api_interface_address }}
+{% if groups['haproxy'] | length > 1 %}
+    unicast_peer {
+{% for host in groups['haproxy'] %}
+{% set ip_addr = hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] %}
+{% if ip_addr != api_interface_address %}
+        {{ ip_addr }}
+{% endif %}
+{% endfor %}
+    }
+{% endif %}
+{% endif %}
     virtual_ipaddress {
-        {{ kolla_internal_vip_address }} dev {{  api_interface }}
+        {{ kolla_internal_vip_address }} dev {{ api_interface }}
 {% if haproxy_enable_external_vip | bool %}
         {{ kolla_external_vip_address }} dev {{ kolla_external_vip_interface }}
 {% endif %}