Azure 容器应用允许将一个或多个自定义域绑定到容器应用。 当容器应用可公开访问时,可以为自定义域自动配置免费托管证书。
如果要设置使用自己的证书的自定义域,请参阅 自定义域名并在 Azure 容器应用中自带证书。
注意事项
如果配置 自定义环境 DNS 后缀,则无法向容器应用添加包含此后缀的自定义域。
免费证书要求
容器应用为自定义域提供免费托管证书。 只要应用继续满足托管证书的要求,此 TLS/SSL 服务器证书就会自动续订,无需执行任何作。
要求如下:
启用 HTTP 入口,确保容器应用可公开访问。
具有指向容器应用环境的 IP 地址的顶点域的 A 记录。
为子域建立一个 CNAME 记录,该记录直接映射到容器应用生成的域名。 映射到中间 CNAME 值将阻止证书颁发和续订。 CNAME 值的例子包括流量管理器、Cloudflare 和类似的服务。
注意事项
若要确保证书颁发和后续续订成功进行,必须在分配托管证书时随时满足所有要求。
添加自定义域和托管证书
在 Azure 门户中访问你的容器应用。
通过在左窗格中的“网络”部分选择“入口”,验证应用是否已启用 HTTP 入口。 如果未启用入口,请使用以下步骤启用它:
- 将 入口 设置为 “已启用”。
- 选择所需的 入口流量 设置。
- 将 入口类型 设置为 HTTP。
- 输入目标端口。
- 选择“保存” 。
在左窗格中的“ 网络 ”下,选择“ 自定义域”。
选择“添加自定义域”。
在 “添加自定义域和证书 ”窗格中,为 TLS/SSL 证书选择 “托管证书”。
在 “域 ”框中,输入要添加的域。
根据域 的类型选择主机名记录类型:
域类型 记录类型 说明 根域名 A 记录 顶点域是域根级别的域。 例如,如果 DNS 区域是 contoso.com,则contoso.com为顶点域。子域 CNAME 子域是属于另一个域的域。 例如,如果 DNS 区域为 contoso.com,则www.contoso.com是可在该区域中配置的子域的示例。通过使用托管域的 DNS 提供程序,根据使用“域验证”部分中显示的值选择的主机名记录类型创建 DNS 记录。 记录将域指向你的容器应用,并验证你是否是所有者。
如果选择“A 记录”,请创建以下 DNS 记录:
记录类型 主机 值 A @容器应用环境的 IP 地址。 TXT asuid域验证码。 如果选择“CNAME”,请创建以下 DNS 记录:
记录类型 主机 值 CNAME 子域(例如, www)。你的容器应用所生成的域。 TXT asuid.后跟子域(例如,asuid.www)。域验证码。
选择“验证”。
验证成功后,选择“ 添加”。
颁发证书并将域添加到你的容器应用可能需要几分钟时间。
作完成后,将在状态为 “安全”的自定义域列表中看到域名。 转到你的域以验证它是否可访问。
容器应用支持顶点域和子域。 每个域类型都需要不同的 DNS 记录类型和验证方法:
| 域类型 | 记录类型 | 验证方法 | 说明 |
|---|---|---|---|
| Apex 域 | A 记录 | HTTP | 顶级域是域根级别的域。 例如,如果 DNS 区域是 contoso.com,则 contoso.com 为顶点域。 |
| 子域 | CNAME | CNAME | 子域是属于另一个域的域。 例如,如果 DNS 区域为 contoso.com,则 www.contoso.com 是可在该区域中配置的子域的示例。 |
使用 Azure CLI 登录到 Azure:
az login安装 CLI 的容器应用扩展:
az extension add --name containerapp --upgrade设置以下环境变量。 将
<PLACEHOLDERS>替换为你的值。RESOURCE_GROUP = "<RESOURCE_GROUP>" CONTAINER_APP = "<CONTAINER_APP>" ENVIRONMENT = "<ENVIRONMENT>" TARGET_PORT = "<TARGET_PORT>" DOMAIN_NAME = "<DOMAIN_NAME>" CERTIFICATE_LOWERCASE_NAME = "<CERTIFICATE_LOWERCASE_NAME>" CERTIFICATE_LOCAL_PATH = "<CERTIFICATE_LOCAL_PATH>" CERTIFICATE_PASSWORD = "<CERTIFICATE_PASSWORD>"- 将
<CERTIFICATE_LOCAL_PATH>替换为你的证书文件的本地路径。 - 用环境中唯一的小写证书名称替换
<CERTIFICATE_LOWERCASE_NAME>。 - 将
<TARGET_PORT>替换为你的容器应用正在侦听的端口。
- 将
验证容器应用是否已启用 HTTP 入口:
az containerapp ingress show \ -n $CONTAINER_APP \ -g $RESOURCE_GROUP如果未启用入口,请启用它:
az containerapp ingress enable \ -n $CONTAINER_APP \ -g $RESOURCE_GROUP \ --type external \ --target-port $TARGET_PORT \ --transport auto如果要配置顶点域,请获取容器应用环境的 IP 地址:
az containerapp env show \ -n $ENVIRONMENT \ -g $RESOURCE_GROUP \ -o tsv \ --query "properties.staticIp"如果要配置子域,请获取容器应用的自动生成域:
az containerapp show \ -n $CONTAINER_APP \ -g $RESOURCE_GROUP \ -o tsv \ --query "properties.configuration.ingress.fqdn"获取域验证码:
az containerapp show \ -n $CONTAINER_APP \ -g $RESOURCE_GROUP \ -o tsv \ --query "properties.customDomainVerificationId"使用托管域的 DNS 提供程序,使用“ 域验证 ”部分中显示的值根据所选的记录类型创建 DNS 记录。 记录将域指向容器应用,并验证你是否拥有它。
如果选择“A 记录”,请创建以下 DNS 记录:
记录类型 主机 值 A @容器应用环境的 IP 地址。 TXT asuid域验证码。 如果选择“CNAME”,请创建以下 DNS 记录:
记录类型 主机 值 CNAME 子域(例如, www)。你的容器应用所生成的域。 TXT asuid.后跟子域(例如,asuid.www)。域验证码。
将域名添加到您的容器应用:
az containerapp hostname add \ --hostname $DOMAIN_NAME \ -g $RESOURCE_GROUP \ -n $CONTAINER_APP配置托管证书并将域绑定到容器应用:
az containerapp hostname bind \ --hostname $DOMAIN_NAME \ -g $RESOURCE_GROUP \ -n $CONTAINER_APP \ --environment $ENVIRONMENT \ --validation-method <VALIDATION_METHOD>如果要配置 A 记录,请将
<VALIDATION_METHOD>替换为HTTP。如果要配置 CNAME,请将
<VALIDATION_METHOD>替换为CNAME。
颁发证书并将域添加到你的容器应用可能需要几分钟时间。
在操作完成后,转到您的域以检查它是否可访问。