diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2
index 8c219f181e9e6a744411987557be1030cee2057a..914e8b2dfd10ea17f4b28036f365857cbc27afca 100644
--- a/ansible/roles/cinder/templates/cinder.conf.j2
+++ b/ansible/roles/cinder/templates/cinder.conf.j2
@@ -238,9 +238,8 @@ verify_ssl_path = {{ openstack_cacert }}
 {% if cinder_coordination_backend == 'redis' %}
 backend_url = {{ redis_connection_string }}
 {% elif cinder_coordination_backend == 'etcd' %}
-# NOTE(yoctozepto): etcd-compatible tooz drivers do not support multiple endpoints here (verified in Stein, Train)
 # NOTE(yoctozepto): we must use etcd3gw (aka etcd3+http) due to issues with alternative (etcd3) and eventlet (as used by cinder)
 # see https://bugs.launchpad.net/kolla-ansible/+bug/1854932
 # and https://review.opendev.org/466098 for details
-backend_url = etcd3+{{ etcd_protocol }}://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }}
+backend_url = etcd3+{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ etcd_client_port }}
 {% endif %}
diff --git a/ansible/roles/ironic/templates/ironic-inspector.conf.j2 b/ansible/roles/ironic/templates/ironic-inspector.conf.j2
index fa9462dff534689de4287cb5a043e09cf2f27fc3..51a34c2a51741eb3551d954cfd531d8b20aac09f 100644
--- a/ansible/roles/ironic/templates/ironic-inspector.conf.j2
+++ b/ansible/roles/ironic/templates/ironic-inspector.conf.j2
@@ -83,9 +83,8 @@ dnsmasq_interface = {{ ironic_dnsmasq_interface }}
 {% if ironic_coordination_backend == 'redis' %}
 backend_url = {{ redis_connection_string }}
 {% elif ironic_coordination_backend == 'etcd' %}
-# NOTE(yoctozepto): etcd-compatible tooz drivers do not support multiple endpoints here (verified in Stein, Train)
 # NOTE(yoctozepto): we must use etcd3gw (aka etcd3+http) due to issues with alternative (etcd3) and eventlet (as used by cinder)
 # see https://bugs.launchpad.net/kolla-ansible/+bug/1854932
 # and https://review.opendev.org/466098 for details
-backend_url = etcd3+{{ etcd_protocol }}://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }}
+backend_url = etcd3+{{ internal_protocol }}://{{  kolla_internal_vip_address }}:{{ etcd_client_port }}
 {% endif %}
diff --git a/releasenotes/notes/use-loadbalancer-for-etcdgw-coordination-6704a8b1389bbabe.yaml b/releasenotes/notes/use-loadbalancer-for-etcdgw-coordination-6704a8b1389bbabe.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fa8b1d670319e4475135e7a2634eb1c942599c21
--- /dev/null
+++ b/releasenotes/notes/use-loadbalancer-for-etcdgw-coordination-6704a8b1389bbabe.yaml
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Services using etcd3gw via tooz now use etcd via haproxy. This removes
+    a single point of failure, where we hardcoded the first etcd host for
+    backend_url.