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

使用 Azure 资源管理器创建 Service Fabric 群集

Azure Service Fabric 群集是一组联网的虚拟机,可在其中部署和管理微服务。 在 Azure 中运行的 Service Fabric 群集是一种 Azure 资源,通过 Azure 资源管理器进行部署。 本文介绍如何使用资源管理器在 Azure 中安全地部署 Service Fabric 群集。 可以使用默认模板或自定义模板。 如果尚无自定义模板,请了解如何创建自定义模板

为保护群集选择的安全类型(即 Windows 标识、X509 等)必须指定为群集的初始创建指定,之后不能更改。 在设置群集之前,请先阅读 Service Fabric 群集安全性方案。 在 Azure 中,Service Fabric 使用 x509 证书来保护群集及其终结点,对客户端进行身份验证以及对数据进行加密。 建议使用 Microsoft Entra ID 来保护对管理终结点的访问。 有关详细信息,请阅读设置 Microsoft Entra ID 以对客户端进行身份验证

若要创建生产群集以运行生产工作负载,我们建议你首先阅读生产就绪情况核对清单

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅将 Azure PowerShell 从 AzureRM 迁移到 Az

先决条件

在本文中,使用 Service Fabric RM PowerShell 或 Azure CLI 模块部署群集:

以下为关于 Service Fabric 模块的参考文档:

登录 Azure

运行本文中任何命令之前,请先登录到 Azure。

Connect-AzAccount
Set-AzContext -SubscriptionId <subscriptionId>
az login
az account set --subscription $subscriptionId

使用系统生成的自签名证书创建新群集

使用如下命令创建一个受系统生成的自签名证书保护的群集。 此命令将设置一个主要群集证书,用于保证群集的安全性以及设置使用该证书执行管理操作时所需的管理访问权限。 自签名证书适合用于保护测试群集。 应使用证书颁发机构 (CA) 提供的证书保护生产群集。

使用此模块中随附的默认群集模板

可以使用以下 PowerShell 或 Azure CLI 命令通过默认模板快速创建群集。

你可以在此处找到适用于 Windows 以及 Ubuntu 的默认模板。

以下命令可创建 Windows 或 Linux 群集,具体取决于如何指定 OS 参数。 PowerShell/CLI 命令均在指定的 CertificateOutputFolder(请确保在运行此命令前已存在所指定的证书文件夹位置!)中输出证书。

注意

以下 PowerShell 命令仅适用于 Azure PowerShell Az 模块。 若要检查 Azure 资源管理器 PowerShell 的当前版本,请运行以下 PowerShell 命令“Get-Module Az”。 单击此链接升级 Azure 资源管理器 PowerShell 的版本。

使用 PowerShell 部署群集:

$resourceGroupLocation="westus"
$resourceGroupName="mycluster"
$vaultName="myvault"
$vaultResourceGroupName="myvaultrg"
$CertSubjectName="mycluster.westus.cloudapp.azure.com"
$certPassword="Password123!@#" | ConvertTo-SecureString -AsPlainText -Force 
$vmpassword="Password4321!@#" | ConvertTo-SecureString -AsPlainText -Force
$vmuser="myadmin"
$os="WindowsServer2016DatacenterwithContainers"
$certOutputFolder="c:\certificates"

New-AzServiceFabricCluster -ResourceGroupName $resourceGroupName -Location $resourceGroupLocation -CertificateOutputFolder $certOutputFolder -CertificatePassword $certpassword -CertificateSubjectName $CertSubjectName -OS $os -VmPassword $vmpassword -VmUserName $vmuser

使用 Azure CLI 部署群集:

declare resourceGroupLocation="westus"
declare resourceGroupName="mylinux"
declare vaultResourceGroupName="myvaultrg"
declare vaultName="myvault"
declare CertSubjectName="mylinux.westus.cloudapp.azure.com"
declare vmpassword="Password!1"
declare certpassword="Password!4321"
declare vmuser="myadmin"
declare vmOs="UbuntuServer1804"
declare certOutputFolder="c:\certificates"

