Основные шаги по добавлению SSL в веб-API в Service Fabric:
- Добавить сертификат в KeyVault
- Установите его на виртуальные машины масштабируемого набора виртуальных машин.
- Добавьте сертификат в ServiceManifest и ApplicationManifest (или добавьте его в свои службы другим способом, давайте перейдем к манифесту здесь)
Основываясь на вашем описании выше, вы, вероятно, уже выполнили все эти шаги. Когда вы защищаете кластер с помощью сертификата, этот сертификат устанавливается на каждую виртуальную машину в кластере. Это должно быть просто ссылкой на него в вашем манифесте. Посмотрите на шаг 2 ниже для обновления виртуальных машин с помощью ARM, если вам нужно добавить еще один сертификат в кластер (если вы используете несколько приложений, защищенных разными сертификатами).
Просто для справки, я добавляю все необходимые шаги ниже.
Добавить сертификат в KeyVault Вы уже сделали это, но просто для справки
Я рекомендую использовать ServiceFabricRPHelpers, чтобы добавить сертификат в KeyVault. Что-то в этом роде от PowerShell
Invoke-AddCertToKeyVault
-SubscriptionId $subscriptionId
-ResourceGroupName $vaultResourceGroupName
-Location $vaultLocation
-VaultName $vaultName
-CertificateName $clusterCertName
-Password $clusterCertPw
-UseExistingCertificate
-ExistingPfxFilePath $certFilePath
Установите сертификат на VMSS Поскольку вы защитили свой кластер с помощью сертификата, на ваших виртуальных машинах уже установлен сертификат хранилища, но опять же, просто для справки
Это можно сделать либо с помощью командлетов PS, либо путем обновления шаблона ARM. Командлет PS может выглядеть так:
$certConfig = New-AzureRmVmssVaultCertificateConfig
-CertificateUrl $certificateUrl
-CertificateStore $certStore
# Add the certificate as a new secret on each VM in the scaleset
$vmss = (Get-AzureRmVmss | Where-Object{$_.name -eq $vmssName})[0]
$vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Add($certConfig)
# Trigger an update the VMs in the scaleset
Update-AzureRmVmss -ResourceGroupName $ResourceGroup -Name $VmssName -VirtualMachineScaleSet $Vmss
И версия ARM будет выглядеть так
"osProfile": {
"adminPassword": "[parameters('adminPassword')]",
"adminUsername": "[variables('adminUsername')]",
"computernamePrefix": "[variables('vmNodeType0ComputerName')]",
"secrets": [
{
"sourceVault": {
"id": "[parameters('sourceVaultValue')]"
},
"vaultCertificates": [
{
"certificateStore": "[variables('certificateStoreValue')]",
"certificateUrl": "[parameters('certificateUrlValue')]"
}
]
}
]
},
Для этой версии шаблона ARM вы можете обновить уже развернутый кластер, либо загрузив автоматически созданный сценарий с портала Azure, либо загрузив фактический шаблон, который вы использовали при первом развертывании (даже если вы выполняли развертывание с помощью мастера в портал фактически создает шаблон за кулисами для вас, и именно он развертывается, когда вы нажимаете кнопку «ОК» на последнем шаге).
Найдите группу ресурсов с вашим кластером на портале.
Сценарий автоматизации отображает для вас новый шаблон на основе того, что содержит группа ресурсов на данный момент, это совокупность всех ваших изменений до этого момента ресурсов в группе. Нажмите «Загрузить», и вы получите ZIP-файл с файлом шаблона и параметрами.
Теперь вы можете повторно развернуть его с помощью PowerShell следующим образом:
New-AzureRmResourceGroupDeployment
-Name "Update_admin_cert"
-TemplateFile .\template.json
-ResourceGroupName $resourceGroupName
-Mode Incremental
Обратите внимание на параметр Mode Incremental
, он просто исправляет все, что уже есть в вашей группе ресурсов, с любыми новыми или перекрывающимися определениями в шаблоне, который вы развертываете, поэтому (в целом) безопасно запускать его в существующей группе ресурсов, если вы только хотите изменить или добавить некоторые детали для ресурса.
Добавление сертификата в ApplicationManifest
Добавление сертификата в вашу службу — это вопрос обновления манифеста, используемого для развертывания приложения/службы. В этой статье документации описывается, что тебе нужно. Короче говоря, добавьте EndpointBindingPolicy
к ServiceManifestImport
в ApplicationManifest.xml
и сертификат в тег Certificates
, который ссылается на отпечаток вашего сертификата:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<EndpointBindingPolicy CertificateRef="TestCert1" EndpointRef="ServiceEndpoint3"/>
</Policies>
</ServiceManifestImport>
<Certificates>
<EndpointCertificate Name="TestCert1" X509FindValue="ABCDEF27174012740129FADBC232348324" X509StoreName="MY" />
</Certificates>
person
yoape
schedule
21.03.2017