繁体   English   中英

无法通过Powershell或Visual Studio连接到受保护的Azure Service Fabric群集

[英]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文档:

  1. 使用Azure Resource Manager在Azure中创建Service Fabric群集
  2. 连接到安全群集
  3. 从Visual Studio配置与Service Fabric群集的安全连接
  4. Service Fabric群集安全方案
  5. 使用Visual Studio将应用程序发布到远程群集
  6. 在Azure中添加或删除Service Fabric群集的证书

我采取了以下步骤:

  1. 使用Powershell(使用ServiceFabricRPHelpers cmdlet)创建KeyVault资源组,并在其中创建KeyVault

  2. 使用New-SelfSignedCertificate并将-DnsName设置为api.mydomain.co.uk,我已经购买并为api创建了一个CNAME记录,导致mycluster.northeurope.cloudapp.azure.com:19000(当然它没有存在于此过程的这个阶段),然后是Export-PfxCertificate来创建.pfx文件。 然后将.pfx导入cert:\\CurrentUser\\TrustedPeoplecert:\\CurrentUser\\My

  3. 调用Invoke-AddCertToKeyVault将新生成的证书添加到我的KeyVault

  4. 使用SetupApplications.ps1脚本配置AAD。

  5. 将所有结果字符串等放入azuredeploy.jsonazuredeploy.parameters.json ,解决了错误(其中一些似乎与文档相矛盾......),并成功部署了集群。 它现在可以在我的Azure门户上看到。

  6. 从经典门户分配用户角色(admin给自己)。

  7. 使用Invoke-AddCertToKeyVault (这次创建并)向集群添加第二个“管理客户端”证书(而不是第一个是集群证书)。

所以,完成所有这些后,我相信我应该已经完成​​了我需要的一切,以便能够连接到群集以通过VS2015发布,并从api.mydomain.co.uk:19080访问管理界面。 唉,这不会发生......

连接到资源组中的数据库我的群集仍然使用SQL身份验证通过SQL Server资源管理器从VS工作,但是, 任何尝试使用基于AAD或X509的身份验证与服务器本身通信都会在尝试连接时导致等待,并且那么失败。 几个例子:

Cloud Explorer Cloud Explorer消息:Cloud Explorer无法连接到群集 - 发送请求时出错。无法连接到远程服务器 无法联系服务器,请稍后再试或获取帮助

试图连接到管理控制台说它已被阻止,这意味着我在那里,但所有文档在告诉我如何访问它之前结束。 Web管理界面被阻止

尝试使用Connect-ServiceFabricCluster进行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM