Configurar e configurar o proxy reverso no Azure Service FabricSet up and configure reverse proxy in Azure Service Fabric

O proxy reverso é um serviço de Service Fabric do Azure opcional que ajuda os microserviços em execução em uma descoberta de Cluster Service Fabric e se comunicam com outros serviços que têm pontos de extremidade http.Reverse proxy is an optional Azure Service Fabric service that helps microservices running in a Service Fabric cluster discover and communicate with other services that have http endpoints. Para saber mais, confira proxy reverso no Azure Service Fabric.To learn more, see Reverse proxy in Azure Service Fabric. Este artigo mostra como configurar e configurar o proxy reverso no cluster.This article shows you how to set up and configure reverse proxy in your cluster.

Habilitar proxy reverso usando portal do AzureEnable reverse proxy using Azure portal

Portal do Azure fornece uma opção para habilitar o proxy reverso quando você cria um novo cluster de Service Fabric.Azure portal provides an option to enable reverse proxy when you create a new Service Fabric cluster. Não é possível atualizar um cluster existente para usar o proxy reverso por meio do Portal.You can't upgrade an existing cluster to use reverse proxy through the portal.

Para configurar o proxy reverso ao criar um cluster usando portal do Azure, certifique-se de fazer o seguinte:To configure reverse proxy when you create a cluster using Azure portal, make sure you do the following:

  1. Na etapa 2: configuração de cluster, em configuração de tipo de nó, selecione habilitar proxy reverso.In Step 2: Cluster Configuration, under Node type configuration, select Enable reverse proxy.

    Habilitar proxy reverso no portal

  2. Adicional Para configurar o proxy reverso seguro, você precisa configurar um certificado SSL.(Optional) To configure secure reverse proxy, you need to configure an SSL certificate. Na etapa 3: segurança, em definir configurações de segurança do cluster, em tipo de configuração, selecione personalizado.In Step 3: Security, on Configure cluster security settings, under Configuration type, select Custom. Em seguida, em certificado SSL de proxy reverso, selecione incluir um certificado SSL para o proxy reverso e insira os detalhes do certificado.Then, under Reverse Proxy SSL certificate, select Include a SSL certificate for reverse proxy and enter your certificate details.

    Configurar o proxy reverso seguro no portal

    Se você optar por não configurar o proxy reverso com um certificado ao criar o cluster, poderá fazer isso mais tarde por meio do modelo do Resource Manager para o grupo de recursos do cluster.If you choose not to configure the reverse proxy with a certificate when you create the cluster, you can do so later through the Resource Manager template for the cluster's resource group. Para saber mais, confira habilitar o proxy reverso por meio de modelos de Azure Resource Manager.To learn more, see Enable reverse proxy via Azure Resource Manager templates.

Habilitar proxy reverso por meio de modelos de Azure Resource ManagerEnable reverse proxy via Azure Resource Manager templates

Para clusters no Azure, você pode usar o modelo de Azure Resource Manager para habilitar o proxy reverso no Service Fabric.For clusters on Azure, you can use the Azure Resource Manager template to enable the reverse proxy in Service Fabric. Você pode habilitar o proxy reverso ao criar o cluster ou habilitá-lo atualizando o cluster em um momento posterior.You can enable reverse proxy when you create the cluster or enable it by updating the cluster at a later time.

Para um novo cluster, você pode criar um modelo personalizado do Resource Manager ou pode usar um modelo de exemplo.For a new cluster, you can create a custom Resource Manager template or you can use a sample template.

Você pode encontrar modelos do Resource Manager de exemplo que podem ajudá-lo a configurar o proxy reverso seguro para um cluster do Azure nos modelos de exemplo de proxy reverso seguro no github.You can find sample Resource Manager templates that can help you configure secure reverse proxy for an Azure cluster in the Secure Reverse Proxy Sample Templates on GitHub. Consulte Configurar o proxy reverso HTTPS em um cluster seguro no arquivo Leiame para obter instruções e os modelos a serem usados para configurar o proxy reverso seguro com um certificado e para lidar com a substituição do certificado.Refer to Configure HTTPS Reverse Proxy in a secure cluster in the README file for instructions and the templates to use to configure secure reverse proxy with a certificate and to handle certificate rollover.

Para um cluster existente, você pode exportar o modelo do Resource Manager para o grupo de recursos do cluster usando o portal do Azure, o PowerShellou o CLI do Azure.For an existing cluster, you can export the Resource Manager template for the cluster's resource group using the Azure portal, PowerShell, or the Azure CLI.

