Azure 容器应用中的入口

使用 Azure 容器应用,可以通过启用入口,向公共 Web、虚拟网络 (VNET) 以及环境中的其他容器应用公开你的容器应用。 入口设置是通过一组规则实施的,这些规则控制如何将外部和内部流量路由到容器应用。 启用入口时,无需创建 Azure 负载均衡器、公共 IP 地址或任何其他 Azure 资源来启用传入 HTTP 请求或 TCP 流量。

入口支持:

显示两个修订版之间的入口流量拆分的示例入口配置:

显示在两个修订版之间拆分流量的入口配置的示意图。

有关配置详细信息,请参阅配置入口

外部和内部入口

启用入口时,可以在两种类型的入口之间进行选择:

  • 外部:接受来自公共 Internet 和容器应用内部环境的流量。
  • 内部:仅允许从容器应用环境内部进行内部访问。

可为环境中的每个容器应用配置不同的入口设置。 例如,在包含多个微服务应用的方案中,为了提高安全性,可以使用单个容器应用来接收公共请求并将请求传递给后台服务。 在此方案中,你将配置具有外部入口的面向公众的容器应用,以及具有内部入口的面向内部的容器应用。

协议类型

容器应用支持两种入口协议:HTTP 和 TCP。

HTTP

启用 HTTP 入口后,你的容器应用:

  • 支持 TLS 终止
  • 支持 HTTP/1.1 和 HTTP/2
  • 支持 WebSocket 和 gRPC
  • 始终使用 TLS 1.2 或 1.3,并在入口点终止的 HTTPS 终结点
  • 公开端口 80(对于 HTTP)和 443(对于 HTTPS)的终结点
    • 默认情况下,对端口 80 的 HTTP 请求会自动重定向到 443 上的 HTTPS
  • 一个完全限定的域名 (FQDN)
  • 请求超时为 240 秒

HTTP 头

HTTP 入口会添加标头,以将有关客户端请求的元数据传递给容器应用。 例如,X-Forwarded-Proto 标头用于标识由客户端用来连接容器应用服务的协议。 下表列出了与容器应用中的入口相关的 HTTP 标头:

标头 描述
X-Forwarded-Proto 由客户端用来连接容器应用服务的协议。 httphttps
X-Forwarded-For 发送请求的客户端的 IP 地址。
X-Forwarded-Host 由客户端用来连接容器应用服务的主机名。
X-Forwarded-Client-Cert 如果 clientCertificateMode 已设置,则为客户端证书。 哈希、证书和链的分号分隔列表。 例如:Hash=....;Cert="...";Chain="...";

TCP

容器应用支持除 HTTP 或 HTTPS 之外的基于 TCP 的协议。 例如,可以通过 TCP 入口来公开使用 Redis 协议的容器应用。

注意

只有使用自定义 VNET 的容器应用环境才支持外部 TCP 入口。

启用 TCP 入口后,你的容器应用:

  • 可由同一环境中的其他容器应用通过你的容器应用名称(由容器应用资源中的 name 属性定义)和公开的端口号访问。
  • 如果将该入口设置为 external,则可以通过应用的完全限定域名 (FQDN) 和公开的端口号从外部访问该应用。

其他 TCP 端口

除了容器应用的主要 HTTP/TCP 端口外,还可以公开其他 TCP 端口,以启用接受多个端口上的 TCP 连接的应用程序。

注意

若要使用此功能,必须具有容器应用 CLI 扩展。 运行 az extension add -n containerapp 以安装最新版本的容器应用 CLI 扩展。

以下内容适用于其他 TCP 端口:

  • 仅当应用本身设置为外部公开且容器应用正在使用自定义 VNet 时,其他 TCP 端口才可设置为外部端口。
  • 所有外部公开的其他 TCP 端口都必须在整个容器应用环境中保持唯一。 这包括所有外部其他 TCP 端口、外部主 TCP 端口和内置 HTTP 入口使用的 80/443 端口。 如果其他端口是内部端口,则多个应用可以共享同一端口。
  • 如果未提供公开端口,则公开端口将默认与目标端口匹配。
  • 每个目标端口必须唯一,并且不能在不同的公开端口上公开相同的目标端口。
  • 每个应用最多有 5 个额外的端口。 如果需要其他端口,请提出支持请求。
  • 只有主入口端口支持内置 HTTP 功能,例如 CORS 和会话亲和性。 在其他 TCP 端口的基础上运行 HTTP 时,不支持这些内置功能。

有关如何为容器应用启用其他端口的详细信息,请访问入口操作指南文章

域名

可通过以下方式访问应用:

  • 默认的完全限定域名 (FQDN):根据环境的 DNS 后缀自动为容器应用环境中的每个应用分配一个 FQDN。 若要自定义环境的 DNS 后缀,请参阅自定义环境 DNS 后缀
  • 自定义域名:可为容器应用环境配置自定义 DNS 域。 有关详细信息,请参阅自定义域名和证书
  • 应用名称:可以使用应用名称在同一环境中的应用之间进行通信。

若要获取应用的 FQDN,请参阅位置

IP 限制

容器应用支持对入口进行 IP 限制。 可以创建规则来配置允许或拒绝访问容器应用的 IP 地址。 有关详细信息,请参阅配置 IP 限制

身份验证

Azure 容器应用提供内置的身份验证和授权功能,以保护支持外部入口的容器应用。 有关详细信息,请参阅 Azure 容器应用中的身份验证和授权

可以将应用配置为支持使用客户端证书 (mTLS) 进行身份验证和流量加密。 有关详细信息,请参阅配置客户端证书

如需详细了解如何使用对等环境级别网络加密,请参阅网络概述

流量拆分

容器应用允许在活动修订版之间拆分传入流量。 定义拆分规则时,需要分配传送到不同修订版的入站流量百分比。 有关详细信息,请参阅流量拆分

会话相关性

会话亲和性,也称为粘性会话,是一种用于将来自客户端的所有 HTTP 请求路由到同一容器应用副本的功能。 此功能适用于需要与同一副本建立一致连接的有状态应用程序。 有关详细信息,请参阅会话亲和性

跨源资源共享 (CORS)

默认情况下,将会阻止通过浏览器从页面向与页面源域不匹配的域发出的任何请求。 为避免对部署到容器应用的服务实施此限制,可以启用跨源资源共享 (CORS)。

后续步骤