az sf cluster create --resource-group $resourceGroupName --___location $resourceGroupLocation  \
	--certificate-output-folder $certOutputFolder --certificate-password $certpassword  \
	--vault-name $vaultName --vault-resource-group $resourceGroupName  \
	--template-file $templateFilePath --parameter-file $parametersFilePath --vm-os $vmOs  \
	--vm-password $vmpassword --vm-user-name $vmuser

使用自己的自定义模板

如果需要根据需要编写自定义模板,我们强烈建议从 Azure Service Fabric 模板示例中提供的模板之一着手。 了解如何自定义群集模板

如果已有一个自定义模板,请仔细检查模板中的所有三个证书相关参数以及参数文件已按如下所示命名且如下所示的值为 null:

   "certificateThumbprint": {
      "value": ""
    },
    "sourceVaultValue": {
      "value": ""
    },
    "certificateUrlValue": {
      "value": ""
    },

使用 PowerShell 部署群集:

$resourceGroupLocation="westus"
$resourceGroupName="mycluster"
$CertSubjectName="mycluster.westus.cloudapp.azure.com"
$certPassword="Password!1" | ConvertTo-SecureString -AsPlainText -Force 
$certOutputFolder="c:\certificates"

$parameterFilePath="c:\mytemplates\mytemplateparm.json"
$templateFilePath="c:\mytemplates\mytemplate.json"

New-AzServiceFabricCluster -ResourceGroupName $resourceGroupName -CertificateOutputFolder $certOutputFolder -CertificatePassword $certpassword -CertificateSubjectName $CertSubjectName -TemplateFile $templateFilePath -ParameterFile $parameterFilePath 

使用 Azure CLI 部署群集:

declare certPassword=""
declare resourceGroupLocation="westus"
declare resourceGroupName="mylinux"
declare certSubjectName="mylinuxsecure.westus.cloudapp.azure.com"
declare parameterFilePath="c:\mytemplates\linuxtemplateparm.json"
declare templateFilePath="c:\mytemplates\linuxtemplate.json"
declare certOutputFolder="c:\certificates"

az sf cluster create --resource-group $resourceGroupName --___location $resourceGroupLocation  \
	--certificate-output-folder $certOutputFolder --certificate-password $certPassword  \
	--certificate-subject-name $certSubjectName \
	--template-file $templateFilePath --parameter-file $parametersFilePath

使用自己的 X.509 证书创建新的群集

可以使用以下命令指定现有证书来创建和保护新的群集。

如果这是一个同时用于其他目的的 CA 签名证书,则我们建议专门为密钥保管库提供一个不同的资源组。 建议将密钥保管库置于其资源组中。 这样可在不丢失密钥和机密的情况下删除计算和存储资源组,包括具有 Service Fabric 群集的资源组。 包含密钥保管库的资源组必须与正在使用它的群集位于同一区域。

使用模块中附带的默认“5 Node 1”节点类型模板

你可以在此处找到适用于 Windows 以及 Ubuntu 的默认模板。

使用 PowerShell 部署群集:

$resourceGroupLocation="westus"
$resourceGroupName="mycluster"
$vaultName="myvault"
$vaultResourceGroupName="myvaultrg"
$certPassword="Password!1" | ConvertTo-SecureString -AsPlainText -Force 
$vmpassword=("Password!4321" | ConvertTo-SecureString -AsPlainText -Force) 
$vmuser="myadmin"
$os="WindowsServer2016DatacenterwithContainers"

New-AzServiceFabricCluster -ResourceGroupName $resourceGroupName -Location $resourceGroupLocation -KeyVaultResourceGroupName $vaultResourceGroupName -KeyVaultName $vaultName -CertificateFile C:\MyCertificates\chackocertificate3.pfx -CertificatePassword $certPassword -OS $os -VmPassword $vmpassword -VmUserName $vmuser 

使用 Azure CLI 部署群集:

declare vmPassword="Password!1"
declare certPassword="Password!1"
declare vmUser="myadmin"
declare resourceGroupLocation="westus"
declare resourceGroupName="mylinux"
declare vaultResourceGroupName="myvaultrg"
declare vaultName="myvault"
declare certificate-file="c:\certificates\mycert.pem"
declare vmOs="UbuntuServer1804"

