Подключение к 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
Я попробовал пример кода отсюда, и он все еще не работает.
Вот пример, который вы можете проверить. Я уничтожу его позже, когда выясню проблему.
Обновление 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