使用Java客户端和X-Pack / HTTPS连接到ElasticSearch Cloud 5.x.

时间:2016-12-05 19:30:10

标签: java elasticsearch https certificate xpack

是否可以使用X-Pack通过HTTPS连接到ElasticSearch?随着切换到使用证书,自己的连接方式不再起作用。我使用证书没有问题,但我需要知道从哪里获取或将密钥上传到云实例,但我无法在任何地方找到信息。我也没有得到论坛或IRC中任何人的回答。

有没有人成功完成此操作?启动5.x实例时不再有警告,所以我认为这是可能的,但我无法弄清楚如何做到这一点。我还被告知我不能再启动一个2.4.1实例,只有2.4.2可用(到目前为止太不稳定),所以我有点无法启动一个可用的实例。

更新

我被告知自从使用公共CA以来不需要证书。但是,我仍然无法弄清楚如何连接到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 个答案:

答案 0 :(得分:3)

在ES论坛上与人们进行了一些讨论后,我终于开始工作了。当您遇到连接问题时,以下是一些提示:

1)你可能没有在标题中添加它,因为它没有在文档中提到

{{1}}

2)如果仍然无效,请使用此处的示例代码验证您的主机名是否正确并且您拥有正确的凭据

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

3)如果您尝试在Eclipse中运行示例代码,请在运行之前替换$ {cluster.name},否则它将无效。

希望这有助于节省人们一些时间来解决连接问题。连接到ES 5.x几乎和2.x一样简单。问题是文档不清楚,并且没有到示例客户端的链接。

答案 1 :(得分:0)

之前我遇到过同样的问题,我使用以下配置解决了这个问题

必需的依赖项:

(transport和x-pack-transport应该具有相同版本的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配置:

@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