We recently went live with a hybrid CAS (5.3.12.1) deployment using Azure.
We have one CAS node inside our network, and 2 in Azure. They replicate sessions using Hazelcast. We have our internal DNS directing on-prem traffic to our local CAS node, and any traffic from public IP addresses goes to the Azure CAS nodes, which are load balanced behind Azure's basic load balancer.
The key, I believe, to our success with Hazelcast is our use of Docker swarm. Using the overlay networking, the CAS nodes all are able to share a subnet/broadcast domain, making discovery of the other nodes easy.
Other than the dependency in the pom.xml, the only thing I had to add to the properties is this:
cas.ticket.registry.hazelcast.cluster.members=cas_servername1,cas_servername2,cas_servername3
We did some testing prior to our production go live, where we disabled the VPN between our site and Azure. I was impressed to see that the Hazelcast service managed itself so well. No sessions were lost, and when the connection was restored, Hazelcast reestablished its cluster and replication.
Our overall goal was to ensure that cloud services available to public IP address would be available in the event that our local datacenter were to go offline for any reason, and I believe we were successful.
I think CAS 6 has more native support for Docker, so I'm looking forward to getting going on a CAS 6 deployment in the near future.