This is less of a concern than it at first seems.
First of all, when specify a Gluster host IP during client mount (whether with FUSE or libgfapi), you're only using that for peer probing. Once that probing is completed, libfgapi handles communication between all probed peers, on the IP(s) that they provide when probed.
This is all great until the host that your probing by explicit IP goes down. There are a few things you can do to keep this from happening. Keepalived or ctdb can provide a floating IP that you would use only for client to server probing. Alternatively, a DNS round-robin will accomplish this with names.
This name or floating IP won't be used for actually sending data to the Gluster volumes, but will only be to ensure that probing can always happen even in a degraded environment.
With libvirt, this ends up looking like this:
<driver name='qemu' type='qcow2' cache='none'/>
<source protocol='gluster' name='kvm/test.img'>
<host name='gluster-probe' port='24007'/>
</source>
<target dev='vda' bus='virtio'/>
</disk>
In this case, I've implemented a DNS round-robin outside of libvirt so that I can be sure this name always resolves to a host in the gluster peer pool, provided that at least one is up. After it contacts one, it gets the full list, connects to the hosts in that list via IP, and then happily moves along.