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/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java
"TS_B",
            settings,
            TransportVersion.CURRENT,
            Version.CURRENT,
            TransportService.NOOP_TRANSPORT_INTERCEPTOR
        );
        DiscoveryNode discoveryNode = new DiscoveryNode(
            randomAlphaOfLength(10),
            transportServiceB.getLocalNode().getAddress(),
            emptyMap(),
            emptySet(),
            transportServiceB.getLocalNode().getVersion()
        );
        ConnectTransportException ex = expectThrows(
            ConnectTransportException.class,
            () -> AbstractSimpleTransportTestCase.connectToNode(transportServiceA, discoveryNode, TestProfiles.LIGHT_PROFILE)
        );
        assertThat(ex.getMessage(), containsString("unexpected remote node"));
        assertFalse(transportServiceA.nodeConnected(discoveryNode));
    }
    public void testRejectsMismatchedBuildHash() {
        final DisruptingTransportInterceptor transportInterceptorA = new DisruptingTransportInterceptor();
        final DisruptingTransportInterceptor transportInterceptorB = new DisruptingTransportInterceptor();
        transportInterceptorA.setModifyBuildHash(true);
        transportInterceptorB.setModifyBuildHash(true);
        final Settings settings = Settings.builder()
            .put("cluster.name", "a")
            .put(IGNORE_DESERIALIZATION_ERRORS_SETTING.getKey(), true) 
            .build();
        final TransportService transportServiceA = startServices(