在 Azure 容器应用中为应用配置入口

本文介绍如何为容器应用启用入口功能。 入口是应用程序范围内的设置。 对入口设置所做的更改会同时应用于所有修订,不会生成新修订。

入口设置

可以设置以下入口模板属性:

属性 说明 值 必须
allowInsecure 允许让不安全的流量传输到容器应用。 设置为 true 时,HTTP 请求不会使用 HTTPS 自动重定向到端口 443,从而允许不安全的连接。 false(默认值),true 会启用不安全的连接 否
clientCertificateMode 用于 mTLS 身份验证的客户端证书模式。 Ignore 指示服务器在转发时删除客户端证书。 Accept 指示服务器转发客户端证书,但不需要客户端证书。 Require 指示服务器需要客户端证书。 Required、Accept、Ignore(默认值) 否
customDomains 容器应用主机名的自定义域绑定。 请参阅自定义域和证书 绑定数组 否
exposedPort (仅限 TCP 入口)TCP 侦听的端口。 如果 external 为 true,则该值在容器应用环境中必须唯一。 从 1 到 65535 的端口号。 (不能为 80 或 443) 否
external 允许从容器应用环境外部流入你的应用。 true 或 false(默认值) 是
ipSecurityRestrictions IP 入口限制。 请参阅设置 IP 入口限制 规则数组 否
stickySessions.affinity 启用会话亲和性。 none(默认)、sticky 否
targetPort 容器应用侦听传入请求的端口。 将此值设置为容器应用使用的端口号。 对于 HTTP 入口,应用程序入口终结点始终在端口 443 上公开。 是
traffic 在修订版之间拆分的流量拆分权重。 规则数组 否
transport 传输协议类型。 auto (默认值)检测 HTTP/1 或 HTTP/2, http 对于 HTTP/1, http2 对于 HTTP/2, tcp 对于 TCP。 否

自动端口检测

如果容器应用启用了 HTTP 入口且未设置目标端口,则 Azure 容器应用会扫描容器上的所有侦听端口来自动检测目标端口。 如果只检测到一个端口,该端口将设置为容器应用的目标端口。 如果检测到多个端口,容器应用不会自动设置目标端口,并且需要手动设置目标端口。

  • 自动端口检测仅适用于 HTTP 流量,不适用于 TCP 流量。
  • 如果 HTTP 运行状况探测侦听端口 80 或 443,此配置可能会干扰自动端口检测。 默认入口配置使用 TCP 运行状况探测。 如需了解更多信息,请参阅 运行状况探测器。

启用入口

可以使用 Azure CLI、ARM 模板或 Azure 门户为容器应用配置入口。

该 az containerapp ingress enable 命令为容器应用启用入口。 必须指定目标端口,如果传输类型为 tcp,则你可以选择设置公开的端口。

az containerapp ingress enable \
    --name <app-name> \
    --resource-group <resource-group> \
    --target-port <target-port> \
    --exposed-port <tcp-exposed-port> \
    --transport <transport> \
    --type <external>
    --allow-insecure

az containerapp ingress enable 入口参数:

选项 属性 说明 值 必须
--type external 允许从任何位置流入应用,或限制流入其内部 Azure 容器应用环境。 external 或 internal 是
--allow-insecure allowInsecure 允许与应用建立 HTTP 连接。 否
--target-port targetPort 容器侦听传入请求的端口。 将此值设置为容器使用的端口号。 应用程序入口终结点始终在端口 443 上公开。 是
--exposed-port exposedPort (仅限 TCP 入口)TCP 入口的端口。 如果 external 为 true,并且入口在外部,则该值在容器应用环境中必须唯一。 从 1 到 65535 的端口号。 (不能为 80 或 443) 否
--transport 传输 传输协议类型。 auto(默认值)检测 HTTP/1 或 HTTP/2,http 检测 HTTP/1,http2 检测 HTTP/2,tcp 检测 TCP。 否

使用门户为容器应用启用入口。

可以在创建容器应用时启用入口,或者,可为现有容器应用启用入口。

  • 若要在创建容器应用时配置入口,请在容器应用创建向导的“应用程序配置”选项卡中选择“入口”。
  • 若要为现有容器应用配置入口,请在容器应用资源页的“设置”菜单中选择“入口”。

为容器应用启用入口

