簡體   English   中英

通過 HTTPS 提供 dockerized 微服務

[英]Serving dockerized microservices over HTTPS

我目前正在為 docker 和 SSL 苦苦掙扎。 讓我概述一下我正在嘗試做的事情。

我構建了一個基於微服務的架構,它由一個 react web 應用程序和一些用 python 編寫的“后端”服務組成,並在 docker 容器上用 gunicorn 公開。 我需要通過 SSL 為它服務,因為 Auth0 需要 https 通信。 因此,我構建了服務器,購買了一個域,並通過 let's encrypt 獲得了該域的 SSL 證書。

現在,問題來了,因為 mi services 使用 docker 網絡相互通信,比如services-network 出於這個原因,它們通過 url `service:port/example 相互引用。

目前,我能夠使用 https 成功連接到我的 web 應用程序,但是每當嘗試聯系“后端”服務時,連接都會被拒絕,因為它來自非安全資源(我使用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 網絡來完成。

最后,我的問題是:使容器通過 https 在 docker 網絡上進行通信的最佳方式是什么?

我個人喜歡使用 nginx 作為反向代理。 您可以正常配置它並將其設置為proxy_pass <dockerIp:port>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM