Подключение к ElasticSearch Cloud 5.x с клиентом Java и X-Pack/HTTPS

Можно ли подключиться к ElasticSearch через HTTPS с помощью X-Pack? С переключателем на использование сертификата собственный способ подключения больше не работает. У меня нет проблем с использованием сертификата, но мне нужно знать, где его получить или загрузить ключ в облачный экземпляр, но я нигде не могу найти информацию. Я также не получаю ответа от кого-либо на форуме или в IRC.

Кто-нибудь успешно сделал это? Больше не появляется предупреждение при запуске экземпляра 5.x, поэтому я предположил, что это возможно, но я просто не могу понять, как это сделать. Мне также сказали, что я больше не могу запускать экземпляр 2.4.1, и доступен только 2.4.2 (пока что он слишком нестабилен), поэтому я застрял не в состоянии запустить работающий экземпляр.


Обновить

Мне сказали, что сертификат не требуется, так как используется общедоступный центр сертификации. Тем не менее, я до сих пор не могу понять, как подключиться к экземпляру 5.1.1.

Settings settings = Settings.builder()
            .put("transport.ping_schedule", "5s")
            .put("cluster.name", "<cluster_id>")
            .put("xpack.security.transport.ssl.enabled", "true")
            .put("xpack.security.user", "elastic:<password_from_cluster_creation>")
            .build();

    String hostname = "<cluster_id>.us-east-1.aws.found.io";
    TransportClient client = new PreBuiltXPackTransportClient(settings)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostname), 9343));

Что я здесь не так делаю? Я получаю сообщение о том, что узел недоступен.

Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{xlhZqKBCQniYrN4OWzByFQ}{<cluster_id>.us-east-1.aws.found.io}{<id_address>:9343}]]

Я также попытался создать пользователя с ролью transport_client, но все еще с той же ошибкой.


Обновление 2

Я попробовал пример кода отсюда, и он все еще не работает.

https://github.com/elastic/found-shield-example/blob/master/src/main/java/org/elasticsearch/cloud/transport/example/TransportExample.java

Вот пример, который вы можете проверить. Я уничтожу его позже, когда выясню проблему.


Обновление 3

Я разобрался с проблемой и уничтожил тестовый кластер. Найдите решение ниже.

2 ответа

Решение

После некоторого обсуждения с людьми на форуме ES, я наконец-то начал работать. Вот несколько советов, когда вы столкнетесь с проблемой подключения:

1) Вы, вероятно, не добавили это в шапку, так как это не упомянуто в документации

.put("request.headers.X-Found-Cluster", clusterName)

2) Если это все еще не работает, используйте пример кода отсюда, чтобы убедиться, что ваше имя хоста правильное и у вас есть правильные учетные данные

https://github.com/elastic/found-shield-example

3) Если вы пытаетесь запустить пример кода в Eclipse, замените ${cluster.name} перед его запуском, иначе он не будет работать.

Надеюсь, что это поможет людям сэкономить время, пытаясь выяснить проблему подключения Подключение к ES 5.x примерно так же просто, как 2.x. Проблема в том, что документация не ясна и нет ссылки на пример клиента.

У меня была такая же проблема раньше, и я решил ее, используя следующую конфигурацию

Обязательные зависимости:

(транспорт и x-pack-transport должны иметь одинаковую версию эластичного поиска 5.5.3)

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>5.5.3</version>
    </dependency>
    <!--add the x-pack jar as a dependency-->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>x-pack-transport</artifactId>
        <version>5.5.3</version>
    </dependency>
</dependencies>

<repositories>
    <!-- add the elasticsearch repo -->
    <repository>
        <id>elasticsearch-releases</id>
        <url>https://artifacts.elastic.co/maven</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

Java Config:

@Value("${elasticsearch.cluster.url}")
private String elasticsearchClusterUrl;

@Value("${elasticsearch.cluster.port}")
private int elasticsearchClusterPort;

@Value("${elasticsearch.cluster.name}")
private String elasticsearchClusterName;

@Value("${elasticsearch.cluster.credentials}")
private String elasticsearchCredentials;

@Bean
public TransportClient elasticsearchClient()
        throws Exception {

    Settings settings = Settings.builder()
            .put("cluster.name", elasticsearchClusterName)
            .put("request.headers.X-Found-Cluster", elasticsearchClusterName)
            .put("xpack.security.transport.ssl.enabled", true)
            .put("xpack.security.user", elasticsearchCredentials)
            .build();

    return new PreBuiltXPackTransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(elasticsearchClusterUrl, elasticsearchClusterPort)));
}

application.yml:

elasticsearch:
  index: dev_index
  cluster:
    name: 2083ddf0fbf5a3b1f0c50ff257ded077
    url: 2083ddf0fbf5a3b1f0c50ff257ded077.eu-west-1.aws.found.io
    port: 9343
    credentials: elastic:pass
Другие вопросы по тегам