0

我使用众所周知的azure-quickstart-templates/service-fabric-secure-cluster-5-node-1-nodetype模板创建了一个 Service Fabric 群集。

在部署期间,我已将adminUsernameadminPassword字符串指定为ARM 模板参数。我刚刚使用了 2 长串随机字符并将它们写下来以备后用。

部署已成功,例如,我可以打开带有著名绿色圆圈的 SF 集群资源管理器网页。

但是,当我尝试连接到 VMSS 的其中一个节点时,为了检查我的 SF 应用程序日志,RDP 连接被拒绝:

rdp 截图

我将 Loader 公共 IP 地址用于 RDP 连接,并已验证有一个 LB 规则:

磅截图

当我输入在 ARM 模板部署期间指定的adminUsernameadminPassword字符串时,RDP 连接会在我的公司笔记本的域之前添加。

因此,我尝试在adminUsername前面添加 LB 公共 IP 地址,后跟反斜杠,但这也不起作用。

我也试过.\adminUsername(使用我的公司笔记本的域是错误的)和\adminUsernament1vm_1\adminUsername(仍然没有连接):

截图 rdp

如何通过 RDP 连接到我的 SF 集群的 VMSS 实例?

我还为我的问题创建了Github 问题 #7684

更新:

无法与 Mac OS 的 Microsoft 远程桌面连接:

mac截图

更新 2:

为过度简化我的问题描述而道歉-

我实际上并没有将 RDP 凭据写到纸上,而是生成并将它们保存在 Key Vault 中,然后将它们作为管道变量输出(我知道,不太安全......)并将它们传递给 SF 模板:

千伏截图

所以这不是我写下错误凭据的问题。并且这个 YAML 文件被 5 个管道使用,以填充 5 个不同的 RG(使用 CosmosDb、Key Vault、SF)——所有这些都存在上述 RDP 连接问题。

更新 3:

因为我在 SF 集群中有 3 个节点,所以我尝试在 RDP 对话框中使用nt1vm_0\usernament1vm_1\usernament1vm_2\username甚至nt1vm\username作为用户名,但可惜这不起作用:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

尝试在scaleset 上重置密码,以查看凭据是否可能已以某种方式更改。

Login-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId 'yourSubscriptionID'

$nodeTypeName = 'nt1vm'
$resourceGroup = 'sfclustertutorialgroup'
$publicConfig = @{'UserName' = 'newuser'}
$privateConfig = @{'Password' = 'PasSwo0rd$#!'}
$extName = 'VMAccessAgent'
$publisher = 'Microsoft.Compute'
$node = Get-AzVmss -ResourceGroupName $resourceGroup -VMScaleSetName $nodeTypeName
$node = Add-AzVmssExtension -VirtualMachineScaleSet $node -Name $extName -Publisher $publisher -Setting $publicConfig -ProtectedSetting $privateConfig -Type $extName -TypeHandlerVersion '2.0' -AutoUpgradeMinorVersion $true

Update-AzVmss -ResourceGroupName $resourceGroup -Name $nodeTypeName -VirtualMachineScaleSet $node
于 2020-06-19T06:28:37.723 回答
0

这是我自己的答案,也许它也会对某人有所帮助-

这似乎是 SF Cluster(我们使用 Service Fabric 版本 7.1.417.9590)ARM 模板部署中的一个错误。

我们注意到,如果您“重新映像”VMSS 中的所有实例,RDP 就会起作用:

vmss 实例

如果没有重新映像,则 RDP 连接被拒绝,就好像凭据错误一样。

在我们的 Azure 管道中,RDP 凭据由 Key Vault ARM 模板中的以下代码生成(满足密码复杂性要求的大写字母和数字 + 基于部署名称的唯一字符串):

"variables": {
    "RdpUsername": "[concat('ABC123', uniqueString(deployment().name, 'RdpUsername'))]",
    "RdpPassword": "[concat('ABC123', uniqueString(deployment().name, 'RdpPassword'))]"
},
"outputs": {
    "RdpUsername": {
        "type": "string",
        "value": "[variables('RdpUsername')]"
    },
    "RdpPassword": {
        "type": "string",
        "value": "[variables('RdpPassword')]"
    },
    "keyvaultId": {
        "type": "string",
        "value": "[resourceId('Microsoft.KeyVault/vaults', variables('keyvaultName'))]"
    }
},

uniqueString基于部署名称,因此随着每个管道部署而更改(这就是为什么下面的屏幕截图中有不同的秘密版本):

密钥库

然后将上述秘密传递给部署 SF 集群的管道任务:

- task: AzureResourceManagerTemplateDeployment@3
  displayName: 'Deploy SF cluster'
  inputs:
    deploymentScope: 'Resource Group'
    subscriptionId: '${{ parameters.SubscriptionId }}'
    azureResourceManagerConnection: '${{ parameters.ArmConnection }}'
    action: 'Create Or Update Resource Group'
    resourceGroupName: '${{ parameters.ResourceGroupName }}'
    location: '${{ parameters.ResourceLocation }}'
    templateLocation: 'Linked artifact'
    csmFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster.json'
    csmParametersFile: '$(Build.SourcesDirectory)/pipelines/templates/sfcluster-params.json'
    overrideParameters: '-rdpUsername $(RdpUsername) -rdpPassword $(RdpPassword) -certificateThumbprint $(Thumbprint) -sourceVaultResourceId $(KeyvaultId) -certificateUrlValue $(SecretId)' 
    deploymentMode: 'Incremental'

因为似乎存在错误,RDP 连接仍然需要旧的 RDP 凭据对。

因此,我们的解决方法是根据 RG 名称将 RDP 凭据更改为更稳定的字符串:

"variables": {
    "RdpUsername": "[concat('Ccg1', uniqueString(resourceGroup().name, 'RdpUsername'))]",
    "RdpPassword": "[concat('Ccg2', uniqueString(resourceGroup().name, 'RdpPassword'))]"
},

现在 RDP 连接工作(使用用户名nt1vm_0\RdpUsername等):

rdp 截图

于 2020-06-18T06:26:41.150 回答