【问题标题】:Running Flask web application in Google Kubernetes Engine在 Google Kubernetes Engine 中运行 Flask Web 应用程序
【发布时间】:2019-02-18 08:29:30
【问题描述】:

网络上有绝大多数教程和文档都在开发状态下运行 Flask。开发模式下的日志如下所示:

* Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)

我想了解更多有关如何使其生产就绪的信息。我也看到过使用生产就绪的 WSGI 服务器和 nginx 作为前面的反向代理的文档。但是有人能告诉我为什么需要 WSGI 和反向代理吗?

如果我的 Flask 应用程序是 dockerized 并在 Google Kubernetes Engine 中运行,那是否还有必要呢? GKE 会不会照顾 WSGI 和反向代理的目的?

【问题讨论】:

  • 我之前也考虑过这个问题。在裸机 VM 上部署 Flask 应用程序时,似乎需要大多数工具(gunicornuWSGI)等。有了 Kubernetes 及其所有的负载平衡和各种服务器端的处理,这些有必要吗?

标签: flask web-applications kubernetes reverse-proxy wsgi


【解决方案1】:

正如Flask's documentation 所说:

Flask 的内置服务器不适合生产

为什么选择 WSGI?部署 Python Web 应用程序是 a standard way,它在选择服务器时为您提供了选项(即,您可以在不更改应用程序的情况下选择最适合您的应用程序/工作流的选项),它允许将扩展问题卸载到服务器。

为什么要使用反向代理?这取决于服务器。这里是Gunicorn's rationale

...我们强烈建议您使用 Nginx。如果您选择另一个代理服务器,则需要确保在使用默认 Gunicorn 工作程序时它缓冲慢速客户端。如果没有这种缓冲,Gunicorn 很容易受到拒绝服务攻击。

这里是Waitress's rationale

人们通常会在反向代理后面设置“纯 Python”网络服务器,尤其是当他们需要 TLS 支持时(Waitress 本身并不支持 TLS)。即使您不需要 TLS 支持,Waitress 和其他纯 Python Web 服务器设置为仅处理反向代理后面的请求也很常见;这些代理通常有很多有用的部署旋钮。

反向代理的其他实际原因可能包括需要多个后端的反向代理(其中一些可能不是 Python Web 应用程序)、缓存响应和提供静态内容(Nginx、例如,恰好擅长)。并非所有 WSGI 服务器都需要反向代理:uWSGICherryPy 将其视为可选。

附注Google App Engine 似乎是 WSGI 兼容的,不需要任何额外的配置。

【讨论】:

  • 如果您在 GKE 中运行 Flask,您确定需要这些吗?请记住,您发布的所有上述信息都是“前 Kubernetes”时代
猜你喜欢
  • 2021-06-12
  • 2019-04-22
  • 2013-12-20
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多