Django uWSGIが提供するdockerコンテナー内のアプリケーションを実行しているKubernetesクラスターがあります。入力コントローラーはingress-nginxです(これは https://github.com/kubernetes/ingress-nginx )。
最近、クラスター全体を1.9から1.11にアップグレードしました。いくつかの問題のため、kubeadm reset
およびkubeadm init
を再度実行する必要がありました。
それ以来(おそらく)、ユーザーから報告された奇妙な502エラーが発生することがあります:upstream prematurely closed connection while reading response header from upstream
。
私にとっての最大の問題は、それらのリクエストがコンテナー内のuWSGIログに表示されないため、何が起こっているのかわかりません。
これが私のuwsgi.iniファイルです:
[uwsgi]
http = 0.0.0.0:8000
# Django-related settings
# the base directory (full path)
chdir = /app
# Django's wsgi file
module = in_web_server.wsgi:application
pythonpath = /app
static-map = /static=/app/static
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# clear environment on exit
vacuum = true
# spooler setup
spooler = /spooler
spooler-processes = 2
spooler-frequency = 10
Dockerfile CMD:CMD ["/usr/local/bin/uwsgi", "--ini", "/app/in_web_server/docker/in/in_web_server_uwsgi.ini"]
Kubernetes Ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: in-debug
namespace: in-debug
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$Host$uri permanent;
}
spec:
rules:
- Host: test-in
http:
paths:
- path: "/"
backend:
serviceName: in-debug
servicePort: 8000
これらのエラーは、より大きな(ただし、それほど大きくない)PUT要求の場合にのみ発生します。大まかに言うと、300KB以下なので、大した問題ではありません。
また、502エラーは約1分後に返されるため、タイムアウトの問題が発生している可能性があります。しかし、uwsgiログ内にトレースがないため、それを見つけることができません。私が間違っていることのヒントはありますか?
から https://monicalent.com/blog/2013/12/06/set-up-nginx-and-uwsgi/ プロセスの仮想メモリサイズを制限する「limit-as」オプションが見つかりましたそして、「上流の時期尚早に閉じられた接続」というメッセージを伴う502エラーコードの原因である可能性があります。
問題に基づいて(以下のリストを参照)、バッファリングをオフにして、タイムアウト値を試すことをお勧めします。たとえば、それらをnginx-ingressコントローラー config-map に配置して、Ingressオブジェクト構成から削除してみます。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: in-debug
namespace: in-debug
annotations:
nginx.org/proxy-buffering: "False"
...
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-config
data:
proxy-connect-timeout: "600s"
proxy-read-timeout: "600s"
client-max-body-size: "5m"
問題リスト:
マニュアル: