Einrichten und Konfigurieren des Reverseproxys in Service Fabric

Der Reverseproxy ist ein optionaler Azure Service Fabric-Dienst, mit dessen Hilfe in einem Service Fabric-Cluster ausgeführte Microservices andere Dienste mit HTTP-Endpunkten ermitteln und mit ihnen kommunizieren können. Weitere Informationen finden Sie unter Reverseproxy in Azure Service Fabric. In diesem Artikel wird das Einrichten und Konfigurieren eines Reverseproxys in Ihrem Cluster veranschaulicht.

Aktivieren des Reverseproxys über das Azure-Portal

Das Azure-Portal bietet eine Option, mit der Sie beim Erstellen eines neuen Service Fabric-Clusters den Reverseproxy aktivieren können. Sie können über das Portal keinen vorhandenen Cluster zur Verwendung des Reverseproxys aktualisieren.

Um den Reverseproxy beim Erstellen eines Clusters mithilfe des Azure-Portals zu konfigurieren, gehen Sie folgendermaßen vor:

  1. Geben Sie in Step 2: Clusterkonfiguration unter Knotentypkonfiguration die Option Reverseproxy aktivieren aus.

    Aktivieren des Reverseproxys im Portal

  2. (Optional:) Um einen sicheren Reverseproxy zu konfigurieren, müssen Sie ein TLS/SSL-Zertifikat konfigurieren. Wählen Sie in Schritt 3: Sicherheit unter Clustersicherheitseinstellungen konfigurieren für Konfigurationstyp die Option Benutzerdefiniert aus. Wählen Sie dann unter Reverseproxy-SSL-Zertifikat die Option SSL-Zertifikat für Reverseproxy einschließen aus, und geben Sie die Details Ihres Zertifikats ein.

    Konfigurieren eines sicheren Reverseproxys im Portal

    Wenn Sie den Reverseproxy beim Erstellen des Clusters nicht mit einem Zertifikat konfigurieren, können Sie dies später über die Resource Manager-Vorlage für die Ressourcengruppe des Clusters nachholen. Weitere Informationen finden Sie unter Aktivieren des Reverseproxys über Azure Resource Manager-Vorlagen.

Aktivieren des Reverseproxys über Azure Resource Manager-Vorlagen

Für Cluster unter Azure können Sie den Service Fabric-Reverseproxy über die Azure Resource Manager-Vorlage aktivieren. Sie können den Reverseproxy aktivieren, wenn Sie den Cluster erstellen, oder durch Aktualisieren des Clusters zu einem späteren Zeitpunkt.

Für einen neuen Cluster können Sie eine benutzerdefinierte Resource Manager-Vorlage erstellen oder eine Beispielvorlage verwenden.

Sie finden die Resource Manager-Beispielvorlagen, mit denen Sie einen sicheren Reverseproxy für einen Azure-Cluster konfigurieren können, auf GitHub in den Beispielvorlagen für einen sicheren Reverseproxy. In der Infodatei finden Sie unter Konfigurieren des HTTPS-Reverseproxys in einem sicheren Cluster Anweisungen und Vorlagen zum Konfigurieren eines sicheren Reverseproxys mit einem Zertifikat und zum Umgang mit einem Zertifikatrollover.

Für einen vorhandenen Cluster können Sie die Resource Manager-Vorlage für die Ressourcengruppe des Clusters mit Azure-Portal, PowerShell oder Azure-Befehlszeilenschnittstelle exportieren.

Nachdem Sie die Resource Manager-Vorlage erstellt haben, aktivieren Sie den Reverseproxy mit den folgenden Schritten:

  1. Definieren Sie im Abschnitt parameters der Vorlage einen Port für den Reverseproxy.

    "SFReverseProxyPort": {
        "type": "int",
        "defaultValue": 19081,
        "metadata": {
            "description": "Endpoint for Service Fabric Reverse proxy"
        }
    },
    
  2. Geben Sie den Port für jedes der nodetype-Objekte in Microsoft.ServiceFabric/clusters im Abschnitt Ressourcentypen an.

    Der Port wird anhand des Parameternamens reverseProxyEndpointPort identifiziert.

    {
        "apiVersion": "2021-06-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
       "nodeTypes": [
          {
           ...
           "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]",
           ...
          },
        ...
        ],
        ...
    }
    
  3. Fügen Sie das Zertifikat dem reverseProxyCertificate-Objekt in der Ressourcenvorlage Microsoft.ServiceFabric/clusters hinzu, um TLS-/SSL-Zertifikate für den Port des Reverseproxys zu konfigurieren.

    {
        "apiVersion": "2021-06-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
        ],
        "properties": {
            ...
            "reverseProxyCertificate": {
                "thumbprint": "[parameters('sfReverseProxyCertificateThumbprint')]",
                "x509StoreName": "[parameters('sfReverseProxyCertificateStoreName')]"
            },
            ...
            "clusterState": "Default",
        }
    }
    

    Sie können auch einen allgemeinen Namen für Reverseproxyzertifikate angeben. Verwenden Sie hierzu das Objekt reverseProxyCertificateCommonNames in der Clusterressourcenvorlage.

