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());
我没有使用其他端口对此进行测试,以查看问题是否仍然存在