【问题标题】:Connecting to ElasticSearch Cloud 5.x with Java Client and X-Pack/HTTPS使用 Java 客户端和 X-Pack/HTTPS 连接到 ElasticSearch Cloud 5.x
【发布时间】:2017-04-20 07:04:28
【问题描述】:

是否可以使用 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

我发现了问题并销毁了测试集群。在下面找到解决方案。

【问题讨论】:

    标签: java elasticsearch https certificate xpack


    【解决方案1】:

    在 ES 论坛上与人们讨论后,我终于成功了。以下是遇到连接问题时的一些提示:

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

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

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

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

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

    希望这有助于节省人们尝试找出连接问题的时间。连接到 ES 5.x 和 2.x 一样简单。问题是文档不清晰,也没有示例客户端的链接。

    【讨论】:

      【解决方案2】:

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

      必需的依赖项:

      (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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-07
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 2017-06-27
        • 2017-09-06
        相关资源
        最近更新 更多