首页 > 解决方案 > 通过 HTTPS 提供 dockerized 微服务

问题描述

我目前正在努力使用 docker 和 SSL。让我概述一下我正在尝试做的事情。

我构建了一个基于微服务的架构,它由一个 React Web 应用程序和一些用 python 编写的“后端”服务组成,并在 docker 容器上用 gunicorn 公开。由于需要 https 通信的 Auth0,我需要通过 SSL 提供它。因此,我构建了服务器,购买了一个域,并通过 let's encrypt 获得了该域的 SSL 证书。

现在,麻烦就来了,因为 mi 服务通过 docker 网络相互通信,比如services-network. 出于这个原因,他们使用 url `service:port/example.

目前,我可以使用 https 成功连接到我的网络应用程序,但是每当尝试联系“后端”服务时,连接都会被拒绝,因为它来自非安全资源(我使用过http://service:port/endpoint)。

我尝试使用为 webapp 生成的 let's encrypt 证书,但通信被消息阻止requests.exceptions.SSLError: HTTPSConnectionPool(host='service', port=8081): Max retries exceeded with url: /endpoint (Caused by SSLError(CertificateError("hostname 'service' doesn't match 'domain.com'",),))

我了解此错误的可能解决方法是使服务在不使用 docker 网络但使用外部网络的情况下相互通信。无论如何,我认为这不是一个好习惯,容器之间的通信需要通过 docker 网络来完成。

最后,我的问题是:让容器通过 docker 网络通过 https 进行通信的最佳方式是什么?

标签: dockersslnetworkinghttpsgunicorn

解决方案


我个人喜欢使用 nginx 作为反向代理。您可以正常配置它并将其设置为proxy_pass <dockerIp:port>.

许多人喜欢使用traefik.io它具有许多功能,包括Let's Encrypt集成。


推荐阅读