【问题标题】:ElasticsearchJS timing out on Kubernetes Google Cloud?Elasticsearch JS 在 Kubernetes Google Cloud 上超时?
【发布时间】:2018-05-06 07:45:27
【问题描述】:

我有一个 NodeJS 应用程序在 GKE 的一个 pod 上运行,由于某种原因,我的应用程序对 Elasticsearch 的所有请求都超时(这是与 Kubernetes 集群位于同一区域的 VM)。奇怪的是,如果我创建一个与我的应用程序使用相同设置的简单客户端(直接在容器中,通过节点 repl),所有请求都将完成。

我注意到我的应用程序能够请求 Elasticsearch 并在启动时收到响应(当没有与应用程序的 HTTP 连接时)。它是一个简单的 REST 端点。这是容器日志:

[2018-05-06T07:46:14.906Z] TRACE (identity/26 on identity-deployment-54d5c7ccb9-hj2k6): REST request
req: {
  "headers": {
    "host": "research.evosec.ws",
    "connection": "close",
    "x-real-ip": "201.6.141.44",
    "x-forwarded-for": "201.6.141.44",
    "x-forwarded-host": "research.evosec.ws",
    "x-forwarded-port": "443",
    "x-forwarded-proto": "https",
    "x-original-uri": "/identity/user",
    "x-scheme": "https",
    "x-original-forwarded-for": "201.6.141.44, 35.201.82.80",
    "content-type": "application/json",
    "cache-control": "no-cache",
    "postman-token": "5646d274-4ed3-44d8-952a-abab50ff7f52",
    "user-agent": "PostmanRuntime/7.1.1",
    "accept": "*/*",
    "accept-encoding": "gzip, deflate",
    "x-cloud-trace-context": "52330745e4ee03559f557b56026f1808/1724170532745914334",
    "via": "1.1 google"
  },
  "method": "GET",
  "remoteAddress": "201.6.141.44",
  "url": "/user"
}
[2018-05-06T07:46:14.908Z] DEBUG (elasticsearch/26 on identity-deployment-54d5c7ccb9-hj2k6): starting request {"method":"POST","path":"/identity_user/user/_search","body":{"query":{"bool":{"filter":{"bool":{"must":[{"term":{"trash":false}},{"term":{"document_type.keyword":"user"}}]}}}}},"query":{"from":0,"size":10,"_source_include":"nickname,username,email,is_email_validated,email_validation_date,system_ownership,user_groups,roles,trash,created_at,last_update"}}
[2018-05-06T07:46:44.910Z] TRACE (identity/26 on identity-deployment-54d5c7ccb9-hj2k6): Return response error
error: {
  "message": "Request Timeout after 30000ms",
  "stack":
      Error: Request Timeout after 30000ms
          at /usr/src/app/node_modules/elasticsearch/src/lib/transport.js:354:15
          at Timeout.<anonymous> (/usr/src/app/node_modules/elasticsearch/src/lib/transport.js:383:7)
          at ontimeout (timers.js:482:11)
          at tryOnTimeout (timers.js:317:5)
          at Timer.listOnTimeout (timers.js:277:5)
}
[2018-05-06T07:46:44.911Z] ERROR (identity/26 on identity-deployment-54d5c7ccb9-hj2k6): Server error
req: {
  "headers": {
    "host": "research.evosec.ws",
    "connection": "close",
    "x-real-ip": "201.6.141.44",
    "x-forwarded-for": "201.6.141.44",
    "x-forwarded-host": "research.evosec.ws",
    "x-forwarded-port": "443",
    "x-forwarded-proto": "https",
    "x-original-uri": "/identity/user",
    "x-scheme": "https",
    "x-original-forwarded-for": "201.6.141.44, 35.201.82.80",
    "content-type": "application/json",
    "cache-control": "no-cache",
    "postman-token": "5646d274-4ed3-44d8-952a-abab50ff7f52",
    "user-agent": "PostmanRuntime/7.1.1",
    "accept": "*/*",
    "accept-encoding": "gzip, deflate",
    "x-cloud-trace-context": "52330745e4ee03559f557b56026f1808/1724170532745914334",
    "via": "1.1 google"
  },
  "method": "GET",
  "remoteAddress": "201.6.141.44",
  "url": "/user"
}
resHeaders: {
  "content-type": "application/json",
  "content-length": 77
}
resBody: {
  "errors": [
    {
      "displayName": "RequestTimeout",
      "message": "Request Timeout after 30000ms",
      "stack": "Error: Request Timeout after 30000ms\n    at /usr/src/app/node_modules/elasticsearch/src/lib/transport.js:354:15\n    at Timeout.<anonymous> (/usr/src/app/node_modules/elasticsearch/src/lib/transport.js:383:7)\n    at ontimeout (timers.js:482:11)\n    at tryOnTimeout (timers.js:317:5)\n    at Timer.listOnTimeout (timers.js:277:5)"
    }
  ]
}
[2018-05-06T07:46:44.912Z] TRACE (elasticsearch/26 on identity-deployment-54d5c7ccb9-hj2k6): 
method: "POST"
requestUrl: {
  "method": "POST",
  "protocol": "http:",
  "hostname": "elasticsearch-0",
  "port": 9200,
  "path": "/identity_user/user/_search?from=0&size=10&_source_include=nickname%2Cusername%2Cemail%2Cis_email_validated%2Cemail_validation_date%2Csystem_ownership%2Cuser_groups%2Croles%2Ctrash%2Ccreated_at%2Clast_update",
  "headers": {
    "content-type": "application/json"
  }
}
body: "{\"query\":{\"bool\":{\"filter\":{\"bool\":{\"must\":[{\"term\":{\"trash\":false}},{\"term\":{\"document_type.keyword\":\"user\"}}]}}}}}"
responseStatus: 0

有人知道发生了什么吗?

编辑

更多信息:

我在请求期间使用 netstat 监控了我的应用程序的连接。到Kafka的连接没问题,请求连接(8090端口)没问题,但是连Elasticsearch的连接都没有出现!

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         
State       PID/Program name
tcp        0      0 10.0.2.14:60250         10.150.0.8:9092         
ESTABLISHED 25/node
tcp        0      0 10.0.2.14:44686         10.150.0.8:9092         
ESTABLISHED 26/node
tcp        0      0 10.0.2.14:60260         10.150.0.8:9092         
ESTABLISHED 25/node
tcp        0      0 10.0.2.14:8090          10.0.1.12:53234         
ESTABLISHED 26/node
tcp        0      0 10.0.2.14:60256         10.150.0.8:9092         
ESTABLISHED 26/node

【问题讨论】:

    标签: node.js elasticsearch google-kubernetes-engine


    【解决方案1】:

    您似乎是通过外部 IP 连接的?如果是这样,要么

    1. 检查端口 9200 是否在您的防火墙规则中打开。
    2. 通过内部 IP 连接到您的应用程序(我知道它们是 在同一个网络中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2020-11-16
      • 2019-01-08
      • 2020-03-28
      • 2019-08-14
      • 2020-12-04
      • 2023-04-10
      相关资源
      最近更新 更多