首页 > 解决方案 > 通过代理在企业防火墙后面的 Elasticsearch RestHighLevelClient

问题描述

我正在尝试从我们的网络访问云 Elasticsearch 安装,这需要使用代理来处理外部请求。这是我用来传递 Elasticsearch 凭据和代理设置的代码片段:

CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUser, elasticPassword));

RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(hostName,port,"https")).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setProxy(new HttpHost(proxyURL", proxyPort, “http”)));

RestHighLevelClient 客户端 = new RestHighLevelClient(restClientBuilder);

这导致来自 ES 的响应:

“线程“主”中的异常 ElasticsearchStatusException [Elasticsearch 异常 [type=security_exception,reason=action [indices:data/read/search] 需要身份验证]]”

似乎由于某种原因没有通过 Elasticsearch 凭据。

标签: elasticsearch

解决方案


应该这样做:

RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(hostName, port, "https"))
    .setHttpClientConfigCallback(clientBuilder -> {
      clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
      clientBuilder.setProxy(new HttpHost(proxyURL, proxyPort, "http"));
      return clientBuilder;
     });

推荐阅读