Depois de ter um modelo do Resource Manager, você pode habilitar o proxy reverso com as seguintes etapas:After you have a Resource Manager template, you can enable the reverse proxy with the following steps:

  1. Defina uma porta para o proxy reverso na seção de parâmetros do modelo.Define a port for the reverse proxy in the Parameters section of the template.

    "SFReverseProxyPort": {
        "type": "int",
        "defaultValue": 19081,
        "metadata": {
            "description": "Endpoint for Service Fabric Reverse proxy"
        }
    },
    
  2. Especifique a porta para cada um dos objetos NodeType na seção tipo de recurso Microsoft. ServicePortal/clusters .Specify the port for each of the nodetype objects in the Microsoft.ServiceFabric/clusters Resource type section.

    A porta é identificada pelo nome do parâmetro, reverseProxyEndpointPort.The port is identified by the parameter name, reverseProxyEndpointPort.

    {
        "apiVersion": "2016-09-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
       "nodeTypes": [
          {
           ...
           "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]",
           ...
          },
        ...
        ],
        ...
    }
    
  3. Para configurar certificados SSL na porta para o proxy reverso, adicione o certificado à propriedade reverseProxyCertificate na seção tipo de recurso Microsoft. ServicePortal/clusters .To configure SSL certificates on the port for the reverse proxy, add the certificate to the reverseProxyCertificate property in the Microsoft.ServiceFabric/clusters Resource type section.

    {
        "apiVersion": "2016-09-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",
        }
    }
    

Suporte a um certificado de proxy reverso diferente do certificado de clusterSupporting a reverse proxy certificate that's different from the cluster certificate

Se o certificado de proxy reverso for diferente do certificado que protege o cluster, o certificado especificado anteriormente deverá ser instalado na máquina virtual e adicionado à ACL (lista de controle de acesso) para que Service Fabric possa acessá-lo.If the reverse proxy certificate is different from the certificate that secures the cluster, then the previously specified certificate should be installed on the virtual machine and added to the access control list (ACL) so that Service Fabric can access it. Isso pode ser feito na seção tipo de recurso Microsoft. Compute/virtualMachineScaleSets .This can be done in the Microsoft.Compute/virtualMachineScaleSets Resource type section. Para a instalação, adicione o certificado ao osProfile.For installation, add the certificate to the osProfile. A seção extensão do modelo pode atualizar o certificado na ACL.The extension section of the template can update the certificate in the 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"
            }
        },
    ]
  }

Nota

Quando você usa certificados que são diferentes do certificado de cluster para habilitar o proxy reverso em um cluster existente, instale o certificado de proxy reverso e atualize a ACL no cluster antes de habilitar o proxy reverso.When you use certificates that are different from the cluster certificate to enable the reverse proxy on an existing cluster, install the reverse proxy certificate and update the ACL on the cluster before you enable the reverse proxy. Conclua a implantação do modelo de Azure Resource Manager usando as configurações mencionadas anteriormente antes de iniciar uma implantação para habilitar o proxy reverso nas etapas 1-3.Complete the Azure Resource Manager template deployment by using the settings mentioned previously before you start a deployment to enable the reverse proxy in steps 1-3.

Habilitar proxy reverso em clusters autônomosEnable reverse proxy on standalone clusters

Para clusters autônomos, você habilita o proxy reverso no arquivo ClusterConfig. JSON.For standalone clusters, you enable reverse proxy in the ClusterConfig.json file. Você pode habilitar o proxy reverso na criação do cluster ou atualizando a configuração de um cluster existente.You can enable reverse proxy at cluster creation or by upgrading the configuration for an existing cluster. Para saber mais sobre as configurações disponíveis em arquivos ClusterConfig. JSON, consulte configurações de cluster autônomos.To learn more about the settings available in ClusterConfig.json files, see Standalone cluster settings.

