为 Azure 容器应用中的应用配置入口
本文介绍如何为容器应用启用入口功能。 入口是应用程序范围内的设置。 对入口设置所做的更改会同时应用于所有修订,不会生成新修订。
入口设置
可以设置以下入口模板属性:
属性 | 说明 | 值 | 必须 |
---|---|---|---|
allowInsecure |
允许让不安全的流量传输到容器应用。 如果设置为 true ,则不会自动使用 HTTPS 将端口 80 的 HTTP 请求重定向到端口 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。 |
否 |
启用入口
可以使用 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 门户创建容器应用时配置入口。
- 将“入口”设置为“已启用”。
- 配置容器应用的入口设置。
- 为内部入口选择“限制为容器应用环境”,或者为外部入口选择“接受来自任何位置的流量”。
- 选择“入口类型”:“HTTP”或“TCP”(TCP 入口仅在配置了自定义虚拟网络的环境中可用)。
- 如果为“入口类型”选择了“HTTP”,请选择“传输”:“自动”、“HTTP/1”或“HTTP/2”。
- 若要允许与应用建立 HTTP 连接,请选择“不安全的连接”。
- 输入容器应用的目标端口。
- 如果为“传输”选项选择了“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
上公开。 - 如果传输类型为
tcp
,请将exposedPort
属性设置为 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> \
可以使用门户禁用容器应用的入口。
- 在容器应用页上的“设置”菜单中选择“入口”。
- 取消选择“入口”和“已启用”设置。
- 选择“保存”。
通过完全在 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 模板提供了如何将其他端口添加到容器应用的示例。 应在容器应用的 properties
内 configuration
的 ingress
部分中的 additionalPortMappings
下添加每个附加端口。 以下是一个示例:
{
...
"properties": {
...
"configuration": {
"ingress": {
...
"additionalPortMappings": [
{
"external": false
"targetPort": 80
"exposedPort": 12000
}
]
}
}
...
}