辅助实例上的 Azure App Service 托管证书,无需停机

Azure App Service Managed Certificate on Secondary Instance without Downtime

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

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

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

Hostname not eligible for App Service Managed Certificates creation. Ensure that your domain abc.xyz.com has an active CNAME record which is set to my-secondary-app-service.azurewebsites.net.

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

如何在不停机和更改 CNAME 的情况下在次要终结点上配置托管证书?

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

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

$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

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

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