将 kibana 放在 nginx-ingress 后面失败并出现 HTTP 错误
Putting kibana behind nginx-ingress fails with a HTTP error
我在kubernetes环境下部署了kibana。如果我给它一个 LoadBalancer 类型的服务,我就可以很好地访问它。但是,当我尝试通过 nginx-ingress 访问它时,它失败了。我在 nginx ingress 中使用的配置是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: my-ingress
spec:
rules:
- http:
paths:
- backend:
serviceName: kibana
servicePort: {{ .Values.kibanaPort }}
path: /kibana
我已经使用以下设置启动了我的 kibana:
- name: SERVER_BASEPATH
value: /kibana
而且我可以通过 LoadBalancer
IP 访问 kibana。但是,当我尝试通过 Ingress 访问时,除了对 vendors.bundle.js
的 GET 调用几乎一直失败之外,大多数调用都正常进行。
本次调用ingress中的日志信息如下:
2019/10/25 07:31:48 [error] 430#430: *21284 upstream prematurely closed connection while sending to client, client: 10.142.0.84, server: _, request: "GET /kibana/bundles/vendors.bundle.js HTTP/2.0", upstream: "http://10.20.3.5:3000/kibana/bundles/vendors.bundle.js", host: "1.2.3.4", referrer: "https://1.2.3.4/kibana/app/kibana"
10.142.0.84 - [10.142.0.84] - - [25/Oct/2019:07:31:48 +0000] "GET /kibana/bundles/vendors.bundle.js HTTP/2.0" 200 1854133 "https://1.2.3.4/kibana/app/kibana" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 47 13.512 [some-service] 10.20.3.5:3000 7607326 13.513 200 506f778b25471822e62fbda2e57ccd6b
我不确定为什么我会在不同的浏览器中得到 upstream prematurely closed connection while sending to client
。我已经尝试将 proxy-connect-timeout
和 proxy-read-timeout
设置为 100 秒,但即使这样也失败了。我不确定这是否是由于某种默认大小或块造成的。
另外值得注意的是,只有一些 kibana 调用失败,并非所有都失败。
在浏览器中,我看到错误信息:
GET https://<ip>/kibana/bundles/vendors.bundle.js net::ERR_SPDY_PROTOCOL_ERROR 200
在开发者控制台中。
任何人都知道我需要将什么样的配置选项传递给我的 nginx-ingress 才能使 kibana proxy_pass 正常?
我找到错误原因了。 vendors.bundle.js
文件相对较大,并且由于我是从相对较慢的网络访问的,所以请求被终止了。我解决这个问题的方法是,将以下字段添加到 nginx-ingress 配置中:
nginx.ingress.kubernetes.io/proxy-body-size: 10m (Change this as you need)
nginx.ingress.kubernetes.io/proxy-connect-timeout: "100"
nginx.ingress.kubernetes.io/proxy-send-timeout: "100"
nginx.ingress.kubernetes.io/proxy-read-timeout: "100"
nginx.ingress.kubernetes.io/proxy-buffering: "on"
我在kubernetes环境下部署了kibana。如果我给它一个 LoadBalancer 类型的服务,我就可以很好地访问它。但是,当我尝试通过 nginx-ingress 访问它时,它失败了。我在 nginx ingress 中使用的配置是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: my-ingress
spec:
rules:
- http:
paths:
- backend:
serviceName: kibana
servicePort: {{ .Values.kibanaPort }}
path: /kibana
我已经使用以下设置启动了我的 kibana:
- name: SERVER_BASEPATH
value: /kibana
而且我可以通过 LoadBalancer
IP 访问 kibana。但是,当我尝试通过 Ingress 访问时,除了对 vendors.bundle.js
的 GET 调用几乎一直失败之外,大多数调用都正常进行。
本次调用ingress中的日志信息如下:
2019/10/25 07:31:48 [error] 430#430: *21284 upstream prematurely closed connection while sending to client, client: 10.142.0.84, server: _, request: "GET /kibana/bundles/vendors.bundle.js HTTP/2.0", upstream: "http://10.20.3.5:3000/kibana/bundles/vendors.bundle.js", host: "1.2.3.4", referrer: "https://1.2.3.4/kibana/app/kibana"
10.142.0.84 - [10.142.0.84] - - [25/Oct/2019:07:31:48 +0000] "GET /kibana/bundles/vendors.bundle.js HTTP/2.0" 200 1854133 "https://1.2.3.4/kibana/app/kibana" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" 47 13.512 [some-service] 10.20.3.5:3000 7607326 13.513 200 506f778b25471822e62fbda2e57ccd6b
我不确定为什么我会在不同的浏览器中得到 upstream prematurely closed connection while sending to client
。我已经尝试将 proxy-connect-timeout
和 proxy-read-timeout
设置为 100 秒,但即使这样也失败了。我不确定这是否是由于某种默认大小或块造成的。
另外值得注意的是,只有一些 kibana 调用失败,并非所有都失败。
在浏览器中,我看到错误信息:
GET https://<ip>/kibana/bundles/vendors.bundle.js net::ERR_SPDY_PROTOCOL_ERROR 200
在开发者控制台中。
任何人都知道我需要将什么样的配置选项传递给我的 nginx-ingress 才能使 kibana proxy_pass 正常?
我找到错误原因了。 vendors.bundle.js
文件相对较大,并且由于我是从相对较慢的网络访问的,所以请求被终止了。我解决这个问题的方法是,将以下字段添加到 nginx-ingress 配置中:
nginx.ingress.kubernetes.io/proxy-body-size: 10m (Change this as you need)
nginx.ingress.kubernetes.io/proxy-connect-timeout: "100"
nginx.ingress.kubernetes.io/proxy-send-timeout: "100"
nginx.ingress.kubernetes.io/proxy-read-timeout: "100"
nginx.ingress.kubernetes.io/proxy-buffering: "on"