Kubernetes で、 Nginx Ingress Controller を使っていて、Pod 内のアプリケーションサーバーに Uwsgi を使っているケースで、レスポンスの遅いサービスがある場合に、タイムアウトさせないために設定を確認するポイントです。
これらの設定を伸ばしておかないと、 502 エラー もしくは 504 エラーとなります。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
namespace: my-namespace
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: '900'
nginx.ingress.kubernetes.io/proxy-send-timeout: '900'
nginx.ingress.kubernetes.io/proxy-read-timeout: '900'
[uwsgi]
...
socket-timeout = 600
http-timeout = 600
harakiri = 600
import time
from django import http
from django.views import View
class DevSleepView(View):
"""
ロングスリープするビュー。タイムアウトの確認用
/dev/sleep/?seconds=60
"""
def get(self, request, *args, **kwargs):
sleep_time = int(request.GET.get('seconds', 30))
start = timezone.now()
time.sleep(sleep_time)
end = timezone.now()
return http.HttpResponse('{} - {}, Slept {}seconds.'.format(
start.strftime('%Y-%m-%d %H:%M:%S'),
end.strftime('%H:%M:%S'),
sleep_time))
コメント