How a primary/secondary virtual IP address works in different subnets?
Case of a mirror cluster with 2 Windows or Linux servers

If the servers are in differents subnets, the virtual IP address can be set at the level of a load balancer. The load balancer is configured with the two physical IP addresses of the two servers in their respective subnets. And the load balancer routes the traffic according a health check to servers.
The health check is based on a URL managed by SafeKit servers and answering OK or NOT FOUND according the status of a server. If the server is SECOND, the SafeKit health check returns NOT FOUND. Thus no traffic is sent by the load balancer to the secondary server. And if the server is PRIM, then the SafeKit health check returns OK. Thus all the traffic is sent by the load balancer to the primary server. In case of failover, SafeKit changes its answers to the health check. Thus the traffic of the load balancer is rerouted.
This implementation is the one used in SafeKit mirror-like solutions in the Cloud: Amazon AWS, Microsoft Azure and Google GCP.
Please note that SafeKit does not provide a load balancer; it only offers health checks. The load balancer must be supplied by the network infrastructure between the two subnets.
If needed, it can be discussed with the network team whether, instead of setting up a load balancer, an extended LAN could be configured between the two subnets. Moreover, when using a load balancer, it is essential to ensure that the application supports clients connecting via the load balancer's virtual IP address and that it properly handles connections arriving through the translated physical IP address assigned by the load balancer.
This issue does not arise with an extended LAN, which also provides sufficient bandwidth and appropriate latency for real-time synchronous replication without data loss.