Unterstützung für Reverseproxyzertifikate, die sich vom Clusterzertifkat unterscheiden

Wenn das Reverseproxyzertifikat sich von dem Zertifikat unterscheidet, das den Cluster schützt, sollte das zuvor angegebene Zertifikat auf dem virtuellen Computer installiert und der Zugriffssteuerungsliste (Access Control List, ACL) hinzugefügt worden sein, damit Service Fabric darauf zugreifen kann. Dies kann in Microsoft.Compute/virtualMachineScaleSets im Abschnitt Ressourcentypen erfolgen. Fügen Sie das Zertifikat für die Installation dem osProfile hinzu. Der Erweiterungsabschnitt der Vorlage kann das Zertifikat in der ACL aktualisieren.

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ....
    "osProfile": {
        "adminPassword": "[parameters('adminPassword')]",
        "adminUsername": "[parameters('adminUsername')]",
        "computernamePrefix": "[parameters('vmNodeType0Name')]",
        "secrets": [
          {
            "sourceVault": {
              "id": "[parameters('sfReverseProxySourceVaultValue')]"
            },
            "vaultCertificates": [
              {
                "certificateStore": "[parameters('sfReverseProxyCertificateStoreValue')]",
                "certificateUrl": "[parameters('sfReverseProxyCertificateUrlValue')]"
              }
            ]
          }
        ]
      }
 ....
 "extensions": [
        {
            "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]",
            "properties": {
                    "type": "ServiceFabricNode",
                    "autoUpgradeMinorVersion": false,
                    ...
                    "publisher": "Microsoft.Azure.ServiceFabric",
                    "settings": {
                      "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
                      "nodeTypeRef": "[parameters('vmNodeType0Name')]",
                      "dataPath": "D:\\\\SvcFab",
                      "durabilityLevel": "Bronze",
                      "testExtension": true,
                      "reverseProxyCertificate": {
                        "thumbprint": "[parameters('sfReverseProxyCertificateThumbprint')]",
                        "x509StoreName": "[parameters('sfReverseProxyCertificateStoreValue')]"
                      },
                },
                "typeHandlerVersion": "1.0"
            }
        },
    ]
  }

Hinweis

Wenn Sie zum Aktivieren des Reverseproxys auf einem vorhandenen Cluster Zertifikate verwenden, die sich vom Clusterzertifikat unterscheiden, installieren Sie das Reverseproxyzertifikat, und aktualisieren Sie die ACL auf dem Cluster, bevor Sie den Reverseproxy aktivieren. Schließen Sie die Bereitstellung der Azure Resource Manager-Vorlage mit den oben angegebenen Einstellungen ab, bevor Sie eine Bereitstellung starten, um den Reverseproxy mit den Schritten 1-3 zu aktivieren.

Aktivieren des Reverseproxys auf eigenständigen Clustern

Bei eigenständigen Clustern können Sie den Reverseproxy in der Datei „ClusterConfig.json“ aktivieren. Sie können den Reverseproxy beim Erstellen des Clusters oder durch ein Upgrade der Konfiguration für einen vorhandenen Cluster aktivieren. Weitere Informationen zu den Einstellungen in den „ClusterConfig.json“-Dateien finden Sie unter Konfigurationseinstellungen für einen eigenständigen Windows-Cluster.

