【问题标题】:Cannot RDP to an instance of virtual machine scale set of a Service Fabric cluster in Azure无法 RDP 到 Azure 中 Service Fabric 群集的虚拟机规模集实例
【发布时间】:2020-10-03 08:40:48
【问题描述】:

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

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

部署成功,例如我可以打开带有著名绿色圆圈的 SF cluster explorer 网页。

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

我使用 Loader 公有 IP 地址进行 RDP 连接,并已验证存在 LB 规则:

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

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

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

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

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

更新:

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

更新 2:

抱歉,我的问题描述过于简单化了 -

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

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

更新 3:

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

【问题讨论】:

  • 你试过简单的\adminUsername(没有.)吗?
  • “我刚刚使用了 2 长串随机字符并将它们写下来以备后用” - 这个问题可以重现吗?还是有可能是凭据不正确?
  • 关于“将它们作为管道变量输出......并将它们传递给 SF 模板”的语句——这是否意味着您正在使用 Azure DevOps 发布管道进行部署?我问的原因是因为我在管道中使用 PowerShell 并使用 "$(sfcPassword)" 使用了带有密码的变量。解析的变量在值中包含一个“$”,然后将其视为密码字符串中的 PowerShell 变量。
  • 你试过nt1vm_0\adminUsername 3389 端口吗? (你说nt1vm_1\adminUsername
  • 您是否尝试过 [密码重置https://docs.microsoft.com/en-us/azure/service-fabric/scripts/service-fabric-powershell-change-rdp-user-and -pw]() 在 scaleset 上查看凭据是否可能已以某种方式更改?

标签: azure azure-service-fabric azure-resource-manager rdp windowsdomainaccount


【解决方案1】:

尝试在规模集上执行password reset 以查看凭据是否可能已以某种方式更改。

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

【讨论】:

    【解决方案2】:

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

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

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

    如果不重新映像,则 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 等):

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2016-09-28
      • 2020-01-12
      • 2021-02-04
      • 2017-07-11
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多