Konfigurowanie zwrotnego serwera proxy w usłudze Azure Service Fabric

Zwrotny serwer proxy to opcjonalna usługa Azure Service Fabric, która ułatwia mikrousługi działające w klastrze usługi Service Fabric odnajdywanie i komunikowanie się z innymi usługami, które mają punkty końcowe HTTP. Aby dowiedzieć się więcej, zobacz Reverse proxy in Azure Service Fabric (Zwrotny serwer proxy w usłudze Azure Service Fabric). W tym artykule pokazano, jak skonfigurować zwrotny serwer proxy w klastrze i skonfigurować go.

Włączanie zwrotnego serwera proxy przy użyciu Azure Portal

Azure Portal udostępnia opcję włączenia zwrotnego serwera proxy podczas tworzenia nowego klastra usługi Service Fabric. Nie można uaktualnić istniejącego klastra do używania zwrotnego serwera proxy za pośrednictwem portalu.

Aby skonfigurować zwrotny serwer proxy podczas tworzenia klastra przy użyciu Azure Portal, upewnij się, że wykonasz następujące czynności:

  1. W kroku 2. Konfiguracja klastra w obszarze Konfiguracja typu węzła wybierz pozycję Włącz zwrotny serwer proxy.

    Włączanie zwrotnego serwera proxy w portalu

  2. (Opcjonalnie) Aby skonfigurować bezpieczny zwrotny serwer proxy, należy skonfigurować certyfikat TLS/SSL. W kroku 3. Zabezpieczenia w obszarze Konfigurowanie ustawień zabezpieczeń klastra w obszarze Typ konfiguracji wybierz pozycję Niestandardowe. Następnie w obszarze Zwrotny certyfikat SSL serwera proxy wybierz pozycję Uwzględnij certyfikat SSL dla zwrotnego serwera proxy i wprowadź szczegóły certyfikatu.

    Konfigurowanie bezpiecznego zwrotnego serwera proxy w portalu

    Jeśli zdecydujesz się nie skonfigurować zwrotnego serwera proxy przy użyciu certyfikatu podczas tworzenia klastra, możesz to zrobić później za pomocą szablonu Resource Manager dla grupy zasobów klastra. Aby dowiedzieć się więcej, zobacz Włączanie zwrotnego serwera proxy za pośrednictwem szablonów usługi Azure Resource Manager.

Włączanie zwrotnego serwera proxy za pośrednictwem szablonów usługi Azure Resource Manager

W przypadku klastrów na platformie Azure możesz użyć szablonu usługi Azure Resource Manager, aby włączyć zwrotny serwer proxy w usłudze Service Fabric. Zwrotny serwer proxy można włączyć podczas tworzenia klastra lub włączania go, aktualizując klaster w późniejszym czasie.

W przypadku nowego klastra można utworzyć niestandardowy szablon Resource Manager lub użyć przykładowego szablonu.

Przykładowe szablony Resource Manager, które ułatwiają konfigurowanie bezpiecznego zwrotnego serwera proxy dla klastra platformy Azure, można znaleźć w przykładowych szablonach bezpiecznego zwrotnego serwera proxy w usłudze GitHub. Zapoznaj się z tematem Konfigurowanie zwrotnego serwera proxy HTTPS w bezpiecznym klastrze w pliku README, aby uzyskać instrukcje i szablony używane do konfigurowania bezpiecznego zwrotnego serwera proxy przy użyciu certyfikatu i obsługi przerzucania certyfikatów.

W przypadku istniejącego klastra można wyeksportować szablon Resource Manager dla grupy zasobów klastra przy użyciu Azure Portal, programu PowerShell lub interfejsu wiersza polecenia platformy Azure.

Po utworzeniu szablonu Resource Manager możesz włączyć zwrotny serwer proxy, wykonując następujące czynności:

  1. Zdefiniuj port dla zwrotnego serwera proxy w sekcji Parametry szablonu.

    "SFReverseProxyPort": {
        "type": "int",
        "defaultValue": 19081,
        "metadata": {
            "description": "Endpoint for Service Fabric Reverse proxy"
        }
    },
    
  2. Określ port dla każdego obiektu nodetype w sekcji Typ zasobuMicrosoft.ServiceFabric/clusters.

    Port jest identyfikowany przez nazwę parametru reverseProxyEndpointPort.

    {
        "apiVersion": "2021-06-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
       "nodeTypes": [
          {
           ...
           "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]",
           ...
          },
        ...
        ],
        ...
    }
    
  3. Aby skonfigurować certyfikaty TLS/SSL na porcie dla zwrotnego serwera proxy, dodaj certyfikat do obiektu reverseProxyCertificate w szablonie zasobówMicrosoft.ServiceFabric/clusters.

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

    Można również określić nazwę pospolitą dla certyfikatów zwrotnego serwera proxy przy użyciu obiektu reverseProxyCertificateCommonNames w szablonie zasobów klastrów.

