将 HTTPS 应用程序端点与 Azure 容器应用程序结合使用

问题描述 投票:0回答:1

从 Azure 容器应用程序文档中可以清楚地看出,对于客户端请求,TLS 终止发生在入口处(入口类型为 HTTP 的 Envoy 代理),并且入口将与目标端口上的容器应用程序建立新连接。如果我的容器应用程序内的应用程序使用 HTTPS 端点,envoy ingress 将如何与我的容器应用程序建立 TLS 连接?

我找不到任何可以定义/管理 Envoy Ingress (HTTP) 和容器应用程序之间连接的 TLS 参数的配置选项。例如,如果我想让一个证书颁发机构受到 Envoy 的信任,我该怎么做?

我想通过 Azure 门户或 Azure CLI 获取配置参数,以管理 Envoy HTTP 入口和容器应用程序之间的连接。

azure azure-container-apps ssl-handshake
1个回答
0
投票

请考虑一下您的意思 -

如果我的容器应用程序内的应用程序使用 HTTPS 端点,envoy ingress 将如何与我的容器应用程序建立 TLS 连接?

如果您使用自签名证书并使用 HTTPS 在本地测试应用程序,则这与在 Azure 容器中的端口 80 上运行时将其称为 HTTPS 终结点不同。 例如,Dotnet Core 自动生成自签名开发证书并在 HTTPS 本地主机上提供流量。

总之,要在应用程序服务器源而不是代理处终止 SSL -

您必须在端口

443
上使用 SSL 证书运行应用程序服务器本身,并将代理指向它。然后,代理将充当 SSL 直通。

为了确保您绝对想要执行您所要求的操作,以下是 3 种常见的 SSL 终止类型:

3 种常见的 SSL 终止类型

在大多数情况下,您可以执行#1。 注意:红色是HTTP,绿色是HTTPS

Type1 - 代理或负载均衡器处的 SSL 终止

尽管从代理到容器的流量是通过 HTTP 提供的,但它被认为相当安全,因为负载均衡器/代理之后的流量位于隔离的 VPC/VNet 中。这也是许多无服务器环境中的唯一方法。这是您看到最多文档的选项。

TYPE2 - 容器处的 SSL 终止(反向代理)

如果您不想使用 CSP 提供的代理或负载均衡器,这也很常见(并且具有成本效益)。您可以在 Nginx 等反向代理后面运行应用程序容器。 Nginx的conf文件可以帮你终止SSL。

TYPE3 - 应用程序处的 SSL 终止

它并不常见,主要用于特定用例,例如使用裸 Azure VM(或 AWS EC2)、管理主机上的端口以及不想使用类型 1 或类型 2 时。请考虑当您需要时的情况撤销证书、续订证书或自动扩展应用程序。

注意:另外,对于类型 2 和类型 3,(技术上)如果不需要,则不需要使用代理。

如何在应用程序服务器源端终止 SSL

以下是您需要考虑的架构/应用程序级别更改 -

第 1 点 - 应用程序服务器中的更改(代码):

在应用程序内加载证书的步骤可能会有所不同,具体取决于容器内运行的平台/服务器。例如,如果它是 Express 服务器,您可以执行类似的操作 如何为express.js 服务器设置 SSL 证书?。我不清楚你的平台是什么,但你可以找到类似的 C#、Python 等示例。

第 2 点 - 更新容器监听 PORT:

您需要使用 SSL 运行应用程序服务器才能使其正常工作。然后,不要侦听端口 80 上的容器,而是侦听 443。此外,当您在 443 上运行时,应用程序服务器必须以证书 + 私钥启动(有时也使用 CA 链)。

第 3 点 - 使用全球可信的证书:

自签名证书不起作用。您可以使用 LetsEncrypt(免费;还有其他一些选项。)使其成为受信任的证书(而不是自签名)。您还可以从任何其他提供商(付费)生成 SSL 并使用它启动服务器。只要它是全球信任的 CA,它就会按预期工作。

重要提示:在应用程序代码或容器映像中嵌入 Cert + Pvt Key 是不安全的。通过环境变量加载它们或通过 docker 卷挂载等。

您可以注意到,如果您水平扩展应用程序容器,则每个实例都必须具有这些认证。否则,对这些实例的特定调用将失败,并且您将看到间歇性问题。

此外,如果您使用的是 Azure 容器,您可能需要购买 SSL 证书,因为使用 LetsEncrypt 等管理位置将非常棘手且不好玩。这些是短期证书,您的应用程序必须始终指向最新的证书。

© www.soinside.com 2019 - 2024. All rights reserved.