Connecting to ElasticSearch Cloud 5.x with Java Client and X-Pack/HTTPS

北慕城南 提交于 2020-01-02 04:40:07

问题


Is it possible to connect to ElasticSearch via HTTPS using X-Pack? With the switch to use certificate, the own way of connecting is no longer work. I have no problem with using certificate, but I need to know where to get one or upload the key to the cloud instance, but I cannot find information anywhere. I'm also getting no answer from anyone in the forum or IRC.

Has anyone successfully done this? There is no longer a warning when launching a 5.x instance so I assumed this is possible, but I just can't figure out how to do it. I was also told that I can no longer launch a 2.4.1 instance and only 2.4.2 is available (too unstable so far) so I'm kinda stuck not being able to launch a usable instance.


Update

I was told that no certificate is required since public CA is being used. However, I'm still not able to figure out how to connect to 5.1.1 instance.

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));

What am I doing wrong here? I'm getting an error saying node is not available.

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}]]

I also tried creating a user with transport_client role, but still the same error.


Update 2

I tried the sample code from here and it still doesn't work.

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

Here's an instance you can test with. I will destroy it later after I have figured out the issue.


Update 3

I figured out the issue and destroyed the test cluster. Find the solution below.


回答1:


After some discussion with people on ES forum, I got it working finally. Here are some tips when you run into an issue with connection:

1) You probably didn't add this in the header since it's not mentioned in the documentation

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

2) If that still doesn't work, use the sample code from here to verify that you hostname is correct and you have the correct credential

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

3) If you are trying to run the sample code within Eclipse, replace ${cluster.name} before you run it or it won't work.

Hope this help save people some time trying to figure out connection issue. Connecting to ES 5.x is about as easy as 2.x. The problem is that the documentation is not clear and there is no link to sample client.




回答2:


I had the same issue before and I resolved it using the following configuration

Required dependencies:

(transport and x-pack-transport should have the same version of the elasticsearch 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


来源:https://stackoverflow.com/questions/40981855/connecting-to-elasticsearch-cloud-5-x-with-java-client-and-x-pack-https

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!