[英]Cannot RDP to an instance of virtual machine scale set of a Service Fabric cluster in Azure
我使用眾所周知的azure-quickstart-templates/service-fabric-secure-cluster-5-node-1-nodetype模板創建了一個 Service Fabric 群集。
在部署期間,我已將adminUsername和adminPassword字符串指定為ARM 模板參數。 我剛剛使用了 2 長串隨機字符並將它們寫下來以備后用。
部署已成功,例如,我可以打開帶有著名綠色圓圈的 SF 集群資源管理器網頁。
但是,當我嘗試連接到 VMSS 的其中一個節點時,為了檢查我的 SF 應用程序日志,RDP 連接被拒絕:
我使用 Loader public IP 地址進行 RDP 連接,並已驗證有一個 LB 規則:
當我輸入在 ARM 模板部署期間指定的adminUsername和adminPassword字符串時,RDP 連接會在我的公司筆記本的域之前添加。
因此,我嘗試在 LB public ip 地址前面加上反斜杠,然后在adminUsername前面加上一個反斜杠,但這也不起作用。
我也試過.\adminUsername (使用我的公司筆記本的域是錯誤的)和\adminUsername和nt1vm_1\adminUsername (仍然沒有連接):
如何通過 RDP 連接到我的 SF 集群的 VMSS 實例?
我還為我的問題創建了Github 問題 #7684 。
更新:
無法與 Mac OS 的 Microsoft 遠程桌面連接:
更新 2:
為過度簡化我的問題描述而道歉-
我實際上並沒有將 RDP 憑據寫到紙上,而是生成並將它們保存在 Key Vault 中,然后將它們作為管道變量輸出(我知道,不太安全......)並將它們傳遞給 SF 模板:
所以這不是我寫下錯誤憑據的問題。 並且這個 YAML 文件被 5 個管道使用,以填充 5 個不同的 RG(使用 CosmosDb、Key Vault、SF) - 都存在上述 RDP 連接問題。
更新 3:
因為我在 SF 集群中有 3 個節點,所以我嘗試在 RDP 對話框中使用nt1vm_0\username 、 nt1vm_1\username 、 nt1vm_2\username甚至nt1vm\username作為用戶名,但可惜這不起作用:
嘗試在 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
這是我自己的答案,也許它也會對某人有所幫助-
這似乎是 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等):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.