az sf cluster create --resource-group $resourceGroupName --___location $resourceGroupLocation  \
	--certificate-file $certificate-file --certificate-password $certPassword  \
	--vault-name $vaultName --vault-resource-group $vaultResourceGroupName  \
    --vm-os vmOs \
	--vm-password $vmPassword --vm-user-name $vmUser

使用自己的自定义群集模板

如果需要根据需要编写自定义模板,我们强烈建议从 Azure Service Fabric 模板示例中提供的模板之一着手。 了解如何自定义群集模板

如果已有一个自定义模板,请确保模板中的所有三个证书相关参数以及参数文件已按如下所示命名并使用 null 值。

   "certificateThumbprint": {
      "value": ""
    },
    "sourceVaultValue": {
      "value": ""
    },
    "certificateUrlValue": {
      "value": ""
    },

使用 PowerShell 部署群集:

$resourceGroupLocation="westus"
$resourceGroupName="mycluster"
$vaultName="myvault"
$vaultResourceGroupName="myvaultrg"
$certPassword="Password!1" | ConvertTo-SecureString -AsPlainText -Force 
$os="WindowsServer2016DatacenterwithContainers"
$parameterFilePath="c:\mytemplates\mytemplateparm.json"
$templateFilePath="c:\mytemplates\mytemplate.json"
$certificateFile="C:\MyCertificates\chackonewcertificate3.pem"

New-AzServiceFabricCluster -ResourceGroupName $resourceGroupName -Location $resourceGroupLocation -TemplateFile $templateFilePath -ParameterFile $parameterFilePath -KeyVaultResourceGroupName $vaultResourceGroupName -KeyVaultName $vaultName -CertificateFile $certificateFile -CertificatePassword $certPassword

使用 Azure CLI 部署群集:

declare certPassword="Password!1"
declare resourceGroupLocation="westus"
declare resourceGroupName="mylinux"
declare vaultResourceGroupName="myvaultrg"
declare vaultName="myvault"
declare parameterFilePath="c:\mytemplates\linuxtemplateparm.json"
declare templateFilePath="c:\mytemplates\linuxtemplate.json"

az sf cluster create --resource-group $resourceGroupName --___location $resourceGroupLocation  \
	--certificate-file $certificate-file --certificate-password $password  \
	--vault-name $vaultName --vault-resource-group $vaultResourceGroupName  \
	--template-file $templateFilePath --parameter-file $parametersFilePath 

使用指向上传到密钥保管库中的机密的指针

要使用现有密钥保管库,则必须针对部署启用该密钥保管库,使计算资源提供程序能够从中获取证书并将其安装在群集节点上。

使用 PowerShell 部署群集:

Set-AzKeyVaultAccessPolicy -VaultName 'ContosoKeyVault' -EnabledForDeployment

$parameterFilePath="c:\mytemplates\mytemplate.json"
$templateFilePath="c:\mytemplates\mytemplateparm.json"
$secretID="https://test1.vault.azure.net:443/secrets/testcertificate4/55ec7c4dc61a462bbc645ffc9b4b225f"

New-AzServiceFabricCluster -ResourceGroupName $resourceGroupName -SecretIdentifier $secretID -TemplateFile $templateFilePath -ParameterFile $parameterFilePath 

使用 Azure CLI 部署群集:

declare $resourceGroupName = "testRG"
declare $parameterFilePath="c:\mytemplates\mytemplate.json"
declare $templateFilePath="c:\mytemplates\mytemplateparm.json"
declare $secretID="https://test1.vault.azure.net:443/secrets/testcertificate4/55ec7c4dc61a462bbc645ffc9b4b225f"

az sf cluster create --resource-group $resourceGroupName --___location $resourceGroupLocation  \
	--secret-identifier $secretID  \
	--template-file $templateFilePath --parameter-file $parameterFilePath 

后续步骤

此时 Azure 中已正在运行一个安全的群集。 接下来,请连接到该群集,了解如何管理应用程序机密

有关要在模板中使用的 JSON 语法和属性,请查看 Microsoft.ServiceFabric/clusters 模板参考