There's currently a check in `TransportService.HandshakeResponse.isIncompatibleBuild` to stop ES with the same Version but different build hashes from joining a cluster. This needs to be relaxed for cloud deployments where Version is not applicable
server/src/main/java/org/elasticsearch/transport/TransportService.java
final Transport.Connection unwrappedConn = unwrapConnection(connection);
                final Releasable unregisterChildNode = taskManager.registerChildConnection(request.getParentTask().getId(), unwrappedConn);
                if (unregisterChildNode == null) {
                    delegate = handler;
                } else {
                    delegate = new UnregisterChildTransportResponseHandler<>(
                        unregisterChildNode,
                        handler,
                        action,
                        request,
                        unwrappedConn,
                        taskManager
                    );
                }
            } else {
                delegate = handler;
            }
            asyncSender.sendRequest(connection, action, request, options, delegate);
        } catch (TransportException transportException) {
            handleSendRequestException(handler, transportException);
        } catch (Exception exception) {
            handleSendRequestException(handler, new SendRequestTransportException(connection.getNode(), action, exception));
        }
    }
    private static <T extends TransportResponse> void handleSendRequestException(
        TransportResponseHandler<T> handler,