你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器应用中的自定义域名和免费托管证书

Azure 容器应用允许将一个或多个自定义域绑定到容器应用。 可以为自定义域自动配置免费托管证书。

若要使用自己的证书设置自定义域,请参阅 Azure 容器应用中的自定义域名和证书

注意

如果配置自定义环境 DNS 后缀,则无法向容器应用添加包含此后缀的自定义域。

免费证书要求

Azure 容器应用为自定义域提供免费托管证书。 无需你执行任何操作,只要应用继续满足托管证书的要求,此 TLS/SSL 服务器证书就会自动续订。

要求如下:

  • 容器应用已启用 HTTP 流入量,并且可公开访问。

  • 对于顶点域,必须有一条指向容器应用环境的 IP 地址的 A 记录。

  • 对于子域,必须具有直接映射到容器应用的自动生成域名的 CNAME 记录。 映射到中间 CNAME 值将阻止证书颁发和续订。 CNAME 值的例子包括流量管理器、Cloudflare 和类似的服务。

注意

若要确保证书颁发和后续续订成功进行,在分配托管证书时,必须始终满足所有要求。

添加自定义域和托管证书

  1. Azure 门户中导航到你的容器应用

  2. 通过在“设置”部分中选择“流入量”来验证应用是否启用了 HTTP 流入量。 如果未启用流入量,请使用以下步骤启用它:

    1. 将 HTTP 入口设置为“已启用”。
    2. 选择所需的“入口流量”设置。
    3. 输入目标端口。
    4. 选择“保存” 。
  3. 在“设置”部分下,选择“自定义域”。

  4. 选择“添加自定义域”。

  5. 在“添加自定义域和证书”窗口中,在“TLS/SSL 证书”中,选择“托管证书”。

  6. 在“”中,输入要添加的域。

  7. 根据域的类型选择“主机名记录类型”。

    域类型 记录类型 说明
    Apex 域 A 记录 顶点域是域根级别的域。 例如,如果 DNS 区域是 contoso.com,则 contoso.com 为顶点域。
    子域 CNAME 子域是属于另一个域的域。 例如,如果 DNS 区域为 contoso.com,则 www.contoso.com 是可在该区域中配置的子域的示例。
  8. 使用托管域的 DNS 提供程序,根据所选“主机名记录类型”使用“域验证”部分中显示的值创建 DNS 记录。 记录将域指向容器应用,并验证你是否为所有者。

    • 如果选择“A 记录”,请创建以下 DNS 记录:

      记录类型 主机
      A @ 容器应用环境的 IP 地址
      TXT asuid 域验证码
    • 如果选择“CNAME”,请创建以下 DNS 记录:

      记录类型 主机
      CNAME 子域(例如,www 容器应用的自动生成的 <appname>.<region>.azurecontainerapps.io
      TXT asuid. 后跟子域(例如,asuid.www 域验证码
  9. 选择“验证”。

  10. 验证成功后,选择“添加”。

    颁发证书并将域添加到容器应用可能需要几分钟时间。

  11. 操作完成后,将在自定义域列表中看到域名,其状态为“受保护”。 导航到你的域以验证它是否可访问。

容器应用支持顶点域和子域。 每个域类型都需要不同的 DNS 记录类型和验证方法。

域类型 记录类型 验证方法 说明
Apex 域 A 记录 HTTP 顶点域是域根级别的域。 例如,如果 DNS 区域是 contoso.com,则 contoso.com 为顶点域。
子域 CNAME CNAME 子域是属于另一个域的域。 例如,如果 DNS 区域为 contoso.com,则 www.contoso.com 是可在该区域中配置的子域的示例。
  1. 使用 Azure CLI 登录 Azure。

    az login
    
  2. 接下来,安装适用于 CLI 的 Azure 容器应用扩展。

    az extension add --name containerapp --upgrade
    
  3. 验证容器应用是否已启用 HTTP 流入量。

    az containerapp ingress show -n <CONTAINER_APP_NAME> -g <RESOURCE_GROUP_NAME>
    

    如果未启用流入量,请使用以下步骤启用它:

    az containerapp ingress enable -n <CONTAINER_APP_NAME> -g <RESOURCE_GROUP_NAME> \
            --type external --target-port <TARGET_PORT> --transport auto
    

    <CONTAINER_APP_NAME> 替换为容器应用的名称,将 <RESOURCE_GROUP_NAME> 替换为包含容器应用的资源组的名称,并将 <TARGET_PORT> 替换为容器应用正在侦听的端口。

  4. 如果要配置顶点域,请获取容器应用环境的 IP 地址。

    az containerapp env show -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP_NAME> -o tsv --query "properties.staticIp"
    

    <ENVIRONMENT_NAME> 替换为环境的名称,将 <RESOURCE_GROUP_NAME> 替换为包含环境的资源组的名称。

  5. 如果要配置子域,请获取容器应用的自动生成域。

    az containerapp show -n <CONTAINER_APP_NAME> -g <RESOURCE_GROUP_NAME> -o tsv --query "properties.configuration.ingress.fqdn"
    

    <CONTAINER_APP_NAME> 替换为容器应用的名称,将 <RESOURCE_GROUP_NAME> 替换为包含容器应用的资源组的名称。

  6. 获取域验证码。

    az containerapp show -n <CONTAINER_APP_NAME> -g <RESOURCE_GROUP_NAME> -o tsv --query "properties.customDomainVerificationId"
    

    <CONTAINER_APP_NAME> 替换为容器应用的名称,将 <RESOURCE_GROUP_NAME> 替换为包含容器应用的资源组的名称。

  7. 使用托管域的 DNS 提供程序,根据所选记录类型使用“域验证”部分中显示的值创建 DNS 记录。 记录将域指向容器应用,并验证你是否拥有它。

    • 如果要配置顶点域,请创建以下 DNS 记录:

      记录类型 主机
      A @ 容器应用环境的 IP 地址
      TXT asuid 域验证码
    • 如果要配置子域,请创建以下 DNS 记录:

      记录类型 主机
      CNAME 子域(例如,www 容器应用的自动生成的域
      TXT asuid. 后跟子域(例如,asuid.www 域验证码
  8. 将域添加到容器应用。

    az containerapp hostname add --hostname <DOMAIN_NAME> -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME>
    

    <DOMAIN_NAME> 替换为要添加的域名,将 <RESOURCE_GROUP_NAME> 替换为包含容器应用的资源组的名称,并将 <CONTAINER_APP_NAME> 替换为容器应用的名称。

  9. 配置托管证书并将域绑定到容器应用。

    az containerapp hostname bind --hostname <DOMAIN_NAME> -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --environment <ENVIRONMENT_NAME> --validation-method <VALIDATION_METHOD>
    

    <DOMAIN_NAME> 替换为要添加的域名,将 <RESOURCE_GROUP_NAME> 替换为包含容器应用的资源组的名称,将 <CONTAINER_APP_NAME> 替换为容器应用的名称,并将 <ENVIRONMENT_NAME> 替换为环境的名称。

    • 如果要配置 A 记录,请将 <VALIDATION_METHOD> 替换为 HTTP
    • 如果要配置 CNAME,请将 <VALIDATION_METHOD> 替换为 CNAME

    颁发证书并将域添加到容器应用可能需要几分钟时间。

  10. 操作完成后,请导航到域以验证它是否可访问。

后续步骤