As etapas a seguir mostram as configurações a serem usadas para habilitar o proxy reverso e, opcionalmente, para proteger o proxy reverso com um certificado X. 509.The following steps show you the settings to use to enable reverse proxy and, optionally, to secure the reverse proxy with an X.509 certificate.

  1. Para habilitar o proxy reverso, defina o valor reverseProxyEndpointPort para o tipo de nó em Propriedades na configuração do cluster. O JSON a seguir mostra a configuração da porta do ponto de extremidade do proxy reverso para 19081 para nós com um tipo de "NodeType0":To enable reverse proxy, set the reverseProxyEndpointPort value for the node type under properties in the cluster config. The following JSON shows setting the reverse proxy endpoint port to 19081 for nodes with a type of "NodeType0":

        "properties": {
           ... 
            "nodeTypes": [
                {
                    "name": "NodeType0",
                    ...
                    "reverseProxyEndpointPort": "19081",
                    ...
                }
            ],
           ...
        }
    
  2. Adicional Para um proxy reverso seguro, configure um certificado na seção segurança em Propriedades.(Optional) For a secure reverse proxy, configure a certificate in the security section under properties.

    • Para um ambiente de desenvolvimento ou teste, você pode usar a configuração ReverseProxyCertificate :For a development or test environment, you can use the ReverseProxyCertificate setting:

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificate": {
                           "Thumbprint": "[Thumbprint]",
                           "ThumbprintSecondary": "[Thumbprint]",
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      
    • Para um ambiente de produção, a configuração ReverseProxyCertificateCommonNames é recomendada:For a production environment, the ReverseProxyCertificateCommonNames setting is recommended:

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

    Para saber mais sobre como configurar e gerenciar certificados para um cluster autônomo, bem como mais detalhes sobre a configuração de certificados usados para proteger o proxy reverso, consulte segurança baseada em certificado X509.To learn more about configuring and managing certificates for a standalone cluster, as well as more detail about configuring certificates used to secure reverse proxy, see X509 certificate-based security.

Depois de modificar o arquivo ClusterConfig. JSON para habilitar o proxy reverso, siga as instruções em atualizar a configuração do cluster para enviar por push as alterações para o cluster.After you've modified your ClusterConfig.json file to enable reverse proxy, follow the instructions in Upgrade the cluster configuration to push the changes to your cluster.

Expor proxy reverso em uma porta pública por meio de Azure Load BalancerExpose reverse proxy on a public port through Azure Load Balancer

Para resolver o proxy reverso de fora de um cluster do Azure, configure Azure Load Balancer regras e uma investigação de integridade do Azure para a porta de proxy reverso.To address the reverse proxy from outside an Azure cluster, set up Azure Load Balancer rules and an Azure Health Probe for the reverse proxy port. Essas etapas podem ser executadas usando o portal do Azure ou o modelo do Resource Manager a qualquer momento após a criação do cluster.These steps can be performed using the Azure portal or the Resource Manager template at any time after you have created the cluster.

Aviso

Quando você configura a porta do proxy reverso no Load Balancer, todos os microserviços no cluster que expõem um ponto de extremidade HTTP são endereçáveis de fora do cluster.When you configure the reverse proxy's port in Load Balancer, all microservices in the cluster that expose an HTTP endpoint are addressable from outside the cluster. Isso significa que os microserviços destinados a serem internos podem ser detectáveis por um determinado usuário mal-intencionado.This means that microservices meant to be internal may be discoverable by a determined malicious user. Isso potencialmente apresenta vulnerabilidades sérias que podem ser exploradas; por exemplo:This potentially presents serious vulnerabilities that can be exploited; for example:

  • Um usuário mal-intencionado pode iniciar um ataque de negação de serviço chamando repetidamente um serviço interno que não tem uma superfície de ataque suficientemente protegida.A malicious user may launch a denial of service attack by repeatedly calling an internal service that does not have a sufficiently hardened attack surface.
  • Um usuário mal-intencionado pode entregar pacotes malformados a um serviço interno, resultando em um comportamento indesejado.A malicious user may deliver malformed packets to an internal service resulting in unintended behavior.
  • Um serviço destinado a ser interno pode retornar informações privadas ou confidenciais que não devem ser expostas a serviços fora do cluster, expondo assim essas informações confidenciais a um usuário mal-intencionado.A service meant to be internal may return private or sensitive information not intended to be exposed to services outside the cluster, thus exposing this sensitive information to a malicious user.

Certifique-se de compreender e atenuar totalmente as possíveis ramificações de segurança para o cluster e os aplicativos em execução, antes de tornar a porta de proxy inversa pública.Make sure you fully understand and mitigate the potential security ramifications for your cluster and the apps running on it, before you make the reverse proxy port public.

Se você quiser expor o proxy reverso publicamente para um cluster autônomo, a maneira como você faz isso dependerá do sistema que hospeda o cluster e está além do escopo deste artigo.If you want to expose reverse proxy publicly for a standalone cluster, the manner in which you do so will depend on the system hosting the cluster and is beyond the scope of this article. O aviso anterior sobre a exposição do proxy reverso publicamente, no entanto, ainda se aplica.The preceding warning about exposing reverse proxy publicly, however, still applies.

