辅助实例上的 Azure 应用服务托管证书无需停机

问题描述

我在 Azure 中使用流量管理器在主动/被动配置中设置了一个 Web 应用程序,因此两个应用程序服务位于两个不同区域,TM 位于前面。我已在两者上配置了相同的自定义域,并且还想在两者上使用 Azure 应用服务托管证书。

使用优先模式配置 TM 配置文件,因为我希望所有流量都转到主要应用服务,并且仅在停机时转到辅助应用服务。

当我尝试在第二个应用服务上添加证书时,我收到类似于以下内容的消息:

主机名不符合创建应用服务托管证书的条件。确保您的域 abc.xyz.com 具有设置为 my-secondary-app-service.azurewebsites.net 的活动 CNAME 记录。

通过这种设置,CNAME 必须转到 TM 地址,这样做允许在 TM 后面的所有端点上配置自定义域,但它只允许在主端点上配置托管证书。

如何在不停机和不更改 CNAME 的情况下在辅助端点上配置托管证书?

解决方法

因此,根据 this thread 中的详细信息,我想出了一种解决方法来进行设置,不需要更改 CNAME 或停机,但在门户中部分手动操作。

在两个端点上配置自定义域名后,您可以使用上面链接中脚本的以下部分为辅助端点创建证书:

$resourceGroupName = "my-resource-group"
$appServicePlan = Get-AzResource -Name "my-app-service-plan" `
    -ResourceGroupName $resourceGroupName `
    -ResourceType "Microsoft.Web/serverfarms"

$propertyObject = @{
    canonicalName = "mydomain.com"
    serverFarmId  = $appServicePlan.ResourceId
}

# create the certificate - Azure managed certificate names are usually of the form <domain name>-<app service name>
New-AzResource -Name "my-unique-certificate-name" `
    -Location "westus" `
    -PropertyObject $propertyObject `
    -ResourceGroupName $resourceGroupName `
    -ResourceType Microsoft.Web/certificates `
    -Force

以上完成后,您只需配置从自定义域名到上面创建的证书的绑定即可完成该过程。这是通过辅助应用服务上自定义域下域名旁边的添加绑定选项完成的。

请注意,使用上面链接中脚本的第二部分无法执行此第二步(这失败了,抱怨缺少 TXT DNS 记录 - 我尝试了各种选项,但没有一个有效)。可以通过 ARM 模板添加绑定,从而自动完成整个过程 - 我还没有尝试过。