Obsługa certyfikatu zwrotnego serwera proxy, który różni się od certyfikatu klastra

Jeśli certyfikat zwrotnego serwera proxy różni się od certyfikatu, który zabezpiecza klaster, wcześniej określony certyfikat powinien zostać zainstalowany na maszynie wirtualnej i dodany do listy kontroli dostępu (ACL), aby usługa Service Fabric mogła uzyskać do niego dostęp. Można to zrobić w sekcji Typ zasobuMicrosoft.Compute/virtualMachineScaleSets. Aby przeprowadzić instalację, dodaj certyfikat do pliku osProfile. Sekcja rozszerzenia szablonu może zaktualizować certyfikat na liście ACL.

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

Uwaga

W przypadku używania certyfikatów innych niż certyfikat klastra w celu włączenia zwrotnego serwera proxy w istniejącym klastrze należy zainstalować certyfikat zwrotnego serwera proxy i zaktualizować listę ACL w klastrze przed włączeniem zwrotnego serwera proxy. Wykonaj wdrożenie szablonu usługi Azure Resource Manager przy użyciu ustawień wymienionych wcześniej przed rozpoczęciem wdrażania w celu włączenia zwrotnego serwera proxy w krokach 1–3.

Włączanie zwrotnego serwera proxy w klastrach autonomicznych

W przypadku klastrów autonomicznych należy włączyć zwrotny serwer proxy w pliku ClusterConfig.json. Zwrotny serwer proxy można włączyć podczas tworzenia klastra lub uaktualniając konfigurację istniejącego klastra. Aby dowiedzieć się więcej o ustawieniach dostępnych w plikach ClusterConfig.json, zobacz Ustawienia klastra autonomicznego.

W poniższych krokach przedstawiono ustawienia umożliwiające włączenie zwrotnego serwera proxy i opcjonalnie zabezpieczenie zwrotnego serwera proxy za pomocą certyfikatu X.509.

  1. Aby włączyć zwrotny serwer proxy, ustaw wartość reverseProxyEndpointPort dla typu węzła we właściwościach w konfiguracji klastra. Poniższy kod JSON pokazuje ustawienie portu zwrotnego punktu końcowego serwera proxy na 19081 dla węzłów o typie "NodeType0":

        "properties": {
           ... 
            "nodeTypes": [
                {
                    "name": "NodeType0",
                    ...
                    "reverseProxyEndpointPort": "19081",
                    ...
                }
            ],
           ...
        }
    
  2. (Opcjonalnie) W przypadku bezpiecznego zwrotnego serwera proxy skonfiguruj certyfikat w sekcji zabezpieczeń we właściwościach.

    • W przypadku środowiska deweloperskiego lub testowego można użyć ustawienia ReverseProxyCertificate :

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificate": {
                           "Thumbprint": "[Thumbprint]",
                           "ThumbprintSecondary": "[Thumbprint]",
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      
    • W przypadku środowiska produkcyjnego zalecane jest ustawienie ReverseProxyCertificateCommonNames :

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

    Aby dowiedzieć się więcej na temat konfigurowania certyfikatów dla klastra autonomicznego i zarządzania nimi, a także bardziej szczegółowo na temat konfigurowania certyfikatów używanych do zabezpieczania zwrotnego serwera proxy, zobacz Zabezpieczenia oparte na certyfikatach X509.

Po zmodyfikowaniu pliku ClusterConfig.json w celu włączenia zwrotnego serwera proxy postępuj zgodnie z instrukcjami w temacie Uaktualnianie konfiguracji klastra , aby wypchnąć zmiany do klastra.

Uwidaczniaj zwrotny serwer proxy na porcie publicznym za pośrednictwem Azure Load Balancer

Aby rozwiązać problem z zwrotnym serwerem proxy spoza klastra platformy Azure, skonfiguruj reguły Azure Load Balancer i sondę kondycji platformy Azure dla odwrotnego portu serwera proxy. Te kroki można wykonać przy użyciu Azure Portal lub szablonu Resource Manager w dowolnym momencie po utworzeniu klastra.

Ostrzeżenie

Podczas konfigurowania portu zwrotnego serwera proxy w Load Balancer wszystkie mikrousługi w klastrze, które uwidaczniają punkt końcowy HTTP, są adresowane spoza klastra. Oznacza to, że mikrousługi przeznaczone do użytku wewnętrznego mogą być wykrywalne przez określonego złośliwego użytkownika. Potencjalnie stwarza to poważne luki w zabezpieczeniach, które mogą zostać wykorzystane; na przykład:

  • Złośliwy użytkownik może uruchomić atak typu "odmowa usługi", wielokrotnie wywołując usługę wewnętrzną, która nie ma wystarczająco wzmocnionej powierzchni ataków.
  • Złośliwy użytkownik może dostarczać źle sformułowane pakiety do usługi wewnętrznej, co powoduje niezamierzone zachowanie.
  • Usługa przeznaczona do użytku wewnętrznego może zwracać prywatne lub poufne informacje, które nie mają być widoczne dla usług spoza klastra, co powoduje ujawnienie tych poufnych informacji złośliwemu użytkownikowi.

