我正在使用 Google Kubernetes Engine,从 stackdriver 日志中收到此错误
2020/05/14 07:31:19 [警告] 9#9:*658 读取上游时,上游响应缓冲到临时文件 /var/cache/nginx/proxy_temp/0/01/0000000010,客户端:155.201.35.107,服务器:,请求:“POST /graphql?key=AIzaSyCkP6djTqVJ5E9lUWcOlWYxpJw7zJuU9dQ HTTP/1.1”,上游:“http://127.0.0.1:4000/graphql?key=AIzaSyCkP6djTqVJ5E9lUWcOlWYxpJw7zJuU9dQ“, 主持人:...
我读过这篇文章:上游响应被缓冲到临时文件中
但它与 nginx 有关,与 GKE 无关。我知道 GKE 可能使用 Nginx 作为代理服务器。
但我不知道 GKE 是否支持它。我不知道这个问题的原因,也无法重现它。我该如何解决这个问题?提前谢谢。
更新:
我正在使用 jmeter 进行 API 负载测试,以下是来自 jmeter 的错误:
如您所见,API 应该可以正常工作,并且我已经处理了isLogin
API 内部的每个异常。因此,我认为此错误不是来自我的应用程序。我猜这与基础设施有关。
答案1
但我不知道 GKE 是否支持它?
这入口-gce文档中没有提到此功能,但我知道您可以将 NGINX Ingress 与 GKE 一起使用并使用其注释来更改proxy-max-temp-file-size
。
- 首次部署GCE-GKE 的 Nginx Ingress基本上运行:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml
- 等到 Nginx Ingress Controller 被分配一个外部 IP:
$ kubectl get svc ingress-nginx-controller -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.21.3.21 XX.XX.XXX.XXX 80:31269/TCP,443:30522/TCP 84m
- 配置您的使用 NGINX Ingress Controller 的 Ingress 资源通过增加:
annotations: kubernetes.io/ingress.class: nginx
,否则它将使用默认的 gce ingress 类。
- 并将其
proxy-max-temp-file-size
设置为零以拒绝创建临时文件,这是您的 Ingress 对象的模型:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: <INGRESS_NAME>
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-max-temp-file-size: "0"
spec:
rules:
- host: <FQDN>
http:
paths:
- backend:
serviceName: <SERVICE_NAME>
servicePort: <PORT>
这ingress.class: nginx
是将 Ingress 对象分配给 Nginx Ingress 的关键。请注意,GCE 和 NGINX Ingress 可以共存,您可以让两个 Ingress 处理多个 Ingress 对象。
如果您有任何问题,请在评论中告诉我。