I configured the external VIP as an IPv6 address.
root@napostk02hb214:/etc/openstack_deploy# grep "^ *external_lb_vip_address" /etc/openstack_deploy/openstack_user_config.yml
external_lb_vip_address: 2607:f160:0:3018:cf:fe0:0:200a
Endpoints are created without enclosing the address in brackets.
root@control01-utility-container-778468e4:~# openstack endpoint list --interface public
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------------------------+
| 0899a4ab96b94f09aa1e419884a02270 | RegionOne | neutron | network | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:9696 |
| 2e5d87ab1c8546e38f8212f4a7dcfa4f | RegionOne | heat-cfn | cloudformation | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:8000/v1 |
| 2ecafa131c3e48a8a29b008a53945ef0 | RegionOne | placement | placement | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:8780 |
| 3349e48f25bb4ecc8a2878dadc93f887 | RegionOne | heat | orchestration | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:8004/v1/%(tenant_id)s |
| 7cf312ea7f3d4f50b3d1ff5a662bf3ff | RegionOne | glance | image | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:9292 |
| ac49ae27c5574d709c294d5edb756543 | RegionOne | cinderv3 | volumev3 | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:8776/v3/%(tenant_id)s |
| ccee40cfa0174d3b9e42c90b25be3b96 | RegionOne | nova | compute | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:8774/v2.1 |
| f95be018c07e4175bb2a39a7baafac8c | RegionOne | keystone | identity | True | public | https://2607:f160:0:3018:cf:fe0:0:200a:5000 |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------------------------+
Configuration files are created with URLs without having the IPv6 addresses enclosed in brackets, too.
root@napostk02hb206:~# grep https://2607:f160:0:3018:cf:fe0:0:200a: /var/lib/lxc/control01_*/rootfs/etc/*/*.conf 2>/dev/null
/var/lib/lxc/control01_heat_api_container-4a421d69/rootfs/etc/heat/heat.conf:heat_waitcondition_server_url = https://2607:f160:0:3018:cf:fe0:0:200a:8000/v1/waitcondition
/var/lib/lxc/control01_heat_api_container-4a421d69/rootfs/etc/heat/heat.conf:heat_metadata_server_url = https://2607:f160:0:3018:cf:fe0:0:200a:8000
/var/lib/lxc/control01_nova_api_container-675eb7f6/rootfs/etc/nova/nova.conf:novncproxy_base_url = https://2607:f160:0:3018:cf:fe0:0:200a:6080/vnc_lite.html
/var/lib/lxc/control01_placement_container-6221fd34/rootfs/etc/placement/placement.conf:www_authenticate_uri = https://2607:f160:0:3018:cf:fe0:0:200a:5000
If I manually change the endpoints and the config files, everything works, but it's quite laborious.
-----------------------------------
Release: 23.1.1.dev2 on 2021-09-15 11:22:09
SHA: ea7a445d116bfd41e8536eb2b164194e190330b8
Source: https://opendev.org/openstack/openstack-ansible/src/deploy-guide/source/configure.rst
URL: https://docs.openstack.org/project-deploy-guide/openstack-ansible/wallaby/configure.html
While I think this is valid bug, the easy workaround for it would be defining a domain name as for external_ lb_vip_ address which will have AAAA record.