使用 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 -Environment AzureChinaCloud
Set-AzContext -SubscriptionId <subscriptionId>
az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud   //means return to Public Azure.
az account set --subscription $subscriptionId

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

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

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

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

可在 WindowsUbuntu 获取使用的相应默认模板。

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

注意

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

使用 PowerShell 部署群集:

$resourceGroupLocation="chinanorth"
$resourceGroupName="mycluster"
$vaultName="myvault"
$vaultResourceGroupName="myvaultrg"
$CertSubjectName="mycluster.chinanorth.cloudapp.chinacloudapi.cn"
$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="chinanorth"
declare resourceGroupName="mylinux"
declare vaultResourceGroupName="myvaultrg"
declare vaultName="myvault"
declare CertSubjectName="mylinux.chinanorth.cloudapp.chinacloudapi.cn"
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="chinanorth"
$resourceGroupName="mycluster"
$CertSubjectName="mycluster.chinanorth.cloudapp.chinacloudapi.cn"
$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="chinanorth"
declare resourceGroupName="mylinux"
declare certSubjectName="mylinuxsecure.chinanorth.cloudapp.chinacloudapi.cn"
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 签名证书,则我们建议专门为 Key Vault 提供一个不同的资源组。 建议将密钥保管库置于其资源组中。 这样可在不丢失密钥和机密的情况下删除计算和存储资源组,包括具有 Service Fabric 群集的资源组。 包含 Key Vault 的资源组必须与正在使用它的群集位于同一区域。

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

可在 WindowsUbuntu 获取使用的相应默认模板。

使用 PowerShell 部署群集:

$resourceGroupLocation="chinanorth"
$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="chinanorth"
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="chinanorth"
$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="chinanorth"
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.cn: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.cn: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 模板参考