本文介绍如何为容器应用启用入口功能。 入口是应用程序范围内的设置。 对入口设置所做的更改会同时应用于所有修订,不会生成新修订。
入口设置
可以设置以下入口模板属性:
| 属性 | 说明 | 值 | 必须 |
|---|---|---|---|
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 门户创建容器应用时配置入口。
- 将“入口”设置为“已启用”。
- 配置容器应用的入口设置。
- 为内部入口选择“限制为容器应用环境”,或者为外部入口选择“接受来自任何位置的流量”。
- 选择 入口类型: 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上公开。 - 如果传输类型为
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> \
可以通过门户禁用容器应用的入口。
- 在容器应用页上的“设置”菜单中选择“入口”。
- 取消选择“入口”和“已启用”设置。
- 选择“保存”。
通过完全在 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
- 展开入口边栏选项卡中其他 TCP 端口部分。
- 在 目标端口 字段中添加应用程序接受流量的额外 TCP 端口。 如果将 公开端口 留空,则它使用与 目标端口相同的值。
- 根据需要更改“入口流量”字段。 此字段配置每个端口的入口流量限制范围。
- 完成后,单击“保存”。
以下 ARM 模板提供了一个示例,演示如何向容器应用添加额外的端口。 为容器应用在additionalPortMappings的ingress节中的configuration下添加每个额外的端口properties。 以下示例演示如何添加额外的端口:
{
...
"properties": {
...
"configuration": {
"ingress": {
...
"additionalPortMappings": [
{
"external": false
"targetPort": 80
"exposedPort": 12000
}
]
}
}
...
}