[英]Cannot connect to secured Azure Service Fabric Cluster via Powershell or Visual Studio
我创建了一个Service Fabric应用程序,目前包含两个Reliable Services和一个Reliable Actor。 为了开发,我在Azure中创建了一个SQL Server和数据库,并将连接字符串硬编码到我的应用程序中,我在本地SF集群上运行该应用程序。 这工作正常,我能够在本地运行我的应用程序,同时在云中操作数据库。
我现在想要将我的服务发布到云端,并远程运行它(这样我就可以设置并测试Web API是否暴露),这就是问题的起点。
以下Azure文档:
我采取了以下步骤:
使用Powershell(使用ServiceFabricRPHelpers
cmdlet)创建KeyVault资源组,并在其中创建KeyVault
。
使用New-SelfSignedCertificate
并将-DnsName设置为api.mydomain.co.uk,我已经购买并为api创建了一个CNAME记录,导致mycluster.northeurope.cloudapp.azure.com:19000(当然它没有存在于此过程的这个阶段),然后是Export-PfxCertificate
来创建.pfx
文件。 然后将.pfx
导入cert:\\CurrentUser\\TrustedPeople
和cert:\\CurrentUser\\My
。
调用Invoke-AddCertToKeyVault
将新生成的证书添加到我的KeyVault
。
使用SetupApplications.ps1
脚本配置AAD。
将所有结果字符串等放入azuredeploy.json
和azuredeploy.parameters.json
,解决了错误(其中一些似乎与文档相矛盾......),并成功部署了集群。 它现在可以在我的Azure门户上看到。
从经典门户分配用户角色(admin给自己)。
使用Invoke-AddCertToKeyVault
(这次创建并)向集群添加第二个“管理客户端”证书(而不是第一个是集群证书)。
所以,完成所有这些后,我相信我应该已经完成了我需要的一切,以便能够连接到群集以通过VS2015发布,并从api.mydomain.co.uk:19080
访问管理界面。 唉,这不会发生......
连接到资源组中的数据库我的群集仍然使用SQL身份验证通过SQL Server资源管理器从VS工作,但是, 任何尝试使用基于AAD或X509的身份验证与服务器本身通信都会在尝试连接时导致等待,并且那么失败。 几个例子:
试图连接到管理控制台说它已被阻止,这意味着我在那里,但所有文档在告诉我如何访问它之前结束。
尝试使用Connect-ServiceFabricCluster
进行Connect-ServiceFabricCluster
也会失败,并且搜索错误消息并未向我提供任何操作指示。
在花了两天时间吸收所有这些并试图让它发挥作用后,我完全没有想要尝试和改变的想法。 任何人都可以找到我所做的问题,或建议我可以尝试的任何事情? 如果您需要我的更多详细信息,请随便询问!
我也试图使用您尝试使用的大部分相同文档来尝试部署安全集群。 花了好几天弄脏我的手后,我终于让它工作了。
这是我自己的帮助器和模板: SecureCluster
要注意的关键事项是:
确保您的客户端和集群证书都在您的密钥保管库中,并在您的ARM模板中在VM规模集的OSProfile下引用(我在您的示例中注意到您在修改ARM模板后添加了客户端管理员证书):
"osProfile": { "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]", "computernamePrefix": "[parameters('vmNodeType0Name')]", "secrets": [ { "sourceVault": { "id": "[parameters('sourceVault')]" }, "vaultCertificates": [ { "certificateStore": "My", "certificateUrl": "[parameters('clusterCertificateUrl')]" }, { "certificateStore": "My", "certificateUrl": "[parameters('adminCertificateUrl')]" } ] } ] },
这将确保所有证书都安装在群集中的每个节点上。
接下来是确保规模集中的Service Fabric扩展还具有您的证书:
"extensions": [
{
"name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]",
"properties": {
"type": "ServiceFabricNode",
"autoUpgradeMinorVersion": false,
"protectedSettings": {
"StorageAccountKey1":
"[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
"StorageAccountKey2":
"[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
},
"publisher": "Microsoft.Azure.ServiceFabric",
"settings": {
"clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
"nodeTypeRef": "[parameters('vmNodeType0Name')]",
"dataPath": "D:\\\\SvcFab",
"durabilityLevel": "Bronze",
"certificate": {
"thumbprint": "[parameters('clusterCertificateThumbPrint')]",
"x509StoreName": "My"
}
},
"typeHandlerVersion": "1.0"
}
},
最后,在ARM模板中的Service Fabric资源部分下,确保指定用于节点到节点安全性的证书以及用于客户端到节点安全性的证书。
certificate": {
"thumbprint": "[parameters('clusterCertificateThumbPrint')]",
"x509StoreName": "My"
},
"clientCertificateCommonNames": [],
"clientCertificateThumbprints": [{
"CertificateThumbprint": "[parameters('adminCertificateThumbPrint')]",
"IsAdmin": true
}],
然后,您应该能够以您尝试的方式安全地连接到群集。 虽然我发现的一件事是URL不应该在发布配置文件中以“http”为前缀,但在尝试浏览到资源管理器时,您需要将URL设置为https:// [n]:19080 / Explorer /的index.html
希望你能找到一些帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.