可以在使用 Azure 门户创建容器应用时配置入口。

  1. 将“入口”设置为“已启用”。
  2. 配置容器应用的入口设置。
  3. 为内部入口选择“限制为容器应用环境”,或者为外部入口选择“接受来自任何位置的流量”。
  4. 选择 入口类型: HTTP 或 TCP (TCP 入口仅在配置了虚拟网络的环境中可用)。
  5. 如果为“入口类型”选择了“HTTP”,请选择“传输”:“自动”、“HTTP/1”或“HTTP/2”。
  6. 若要允许与应用建立 HTTP 连接,请选择“不安全的连接”。
  7. 输入容器应用的目标端口。
  8. 如果为“传输”选项选择了“TCP”,请为容器应用输入公开的端口。 公开的端口号可为 1 到 65535。 (不能为 80 或 443)

在容器应用的“入口”设置页中,还可以配置“IP 限制”。 有关配置 IP 限制的信息,请参阅 IP 限制。

使用 ingress 配置属性为容器应用启用入口。 将 external 属性设置为 true,然后设置 transport 和 targetPort 属性。

  • 将 external 外部入口的属性设置为 true ,或将内部入口设置为 false 。
  • 将 transport 设置为 auto 以检测 HTTP/1 或 HTTP/2,设置为 http 以检测 HTTP/1,设置为 http2 以检测 HTTP/2,或设置为 tcp 以检测 TCP。
  • 将 targetPort 设置为容器使用的端口号。 应用程序入口终结点始终在端口 443 上公开。
  • 如果传输类型为 exposedPort,请将 tcp 属性设置为 TCP 入口的端口。 如果入口在外部,则该值在容器应用环境中必须唯一。 从 1 到 65535 的端口号。 (不能为 80 或 443)
{
  ...
  "configuration": {
    "ingress": {
        "external": true,
        "transport": "tcp",
        "targetPort": 80,
        "exposedPort": 8080,
    },
  }
}

禁用入口

使用 az containerapp ingress 命令禁用容器应用的入口。

az containerapp ingress disable \
    --name <app-name> \
    --resource-group <resource-group> \

可以通过门户禁用容器应用的入口。

  1. 在容器应用页上的“设置”菜单中选择“入口”。
  2. 取消选择“入口”和“已启用”设置。
  3. 选择“保存”。

禁用容器应用入口的屏幕截图。

通过完全在 ingress 中省略 properties.configuration 配置属性来禁用容器应用的入口。

使用其他 TCP 端口

可以从应用程序公开额外的 TCP 端口。 有关详细信息,请参阅 入口概念文章。

注意

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

可以通过 CLI 添加额外的 TCP 端口,方法是引用包含 TCP 端口配置的 YAML 文件。

az containerapp create \
    --name <app-name> \
    --resource-group <resource-group> \
    --yaml <your-yaml-file>

以下示例演示了可以在前面的 CLI 命令中引用的 YAML 文件。 额外 TCP 端口的配置位于 additionalPortMappings。

location: chinanorth3
name: multiport-example
properties:
  configuration:
    activeRevisionsMode: Single
    ingress:
      additionalPortMappings:
      - exposedPort: 21025
        external: false
        targetPort: 1025
      allowInsecure: false
      external: true
      targetPort: 1080
      traffic:
      - latestRevision: true
        weight: 100
      transport: http
  managedEnvironmentId: <env id>
  template:
    containers:
    - image: maildev/maildev
      name: maildev
      resources:
        cpu: 0.25
        memory: 0.5Gi
    scale:
      maxReplicas: 1
      minReplicas: 1
  workloadProfileName: Consumption
type: Microsoft.App/containerApps
  1. 展开入口边栏选项卡中其他 TCP 端口部分。
  2. 在 目标端口 字段中添加应用程序接受流量的额外 TCP 端口。 如果将 公开端口 留空,则它使用与 目标端口相同的值。
  3. 根据需要更改“入口流量”字段。 此字段配置每个端口的入口流量限制范围。
  4. 完成后,单击“保存”。

以下 ARM 模板提供了一个示例,演示如何向容器应用添加额外的端口。 为容器应用在additionalPortMappings的ingress节中的configuration下添加每个额外的端口properties。 以下示例演示如何添加额外的端口:

{
  ...
  "properties": {
    ...
    "configuration": {
      "ingress": {
        ...
        "additionalPortMappings": [
          {
            "external": false
            "targetPort": 80
            "exposedPort": 12000
          }
        ]
      }
    }
  ...
}

后续步骤