如何使用 SSL 在 Kubernetes 中配置 Flask ws?

How to configure a Flask ws in Kubernetes with SSL?

我有一个容器化的 Flash 应用程序(一个在互联网上公开的简单网络服务),gunicorn 通过以下方式启用了 SSL:

CMD ["gunicorn", "--certfile", "/var/tmp/fullchain.pem", "--keyfile", "/var/tmp/key.pem", "__init__:create_app()", "-b", ":8080"]

我有一个机器人,每 3 个月更新一次此路径中的 Let's Encrypt 证书。

现在我正在创建一个 Kubernetes 集群来放置此应用程序并编排副本。

在相关的 question 中,我看到一些入口控制器提供此证书 creation/renew 功能,因此我不再需要映射到 .pem 文件。还有 cert-manager 可以做到这一点。

现在我不知道我是否需要 gunicorn 或者将其配置到 运行 应用程序的最简单和推荐的方法是什么。我也在为我的集群选择入口控制器。

Now I don't know if I need gunicorn.

Gunicorn 就像 java Tomcat,它也可以提高 python 网络服务器的性能,因此也建议在没有 SSL 的情况下使用 Gunicorn。

如果您在同一集群中有其他服务想要与您的 Flask 服务器通信,并且您想要保护该连接,您应该使用 SSL 配置 Gunicorn。如果没有,我认为使用带有证书管理器的入口控制器很方便。

I am also in the process of chosing an ingress controller for my cluster.

嗯,我认为 cert-manager offical doc 可以帮助你,它部署 cert-manager 与 Nginx 入口控制器。

从理论上讲,您不需要退出当前设置:Flask 应用在 HTTPS 上公开。
例如,NGINX 入口控制器可以将(加密的)TLS 数据包直接传递到上游服务器(在您的case Gunicorn) 使用 SSL Passthrough 功能。

但绝对最好以推荐的 Kubernetes 方式进行,为 Ingress 启用 TLS(其中 cert-manager add-on 可以帮助您从 Let's Encrypt 等来源获取证书)