5

我已經創建了一個服務Fabric應用程序,該應用程序當前由兩個Reliable Services和一個Reliable Actor組成。對於開發,我在Azure中創建了一個SQL Server和數據庫,並將連接字符串硬編碼到我的本地SF羣集上運行的應用程序中。這工作得很好,我能在本地運行我的應用程序,同時操縱雲中的數據庫。無法通過Powershell或Visual Studio連接到安全的Azure服務Fabric羣集

我現在想要將我的服務發佈到雲端,並將其全部遠程運行(以便我可以設置和測試Web API的公開情況),這就是問題的出發點。

繼Azure的文檔:

  1. Create a Service Fabric cluster in Azure using Azure Resource Manager
  2. Connect to a secure cluster
  3. Configure secure connections to a Service Fabric cluster from Visual Studio
  4. Service Fabric cluster security scenarios
  5. Publish an application to a remote cluster by using Visual Studio
  6. Add or remove certificates for a Service Fabric cluster in Azure

我採取了以下措施:

  1. 使用PowerShell的(與ServiceFabricRPHelpers的cmdlet)來創建一個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. 從經典門戶分配用戶角色(管理員自己)。

  7. 使用Invoke-AddCertToKeyVault(此時創建並)向羣集添加第二個「管理客戶端」證書(與第一個是羣集證書相對)。

因此,隨着那所做的一切,我相信我應該做的一切,我需要爲了能夠連接到羣集通過VS2015發佈,並從api.mydomain.co.uk:19080訪問管理界面。唉,那不會發生...

連接到數據庫的資源組我的集羣仍然VS通過SQL服務器資源管理器使用SQL身份驗證,但是作品中,任何嘗試使用AAD或基於X509的身份驗證導致等待,而它本身的服務器進行通信它試圖連接,然後失敗。舉幾個例子:

Cloud Explorer Cloud Explorer message: Cloud Explorer could not connect to cluster - An error occurred while sending the request. Unable to connect to the remote server Failed to contact server, please try again later or get help

試圖連接到管理控制檯說,它的封鎖,這意味着對我來說是存在的,但告訴我如何訪問它之前所有的文件結束。 Web management interface blocked

嘗試使用Connect-ServiceFabricCluster連接也失敗,並且搜索錯誤消息沒有給我任何指示。

connect-servicefabriccluster error

共度兩天,吸收了這一切,並試圖得到它的工作後,我都出什麼嘗試和改變想法。任何人都可以在我所做的事情中發現問題,或者建議我可以嘗試的任何事情? 如果您需要更多的細節,請點擊這裏!

回答

10

我也曾嘗試部署安全集羣,使用了許多您也試圖使用的相同文檔的噩夢。花了幾天弄髒我的手後,我終於設法運作。

這是我自己的助手和模板:SecureCluster

關鍵的看點是:

  • 確保您的客戶端和集羣證書都在你的關鍵跳馬和您的ARM模板內引用在虛擬機規模設置的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')]" 
               } 
              ] 
             } 
            ] 
         }, 
    

這將確保您的所有證書都安裝到羣集中的每個節點上。

接下來是確保設置也是規模內服務織物延伸有您的證書:

"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模板內服務織物資源部分中,確保您指定要使用的證書用於節點到節點的安全性,以及用於客戶端到節點的安全性。

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

然後,您應該能夠以您嘗試的方式安全連接到羣集。雖然我發現的一件事是,發佈配置文件中的URL不應該以「http」爲前綴,並且當您嘗試瀏覽到資源管理器時,您將需要的URL爲https://[n]:19080/Explorer/index.html

希望你會發現一些幫幫我。

+0

感謝您的提示!我最終對此感到沮喪,因此我決定採用整個SF方法,只寫了一個Python後端,並將其託管在我自己的服務器上。我沒有得到Azure的所有幻想,但是當它設置的這麼混亂時,對於我現在正在處理的內容來說,這並不值得。我會接受你的回答,因爲我認爲我沒有嘗試過你所建議的任何事情,也許將來我會根據你的指導做出另外的決定,看看它是否成功。 –

+0

這對我幫助很大!我所做的兩件事情有所不同: 1.在osProfile 的vaultCertificates部分不包括集羣證書2.我在clientCertificateCommonNames中指定了集羣證書,並且clientCertificateThumbprints爲空。 我修正了這兩個問題,所以我不確定哪一個是罪魁禍首。奇怪的部分是在修復上述問題之前,我能夠使用集羣證書連接到Service Fabric Explorer,但我無法連接到部署 – Alex

相關問題