Przed upublicznieniem odwrotnego portu serwera proxy upewnij się, że w pełni rozumiesz i ograniczasz potencjalne konsekwencje zabezpieczeń dla klastra i uruchomionych w nim aplikacji.

Jeśli chcesz uwidocznić zwrotny serwer proxy publicznie dla klastra autonomicznego, sposób, w jaki to zrobisz, będzie zależeć od systemu hostowania klastra i wykracza poza zakres tego artykułu. Poprzednie ostrzeżenie dotyczące publicznego uwidaczniania zwrotnego serwera proxy, jednak nadal ma zastosowanie.

Uwidaczniaj zwrotny serwer proxy przy użyciu Azure Portal

  1. Na Azure Portal kliknij grupę zasobów dla klastra, a następnie kliknij moduł równoważenia obciążenia dla klastra.

  2. Aby dodać sondę kondycji dla portu zwrotnego serwera proxy, w lewym okienku okna modułu równoważenia obciążenia w obszarze USTAWIENIA kliknij pozycję Sondy kondycji. Następnie kliknij przycisk Dodaj w górnej części okna Sondy kondycji i wprowadź szczegóły dla portu zwrotnego serwera proxy, a następnie kliknij przycisk OK. Domyślnie port zwrotnego serwera proxy to 19081, chyba że został zmieniony podczas tworzenia klastra.

    Konfigurowanie sondy kondycji zwrotnego serwera proxy

  3. Aby dodać regułę Load Balancer w celu uwidocznienia portu zwrotnego serwera proxy, w lewym okienku okna modułu równoważenia obciążenia w obszarze USTAWIENIA kliknij pozycję Reguły równoważenia obciążenia. Następnie kliknij przycisk Dodaj w górnej części okna Reguły równoważenia obciążenia i wprowadź szczegóły dla portu zwrotnego serwera proxy. Upewnij się, że ustawiono wartość Port na port, na którym ma być uwidoczniony zwrotny serwer proxy, wartość portu zaplecza na port ustawiony po włączeniu zwrotnego serwera proxy, a wartość sondy kondycji na sondę kondycji skonfigurowaną w poprzednim kroku. Ustaw odpowiednie pola i kliknij przycisk OK.

    Konfigurowanie reguły modułu równoważenia obciążenia dla zwrotnego serwera proxy

Uwidaczniać zwrotny serwer proxy za pośrednictwem szablonów Resource Manager

Poniższy kod JSON odwołuje się do tego samego szablonu, który jest używany w temacie Włączanie zwrotnego serwera proxy za pośrednictwem szablonów usługi Azure Resource Manager. Zapoznaj się z sekcją tego dokumentu, aby uzyskać informacje o sposobie tworzenia szablonu Resource Manager lub eksportowania szablonu dla istniejącego klastra. Zmiany są wprowadzane w sekcji Microsoft.Network/loadBalancersTyp zasobu.

{
    "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"
            }
        }  
    ]
}

Dostosowywanie zachowania zwrotnego serwera proxy przy użyciu ustawień sieci szkieletowej

Zachowanie zwrotnego serwera proxy można dostosować za pomocą ustawień sieci szkieletowej w szablonie Resource Manager dla klastrów hostowanych na platformie Azure lub w pliku ClusterConfig.json dla klastrów autonomicznych. Ustawienia kontrolujące zachowanie zwrotnego serwera proxy znajdują się w sekcji ApplicationGateway/Http w sekcji fabricSettings w sekcji właściwości klastra.

Można na przykład ustawić wartość DefaultHttpRequestTimeout , aby ustawić limit czasu dla żądań na zwrotny serwer proxy na 180 sekund, tak jak w następującym formacie JSON:

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

Uwaga

Zwrotny serwer proxy ma limit 16 KB dla nagłówków i nie obsługuje zmiany progu na większy rozmiar.

Aby uzyskać więcej informacji na temat aktualizowania ustawień sieci szkieletowej dla klastrów platformy Azure, zobacz Dostosowywanie ustawień klastra przy użyciu szablonów Resource Manager. W przypadku klastrów autonomicznych zobacz Dostosowywanie ustawień klastra dla klastrów autonomicznych.

Kilka ustawień sieci szkieletowej ułatwia ustanowienie bezpiecznej komunikacji między zwrotnym serwerem proxy i usługami. Aby uzyskać szczegółowe informacje na temat tych ustawień, zobacz Nawiązywanie połączenia z bezpieczną usługą przy użyciu zwrotnego serwera proxy.

Następne kroki