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

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

入口设置

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

属性 说明 必须
allowInsecure 允许让不安全的流量传输到容器应用。 如果设置为 true,则不会自动使用 HTTPS 将端口 80 的 HTTP 请求重定向到端口 443,从而允许不安全的连接。 false(默认值),true 会启用不安全的连接
clientCertificateMode 用于 mTLS 身份验证的客户端证书模式。 Ignore 表示服务器在转发时丢弃客户端证书。 Accept 表示服务器转发客户端证书,但不需要客户端证书。 Require 表示服务器需要客户端证书。 RequiredAcceptIgnore(默认值)
customDomains 容器应用主机名的自定义域绑定。 请参阅自定义域和证书 绑定数组
exposedPort (仅限 TCP 入口)TCP 侦听的端口。 如果 externaltrue,则该值在容器应用环境中必须唯一。 165535 的端口号。 (不能为 80443
external 允许从容器应用环境外部流入你的应用。 truefalse(默认值)
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。

启用入口

可以使用 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 容器应用环境。 externalinternal
--allow-insecure allowInsecure 允许与应用建立 HTTP 连接。
--target-port targetPort 容器侦听传入请求的端口。 将此值设置为容器使用的端口号。 应用程序入口终结点始终在端口 443 上公开。
--exposed-port exposedPort (仅限 TCP 入口)TCP 入口的端口。 如果 externaltrue,并且入口在外部,则该值在容器应用环境中必须唯一。 165535 的端口号。 (不能为 80443
--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”,请为容器应用输入公开的端口。 公开的端口号可为 165535。 (不能为 80443

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

使用 ingress 配置属性为容器应用启用入口。 将 external 属性设置为 true,然后设置 transporttargetPort 属性。 - 对于外部入口,external 属性可设置为 true;对于内部入口,可设置为 false。

  • transport 设置为 auto 以检测 HTTP/1 或 HTTP/2,设置为 http 以检测 HTTP/1,设置为 http2 以检测 HTTP/2,或设置为 tcp 以检测 TCP。
  • targetPort 设置为容器使用的端口号。 应用程序入口终结点始终在端口 443 上公开。
  • 如果传输类型为 tcp,请将 exposedPort 属性设置为 TCP 入口的端口。 如果入口在外部,则该值在容器应用环境中必须唯一。 从 165535 的端口号。 (不能为 80443
{
  ...
  "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. 选择“保存”。

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

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

使用其他 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

Azure 门户中不支持此功能。

以下 ARM 模板提供了如何将其他端口添加到容器应用的示例。 应在容器应用的 propertiesconfigurationingress 部分中的 additionalPortMappings 下添加每个附加端口。 以下是一个示例:

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

后续步骤