5

Utworzono aplikację usługi sieciowej składającą się obecnie z dwóch niezawodnych usług i niezawodnego aktora. Do opracowania stworzyłem serwer SQL i bazę danych na Azure i zakodowałem ciąg połączenia w mojej aplikacji, którą uruchomiłem w moim lokalnym klastrze SF. To działało dobrze i mogłem uruchomić moją aplikację lokalnie, manipulując bazą danych w chmurze.Nie można połączyć się z zabezpieczonym klastrem usług Azure Service Fabric za pomocą aplikacji Powershell lub Visual Studio.

Teraz chcę opublikować moją usługę w chmurze i uruchomić ją zdalnie (tak, żebym mógł skonfigurować i przetestować interfejs Web API) i to tam zaczynają się problemy.

Obserwuje Azure docs:

  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

Brałem następujące kroki:

  1. Używany PowerShell (z ServiceFabricRPHelpers cmdlets), aby utworzyć grupę zasobów KeyVault, a w tym w KeyVault.

  2. Używane New-SelfSignedCertificate z -DnsName ustawionym na api.mydomain.co.uk, które już kupiłem i utworzyłem rekord CNAME dla api prowadząc do mycluster.northeurope.cloudapp.azure.com:19000 (choć oczywiście to nie istnieje na tym etapie procesu), a następnie Export-PfxCertificate, aby utworzyć plik .pfx. Model .pfx został następnie zaimportowany do cert:\CurrentUser\TrustedPeople i cert:\CurrentUser\My.

  3. Zadzwoń pod numer Invoke-AddCertToKeyVault, aby dodać nowo wygenerowany certyfikat do mojego KeyVault.

  4. Wykorzystano skrypt SetupApplications.ps1 do skonfigurowania AAD.

  5. Umieszczono wszystkie łańcuchy wynikowe itp. Na azuredeploy.json i azuredeploy.parameters.json, rozwiązano błędy (niektóre z nich wydawały się być sprzeczne z dokumentacją ..) i pomyślnie wdrożono klaster. Jest teraz widoczny na moim portalu Azure.

  6. Przypisane role użytkowników (admin dla siebie) z klasycznego portalu.

  7. Używane Invoke-AddCertToKeyVault do (tym razem utworzyć i) dodać drugi, "admin klienta" certyfikat do klastra (w przeciwieństwie do pierwszego, który był certyfikatem klastrowym).

Tak, z wszystko tego zrobić, wierzę powinienem zrobić wszystko, czego potrzeba, aby aby być w stanie połączyć się z klastrem na rozpatrzenie przez VS2015, i uzyskać dostęp do interfejsu zarządzania z api.mydomain.co.uk:19080. Niestety, tak się nie stało ...

połączenie z bazą danych w obrębie grupy zasobów mój klaster nadal działa z VS poprzez SQL Server Explorer przy użyciu uwierzytelniania SQL, jednak dowolny próba komunikacji z serwerem sama stosując AAD lub wyników uwierzytelniania X509 oparte na jakiś czas oczekiwania próbuje się połączyć, a następnie awarię. Kilka przykładów:

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

Próbując podłączyć do konsoli zarządzania mówi, że zablokowany, co oznacza dla mnie, że tam jest, ale cała dokumentacja kończy się przed opowiadać, jak do niego dostęp. Web management interface blocked

Próba połączenia przy użyciu Connect-ServiceFabricCluster również się nie powiedzie, a szukając wiadomości o błędach nie dał mi żadnych wskazówek, co zrobić.

connect-servicefabriccluster error

Po spędzeniu dwóch dni pochłaniające wszystko i próbuje dostać pracy, ja jestem z pomysłów na to, co się spróbować i zmiana. Czy ktoś może znaleźć problem w tym, co zrobiłem, lub zasugerować cokolwiek, co mógłbym wypróbować? Jeśli potrzebujesz więcej informacji ode mnie, proszę zapytaj!

Odpowiedz

10

Ja także miałem koszmar, który próbował wdrożyć bezpieczny klaster, korzystając z tej samej dokumentacji, którą próbowaliście zużyć. Po spędzeniu wielu dni na brudzeniu rąk udało mi się w końcu sprawić, że działało.

Oto mój własny pomocnika i szablon: SecureCluster

Najważniejsze rzeczy, na które trzeba uważać to:

  • Upewnij się, że certyfikaty klienckie i klastra są zarówno w swoim skarbcu klucza i odwołuje w szablonie ARM pod OSProfilem zestawu skali VM (zauważyłem w twoim przykładzie, że dodawałeś certyfikat administratora klienta po zmodyfikowaniu szablonu 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')]" 
               } 
              ] 
             } 
            ] 
         }, 
    

Spowoduje to zainstalowanie wszystkich certyfikatów na każdym węźle w klastrze.

Następny jest, aby upewnić się, że rozszerzenie usługi Fabric w skali ustawionej również ma swój certyfikat:

"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" 
       } 
       }, 

Wreszcie, w sekcji zasobów usługi Fabric w szablonie ARM upewnij się określić, które certyfikaty używać dla zabezpieczenia węzła do węzła i który jest dla bezpieczeństwa węzła klienta.

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

Powinieneś być w stanie bezpiecznie połączyć się z klastrem w sposób, w jaki próbujesz. Chociaż znalazłem jedną rzecz, że adresu URL nie należy poprzedzać prefiksem "http" w profilu publikowania, a przy próbie przeglądania Eksploratora potrzebny jest adres URL: https://[n]:19080/Explorer/index.html

Mam nadzieję, że znajdziesz to Wsparcie.

+0

Dzięki za porady!Skończyło się na tym, że udało mi się na tyle sfrustrować, że zdecydowałem się na całe podejście do SF i napisałem backend Pythona, a zamiast tego hostowałem go na własnym serwerze. Nie dostaję całej wspaniałości Azure, ale kiedy jest tak dużo bałaganu, aby go skonfigurować, po prostu nie jest to warte tego, nad czym teraz pracuję. Przyjmuję twoją odpowiedź, ponieważ nie sądzę, żebym wypróbował którąś z rzeczy, które zasugerowałeś, i może w przyszłości dam ci jeszcze raz z twoimi wskazówkami i zobaczę, czy to się uda. –

+0

To bardzo mi pomogło! Dwie rzeczy, które robiłem inaczej, to: 1. bez certyfikatu klastrowania w sekcji vaultCertyfikaty w osProfile 2. Podałem certyfikat klastrowania w clientCertificateCommonNames i pozostawiono puste pole clientCertificateThumbprint. Naprawiłem oba, więc nie jestem pewien, który z nich był winowajcą. Dziwna część była przed naprawieniem powyższego Mogłem połączyć się z Service Fabric Explorer przy użyciu certyfikatu klastrowego, po prostu nie mogłem połączyć się z wdrożeniem – Alex