elasticsearch,google-kubernetes-engine,kubernetes-ingress,Java,elasticsearch,Google Kubernetes Engine,Kubernetes Ingress" /> elasticsearch,google-kubernetes-engine,kubernetes-ingress,Java,elasticsearch,Google Kubernetes Engine,Kubernetes Ingress" />

Java GKE GCE内部入口不适用于Elasticsearch REST客户端

Java GKE GCE内部入口不适用于Elasticsearch REST客户端,java,elasticsearch,google-kubernetes-engine,kubernetes-ingress,Java,elasticsearch,Google Kubernetes Engine,Kubernetes Ingress,我有一个gce internalingres,当通过curl或python的请求库使用标准httprest请求时,它可以正常工作。但是,通过,所有请求都返回一个404(后端未找到),不存在[/…]的服务规则。我通过curl尝试了完全相同的路线,没有问题。通过Apache Beam/Google Cloud数据流,ElasticsearchIO库也存在同样的问题。两者都使用相同的org.elasticsearch.client.RestClient,后者依次使用org.apache.http.ni

我有一个
gce internal
ingres,当通过curl或python的请求库使用标准httprest请求时,它可以正常工作。但是,通过,所有请求都返回一个
404(后端未找到),不存在[/…]的服务规则
。我通过curl尝试了完全相同的路线,没有问题。通过Apache Beam/Google Cloud数据流,ElasticsearchIO库也存在同样的问题。两者都使用相同的
org.elasticsearch.client.RestClient
,后者依次使用
org.apache.http.nio.client.CloseableHttpAsyncClient

入口配置为:

apiVersion:networking.k8s.io/v1beta1 种类:入口 元数据: 名称:es入口 注释: kubernetes.io/ingress.class:“gce内部” 规格: 规则: -主持人:host.com http: 路径: -路径:/* 后端: 服务名称:仅限elasticsearch 服务端口:9200
对于任何碰巧遇到此问题或类似问题的人,我都解决了这个问题

ES客户端使用的Apache HTTP客户端添加了一个
Host
头,如下所示:

Host: host.com:80
这似乎至少打破了GCE入门课程

我通过设置一个
RequestOption
来覆盖标题进行了修复

String host=“host.com”;
RequestOptions.Builder options=RequestOptions.DEFAULT.toBuilder();
options.addHeader(“主机”,主机);
SearchResponse=client.search(searchRequest,options.build());
我没有使用其他端口对此进行测试,以查看问题是否仍然存在