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



我有一个gce-internal入口,当通过curl或python的请求库使用标准HTTPREST请求时,它可以正常工作。但是,通过Java Elasticsearch RestHighLevelClient,所有请求都返回一个404 (backend NotFound), service rules for [ /... ] non-existent。我试过完全相同的路线通过卷曲,没有问题。通过Apache Beam/Google Cloud Dataflow的ElasticsearchIO库也存在同样的问题。两者都使用相同的CCD_ 3,而CCD_。

入口配置为:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: es-ingress
annotations:
kubernetes.io/ingress.class: "gce-internal"
spec:
rules:
- host: host.com
http:
paths:
- path: /*
backend:
serviceName: elasticsearch-coordinating-only
servicePort: 9200

对于任何碰巧有这个或类似问题的人,我都解决了这个问题。

原来ES客户端使用的Apache HTTP客户端添加了一个Host头作为:

Host: host.com:80

这似乎至少打破了英国普通中等教育证书的Ingress等级。

我通过设置RequestOption来覆盖标头来修复此问题。

String host = "host.com";
RequestOptions.Builder options = RequestOptions.DEFAULT.toBuilder();
options.addHeader("Host", host);
SearchResponse response = client.search(searchRequest, options.build());

我还没有用其他端口对此进行测试,看看问题是否仍然存在。

最新更新