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

J.B*_*J.B 6 powershell certificate azure visual-studio-2015 azure-service-fabric

我创建了一个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(使用ServiceFabricRPHelperscmdlet)创建KeyVault资源组,并在其中创建一个KeyVault.

  2. 使用New-SelfSignedCertificate与-DnsName设置为api.mydomain.co.uk,我已经购买并创建了API导致mycluster.northeurope.cloudapp.azure.com:19000 CNAME记录(尽管当然它根本不存在这进程的阶段),然后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错误

在花了两天时间吸收所有这些并试图让它发挥作用后,我完全没有想要尝试和改变的想法.任何人都可以找到我所做的问题,或建议我可以尝试的任何事情?如果您需要我的更多详细信息,请随便询问!

jim*_*ine 10

我也试图使用您尝试使用的大部分相同文档来尝试部署安全集群.花了好几天弄脏我的手后,我终于让它工作了.

这是我自己的帮助器和模板: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')]"
                                    }
                                ]
                            }
                        ]
          },
    
    Run Code Online (Sandbox Code Playgroud)

这将确保所有证书都安装在群集中的每个节点上.

接下来是确保规模集中的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"
                }
              },
Run Code Online (Sandbox Code Playgroud)

最后,在ARM模板中的Service Fabric资源部分下,确保指定用于节点到节点安全性的证书以及用于客户端到节点安全性的证书.

certificate": {
            "thumbprint": "[parameters('clusterCertificateThumbPrint')]",
            "x509StoreName": "My"
        },
        "clientCertificateCommonNames": [],
        "clientCertificateThumbprints": [{
                    "CertificateThumbprint": "[parameters('adminCertificateThumbPrint')]",
                    "IsAdmin": true
                }],
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够以您尝试的方式安全地连接到群集.虽然我发现的一件事是URL不应该在发布配置文件中以"http"为前缀,但在尝试浏览到资源管理器时,您需要将URL设置为https:// [n]:19080/Explorer /的index.html

希望你能找到一些帮助.