Die folgenden Schritte zeigen Ihnen die Einstellungen zum Aktivieren des Reverseproxys und (optional) zum Schützen des Reverseproxys mit einem X.509-Zertifikat.

  1. Legen Sie zum Aktivieren des Reverseproxys den reverseProxyEndpointPort-Wert für den Knotentyp unter properties in der Konfiguration des Clusters fest. Der folgende JSON-Code zeigt die Einstellung des Reverseproxy-Endpunktports für Knoten vom Typ „NodeType0“ auf 19081:

        "properties": {
           ... 
            "nodeTypes": [
                {
                    "name": "NodeType0",
                    ...
                    "reverseProxyEndpointPort": "19081",
                    ...
                }
            ],
           ...
        }
    
  2. (Optional) Konfigurieren Sie für einen sicheren Reverseproxy ein Zertifikat im Abschnitt security unter properties.

    • Für eine Entwicklungs- oder Testumgebung können Sie die ReverseProxyCertificate-Einstellung verwenden:

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificate": {
                           "Thumbprint": "[Thumbprint]",
                           "ThumbprintSecondary": "[Thumbprint]",
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      
    • Für eine Produktionsumgebung wird die ReverseProxyCertificateCommonNames-Einstellung empfohlen:

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificateCommonNames": {
                         "CommonNames": [
                             {
                               "CertificateCommonName": "[CertificateCommonName]"
                             }
                           ],
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      

    Weitere Informationen zum Konfigurieren und Verwalten von Zertifikaten für einen eigenständigen Cluster sowie weitere Details zum Konfigurieren von Zertifikaten zum Schützen des Reverseproxys finden Sie unter Schützen eines eigenständigen Windows-Clusters mithilfe von X.509-Zertifikaten.

Nachdem Sie die Datei „ClusterConfig.json“ so geändert haben, dass der Reverseproxy aktiviert wird, befolgen Sie die Anweisungen unter Aktualisieren der Clusterkonfiguration, um die Änderungen auf Ihren Cluster anzuwenden.

Bereitstellen des Reverseproxys auf einem öffentlichen Port über Azure Load Balancer

Um den Reverseproxy von außerhalb des Azure-Clusters zu adressieren, richten Sie Azure Load Balancer-Regeln und einen Azure-Integritätstest für den Reverseproxyport ein. Diese Schritte können mithilfe des Azure-Portals oder der Resource Manager-Vorlage zu einem beliebigen Zeitpunkt nach der Erstellung des Clusters ausgeführt werden.

Warnung

Wenn Sie den Port des Reverseproxys in Load Balancer konfigurieren, können alle Microservices im Cluster, die einen HTTP-Endpunkt verfügbar machen, von außerhalb des Clusters adressiert werden. Dies bedeutet, dass Microservices, die intern gedacht sind, von einem bestimmten böswilligen Benutzer entdeckt werden können. Dies legt potenziell schwerwiegende Schwachstellen offen, die ausgenutzt werden können:

  • Ein böswilliger Benutzer könnte zum Beispiel einen Denial-of-Service-Angriff starten, indem er wiederholt einen internen Dienst aufruft, der keine ausreichend geschützte Angriffsfläche hat.
  • Ein böswilliger Benutzer könnte fehlerhafte Pakete an einen internen Dienst senden, was zu unbeabsichtigtem Verhalten führt.
  • Ein interner Dienst könnte private oder vertrauliche Informationen zurückgeben, die nicht für Dienste außerhalb des Clusters bestimmt sind, wodurch diese vertraulichen Informationen einem böswilligen Benutzer zugänglich gemacht werden könnten.

Stellen Sie sicher, dass Sie alle potenziellen Auswirkungen auf die Sicherheit Ihres Clusters und der darauf laufenden Apps kennen und verringern, bevor Sie den Reverseproxyport veröffentlichen.

Wenn Sie den Reverseproxy für einen eigenständigen Cluster öffentlich verfügbar machen möchten, hängt die Art und Weise, in der Sie dies tun, von dem System ab, das den Cluster hostet, und wird im Rahmen dieses Artikels nicht behandelt. Die vorherige Warnung zum öffentlichen Verfügbarmachen von Reverseproxys gilt jedoch immer noch.

