使用Java客户端和x-Pack/HTTPS连接到ElasticSearch Cloud 5.x
是否可以使用X-Pack通过HTTPS连接到ElasticSearch?随着使用证书的切换,自己的连接方式不再有效。我在使用证书方面没有问题,但我需要知道从哪里获取证书或将密钥上载到云实例,但我在任何地方都找不到信息。我也没有从论坛或IRC的任何人那里得到答案 有人成功地做到了这一点吗?启动5.x实例时不再有警告,所以我假设这是可能的,但我就是不知道如何做。我还被告知,我不能再启动2.4.1实例,只有2.4.2可用(到目前为止太不稳定),所以我有点无法启动可用实例使用Java客户端和x-Pack/HTTPS连接到ElasticSearch Cloud 5.x,java,elasticsearch,https,certificate,xpack,Java,elasticsearch,Https,Certificate,Xpack,是否可以使用X-Pack通过HTTPS连接到ElasticSearch?随着使用证书的切换,自己的连接方式不再有效。我在使用证书方面没有问题,但我需要知道从哪里获取证书或将密钥上载到云实例,但我在任何地方都找不到信息。我也没有从论坛或IRC的任何人那里得到答案 有人成功地做到了这一点吗?启动5.x实例时不再有警告,所以我假设这是可能的,但我就是不知道如何做。我还被告知,我不能再启动2.4.1实例,只有2.4.2可用(到目前为止太不稳定),所以我有点无法启动可用实例 Settings settin
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));
更新 我被告知,由于使用公共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));
Settings=Settings.builder()
.put(“运输计划表”、“5s”)
.put(“cluster.name”,“”)
.put(“xpack.security.transport.ssl.enabled”,“true”)
.put(“xpack.security.user”,“弹性:”)
.build();
字符串hostname=“.us-east-1.aws.found.io”;
TransportClient=新的预构建XpackTransportClient(设置)
.addTransportAddress(新的InetSocketTransportAddress(InetAddress.getByName(主机名),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}]]
线程“main”非odeAvailableException中的异常[配置的节点均不可用:[{{transport}-1}{xlhZqKBCQniYrN4OWzByFQ}{.us-east-1.aws.found.io}{:9343}]
我还尝试创建一个具有transport_客户端角色的用户,但仍然出现相同的错误
更新2 我在这里尝试了示例代码,但仍然不起作用 下面是一个您可以测试的实例。我会在解决问题后销毁它
更新3
我发现了问题并销毁了测试集群。找到下面的解决方案。在ES论坛上与大家讨论后,我终于找到了解决方案。当您遇到连接问题时,以下是一些提示: 1) 您可能没有将其添加到标题中,因为文档中没有提到它
.put("request.headers.X-Found-Cluster", clusterName)
2) 如果仍然不起作用,请使用此处的示例代码验证您的主机名是否正确以及您是否拥有正确的凭据
3) 如果您试图在Eclipse中运行示例代码,请在运行之前替换${cluster.name},否则它将无法运行
希望这能帮助人们节省一些时间来解决连接问题。连接到ES5.x和连接到2.x一样简单。问题是文档不清楚,没有指向示例客户端的链接。我以前也遇到过同样的问题,我使用以下配置解决了它 所需的依赖项:
@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)));
}
elasticsearch:
index: dev_index
cluster:
name: 2083ddf0fbf5a3b1f0c50ff257ded077
url: 2083ddf0fbf5a3b1f0c50ff257ded077.eu-west-1.aws.found.io
port: 9343
credentials: elastic:pass
(transport和x-pack-transport应具有相同版本的elasticsearch 5.5.3)
application.yml:
@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)));
}
elasticsearch:
index: dev_index
cluster:
name: 2083ddf0fbf5a3b1f0c50ff257ded077
url: 2083ddf0fbf5a3b1f0c50ff257ded077.eu-west-1.aws.found.io
port: 9343
credentials: elastic:pass