Compartilhar via

在 Azure 容器应用中自定义域名和自带证书

Azure Container Apps允许将一个或多个自定义域绑定到容器应用。

  • 每个域名都必须与一个 TLS/SSL 证书相关联。 你可以上传自己的证书,或使用免费的托管证书
  • 证书应用于容器应用环境,并绑定到单个容器应用。 要添加证书,你必须具备对环境的基于角色的访问权限。
  • 需要 SNI 域证书。
  • 必须为容器应用启用 Ingress。

注意事项

如果配置了自定义环境 DNS(域名系统)后缀,则无法将包含该后缀的自定义域添加到容器应用中。

添加自定义域名和证书

重要

如果使用新证书,则必须有一个现有的 SNI 域证书文件可供上传到Azure。

  1. 请进入 Azure portal 中的容器应用。

  2. 通过在左窗格中的“网络”部分选择“入口”来验证应用是否已启用入口。 如果未启用入口,请通过完成以下步骤来启用它:

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

  4. 选择 Add custom domain

  5. Add custom domain and certificate 窗格中,在 TLS/SSL 证书下,选择使用您自己的证书

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

  7. 选择“添加证书”。

  8. “添加证书 ”窗格中的 “源 ”框中,选择“ 上传证书”(.pfx), 然后浏览要上传的证书文件。

  9. 选择“验证”。

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

  11. Add custom domain 和 certificate 窗格中,在 Certificate 中,选择刚添加的证书。

  12. 根据域 的类型选择主机名记录类型

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

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

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

      记录类型 主机
      CNAME 子域(例如,www 你的容器应用所生成的域。
      TXT asuid. 后跟子域(例如,asuid.www 域验证码。
  14. 选择“验证”。

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

  16. 作完成后,将在状态为 “安全”的自定义域列表中看到域名。 转到你的域以验证它是否可访问。

注意事项

对于内部容器应用环境中的容器应用,使用具有 VNET 范围的入口的自定义域需要 额外的配置

容器应用支持顶点域和子域。 每个域类型都需要不同的 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 Container Apps 插件:

    az extension add --name containerapp --upgrade
    
  3. 设置以下环境变量。 将 <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> 替换为你的容器应用正在侦听的端口。
  4. 验证容器应用是否已启用 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
    
  5. 如果要配置顶点域,请获取容器应用环境的 IP 地址:

    az containerapp env show \
        -n $ENVIRONMENT \
        -g $RESOURCE_GROUP \
        -o tsv \
        --query "properties.staticIp"
    
  6. 如果要配置子域,请获取容器应用的自动生成域:

    az containerapp show \
        -n $CONTAINER_APP \
        -g $RESOURCE_GROUP \
        -o tsv \
        --query "properties.configuration.ingress.fqdn"
    
  7. 获取域验证码:

    az containerapp show \
        -n $CONTAINER_APP \
        -g $RESOURCE_GROUP \
        -o tsv \
        --query "properties.customDomainVerificationId"
    
  8. 使用托管域的 DNS 提供程序,使用 “域验证 ”部分中显示的值根据所选记录类型创建 DNS 记录。 记录将域指向容器应用,并验证你是否拥有它。 设置取决于你是否在使用专用终结点功能时使用自定义域:

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

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

      记录类型 主机
      CNAME 子域(例如,www 你的容器应用所生成的域。
      TXT asuid. 后跟子域(例如,asuid.www 域验证码。
  9. 将证书上传到环境:

    az containerapp env certificate upload \
        -g $RESOURCE_GROUP \
        --name $ENVIRONMENT \
        --certificate-file $CERTIFICATE_LOCAL_PATH \
        --password $CERTIFICATE_PASSWORD \
        --certificate-name $CERTIFICATE_LOWERCASE_NAME
    
  10. 将证书和域绑定到容器应用:

    az containerapp hostname bind \
        --hostname $DOMAIN_NAME \
        -g $RESOURCE_GROUP \
        -n $CONTAINER_APP \
        --environment $ENVIRONMENT \
        --certificate $CERTIFICATE_LOWERCASE_NAME \
        --validation-method <VALIDATION_METHOD>
    
    • 如果要配置 A 记录,请将 <VALIDATION_METHOD> 替换为 HTTP

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

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

  11. 在操作完成后,转到您的域以检查它是否可访问。

管理证书

可以通过容器应用环境或通过单个容器应用管理证书。

环境

容器应用环境的 “证书 ”窗格显示一个表,其中包含与环境关联的所有证书。 转到环境,然后在“网络”下选择“证书”。

可以通过执行以下作来管理证书:

动作 描述
添加 选择 “添加证书 ”以添加新证书。
删除 选择回收站图标以删除证书。
更新 表的“运行状况”字段指示证书在到期日期后的 60 天内即将过期。 若要续订证书,请选择“续订证书”链接,并上传新的证书。

容器应用

容器应用的 “自定义域 ”窗格显示与容器应用关联的自定义域列表。 在左窗格中的 “网络”下,选择“ 自定义域”。

可以通过选择省略号 (...) 按钮来管理单个域名的证书,这将打开证书绑定窗口。 在以下窗口中,可以选择要绑定到所选域名的证书。

后续步骤

Azure 容器应用中的认证