Verfügbarmachen des Reverseproxys über das Azure-Portal

  1. Klicken Sie im Azure-Portal auf die Ressourcengruppe für Ihren Cluster und dann auf den Lastenausgleich für Ihren Cluster.

  2. Um einen Integritätstest für den Port des Reverseproxys hinzuzufügen, klicken Sie im linken Bereich des Lastenausgleichsfensters unter EINSTELLUNGEN auf Integritätstests. Klicken Sie dann am oberen Rand des Integritätstestfensters auf Hinzufügen, geben Sie Details für den Reverseproxyport ein, und klicken Sie dann auf OK. Standardmäßig ist der Reverseproxyport 19081, es sei denn, Sie haben ihn bei der Erstellung des Clusters geändert.

    Konfigurieren des Reverseproxy-Integritätstests

  3. Um eine Load Balancer-Regel zum Verfügbarmachen des Ports des Reverseproxys hinzuzufügen, klicken Sie im linken Bereich des Lastenausgleichsfensters unter EINSTELLUNGEN auf Lastenausgleichsregeln. Klicken Sie dann am oberen Rand des Lastenausgleichsregeln-Fensters auf Hinzufügen, und geben Sie Details für den Reverseproxyport ein. Legen Sie für Port den Wert des Ports fest, auf dem Sie den Reverseproxy verfügbar machen möchten, für Back-End-Port den Wert des Ports, den Sie beim Aktivieren des Reverseproxys festgelegt haben, und für Integritätstest den Wert des Integritätstests, den Sie im vorherigen Schritt konfiguriert haben. Legen Sie andere Felder entsprechend fest, und klicken Sie auf OK.

    Konfigurieren von Lastenausgleichsregeln für den Reverseproxy

Verfügbarmachen des Reverseproxys über Azure Resource Manager-Vorlagen

Die folgende JSON-Code verweist auf die gleiche Vorlage, die in Aktivieren des Reverseproxys über Azure Resource Manager-Vorlagen verwendet wird. In diesem Abschnitt des Dokuments finden Sie Informationen zum Erstellen einer Resource Manager-Vorlage oder Exportieren einer Vorlage für einen vorhandenen Cluster. Die Änderungen werden in Microsoft.Network/loadBalancers im Abschnitt Ressourcentypen vorgenommen.

{
    "apiVersion": "[variables('lbApiVersion')]",
    "type": "Microsoft.Network/loadBalancers",
    ...
    ...
    "loadBalancingRules": [
        ...
        {
            "name": "LBSFReverseProxyRule",
            "properties": {
                "backendAddressPool": {
                    "id": "[variables('lbPoolID0')]"
                },
                "backendPort": "[parameters('SFReverseProxyPort')]",
                "enableFloatingIP": "false",
                "frontendIPConfiguration": {
                    "id": "[variables('lbIPConfig0')]"
                },
                "frontendPort": "[parameters('SFReverseProxyPort')]",
                "idleTimeoutInMinutes": "5",
                "probe": {
                    "id": "[concat(variables('lbID0'),'/probes/SFReverseProxyProbe')]"
                },
                "protocol": "tcp"
            }
        }
    ],
    "probes": [
        ...
        {
            "name": "SFReverseProxyProbe",
            "properties": {
                "intervalInSeconds": 5,
                "numberOfProbes": 2,
                "port":     "[parameters('SFReverseProxyPort')]",
                "protocol": "tcp"
            }
        }  
    ]
}

Anpassen des Reverseproxyverhaltens mit Fabric-Einstellungen

Sie können das Verhalten des Reverseproxys für Cluster, die in Azure gehostet werden, über die Fabric-Einstellungen in der Resource Manager-Vorlage, oder für eigenständige Cluster in der Datei ClusterConfig.json anpassen. Einstellungen zur Steuerung des Reverseproxyverhaltens befinden sich im Abschnitt ApplicationGateway/Http des Abschnitts fabricSettings unter dem Clusterabschnitt properties.

Sie können beispielsweise den Wert von DefaultHttpRequestTimeout festlegen, um das Timeout für Anforderungen an den Reverseproxy wie im folgenden JSON-Code auf 180 Sekunden festzulegen:

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
              {
                "name": "DefaultHttpRequestTimeout",
                "value": "180"
              }
            ]
          }
        ],
        ...
}

Hinweis

Für den Reverseproxy gilt ein Grenzwert von 16 KB für Header, und der Schwellenwert kann nicht in einen höheren Wert geändert werden.

Weitere Informationen zum Aktualisieren von Fabric-Einstellungen für Azure-Cluster finden Sie unter Anpassen von Clustereinstellungen mithilfe von Resource Manager-Vorlagen. Informationen für eigenständige Cluster finden Sie unter Anpassen von Clustereinstellungen für eigenständige Cluster.

Verschiedene Fabric-Einstellungen werden verwendet, um sichere Kommunikation zwischen dem Reverseproxy und Diensten einzurichten. Ausführliche Informationen zu diesen Einstellungen finden Sie unter Herstellen einer Verbindung mit einem sicheren Dienst mit dem Reverseproxy.

Nächste Schritte