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
this.discoveryNode = Objects.requireNonNull(discoveryNode);
            this.version = Objects.requireNonNull(version);
            this.clusterName = Objects.requireNonNull(clusterName);
        }
        public HandshakeResponse(StreamInput in) throws IOException {
            super(in);
            
            
            version = Version.readVersion(in);
            buildHash = in.readString();
            try {
                
                
                discoveryNode = new DiscoveryNode(in);
            } catch (Exception e) {
                maybeThrowOnIncompatibleBuild(null, e);
                throw e;
            }
            maybeThrowOnIncompatibleBuild(discoveryNode, null);
            clusterName = new ClusterName(in);
        }
        private void maybeThrowOnIncompatibleBuild(@Nullable DiscoveryNode node, @Nullable Exception e) {
            if (isIncompatibleBuild(version, buildHash)) {
                throwOnIncompatibleBuild(node, e);
            }
        }
        private void throwOnIncompatibleBuild(@Nullable DiscoveryNode node, @Nullable Exception e) {
            throw new IllegalArgumentException(
                "remote node ["
                    + (node == null ? "unidentifiable" : node)