Expor o proxy reverso usando portal do AzureExpose the reverse proxy using Azure portal

  1. Na portal do Azure, clique no grupo de recursos para o cluster e, em seguida, clique no balanceador de carga do cluster.On the Azure portal, click the resource group for your cluster, then click the load balancer for your cluster.

  2. Para adicionar uma investigação de integridade para a porta de proxy reverso, no painel esquerdo da janela do balanceador de carga, em configurações, clique em investigações de integridade.To add a health Probe for the reverse proxy port, in the left pane of the load balancer window, under SETTINGS, click Health probes. Em seguida, clique em Adicionar na parte superior da janela investigações de integridade e insira os detalhes da porta do proxy reverso e clique em OK.Then click Add at the top of the Health probes window and enter details for the reverse proxy port, then click OK. Por padrão, a porta de proxy reverso é 19081, a menos que você a tenha alterado quando criou o cluster.By default, the reverse proxy port is 19081, unless you changed it when you created the cluster.

    Configurar investigação de integridade de proxy reverso

  3. Para adicionar uma regra de Load Balancer para expor a porta de proxy reverso, no painel esquerdo da janela do balanceador de carga, em configurações, clique em regras de balanceamento de carga.To add a Load Balancer rule to expose the reverse proxy port, in the left pane of the load balancer window, under SETTINGS, click Load balancing rules. Em seguida, clique em Adicionar na parte superior da janela regras de balanceamento de carga e insira os detalhes da porta de proxy reverso.Then click Add at the top of the Load balancing rules window and enter details for the reverse proxy port. Certifique-se de definir o valor da porta para a porta na qual você deseja que o proxy reverso seja exposto, o valor da porta de back-end para a porta que você definiu quando habilitou o proxy reverso e o valor de investigação de integridade para a investigação de integridade que você configurou na etapa anterior.Make sure you set the Port value to the port you want the reverse proxy exposed on, the Backend port value to the port you set when you enabled reverse proxy, and the Health probe value to the health probe you configured in the previous step. Defina outros campos conforme apropriado e clique em OK.Set other fields as appropriate and click OK.

    Configurar a regra do balanceador de carga para o proxy reverso

Expor o proxy reverso por meio de modelos do Resource ManagerExpose the reverse proxy via Resource Manager templates

O JSON a seguir faz referência ao mesmo modelo usado em habilitar proxy reverso por meio de modelos de Azure Resource Manager.The following JSON references the same template that is used in Enable reverse proxy via Azure Resource Manager templates. Consulte essa seção do documento para obter informações sobre como criar um modelo do Resource Manager ou exportar um modelo para um cluster existente.Refer to that section of the document for information about how to create a Resource Manager template or export a template for an existing cluster. As alterações são feitas na seção tipo de recurso Microsoft. Network/balancers .The changes are made to the Microsoft.Network/loadBalancers Resource type section.

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

Personalizar o comportamento do proxy reverso usando as configurações de malhaCustomize reverse proxy behavior using fabric settings

Você pode personalizar o comportamento do proxy reverso por meio de configurações de malha no modelo do Resource Manager para clusters hospedados no Azure ou no arquivo ClusterConfig. JSON para clusters autônomos.You can customize the behavior of reverse proxy through fabric settings in the Resource Manager template for clusters hosted in Azure or in the ClusterConfig.json file for standalone clusters. As configurações que controlam o comportamento do proxy reverso estão localizadas na seção ApplicationGateway/http na seção fabricSettings na seção Propriedades do cluster.Settings that control reverse proxy behavior are located in the ApplicationGateway/Http section in the fabricSettings section under the cluster properties section.

Por exemplo, você pode definir o valor de DefaultHttpRequestTimeout para definir o tempo limite para solicitações para o proxy reverso a 180 segundos como no JSON a seguir:For example, you can set the value of DefaultHttpRequestTimeout to set the timeout for requests to the reverse proxy to 180 seconds as in the following JSON:

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

Para obter mais informações sobre como atualizar as configurações de malha para clusters do Azure, consulte Personalizar configurações de cluster usando modelos do Resource Manager.For more information about updating fabric settings for Azure clusters, see Customize cluster settings using Resource Manager templates. Para clusters autônomos, consulte Personalizar configurações de cluster para clusters autônomos.For standalone clusters, see Customize cluster settings for standalone clusters.

Várias configurações de malha são usadas para ajudar a estabelecer uma comunicação segura entre o proxy reverso e os serviços.Several fabric settings are used to help establish secure communication between reverse proxy and services. Para obter informações detalhadas sobre essas configurações, consulte conectar-se a um serviço seguro com o proxy reverso.For detailed information about these settings, see Connect to a secure service with the reverse proxy.

Passos seguintesNext steps