Instalar e configurar proxy reverso no Azure Service Fabric
O proxy reverso é um serviço opcional do Azure Service Fabric que ajuda os microsserviços em execução em um cluster do Service Fabric a descobrir e se comunicar com outros serviços que têm pontos de extremidade http. Para saber mais, consulte Proxy reverso no Azure Service Fabric. Este artigo mostra como instalar e configurar o proxy reverso em seu cluster.
Habilitar proxy reverso usando o portal do Azure
O portal do Azure fornece uma opção para habilitar o proxy reverso quando você cria um novo cluster do Service Fabric. Não é possível atualizar um cluster existente para usar proxy reverso por meio do portal.
Para configurar o proxy reverso ao criar um cluster usando o portal do Azure, faça o seguinte:
Na Etapa 2: Configuração do Cluster, em Configuração do tipo de nó, selecione Habilitar proxy reverso.
(Opcional) Para configurar o proxy reverso seguro, você precisa configurar um certificado TLS/SSL. Em Etapa 3: Segurança, em Configurar configurações de segurança do cluster, em Tipo de configuração, selecione Personalizado. Em seguida, em Certificado SSL de proxy reverso, selecione Incluir um certificado SSL para proxy reverso e insira os detalhes do certificado.
Se você optar por não configurar o proxy reverso com um certificado ao criar o cluster, poderá fazê-lo posteriormente por meio do modelo Gerenciador de Recursos para o grupo de recursos do cluster. Para saber mais, consulte Habilitar proxy reverso por meio de modelos do Azure Resource Manager.
Habilitar proxy reverso por meio de modelos do Azure Resource Manager
Para clusters no Azure, você pode usar o modelo do Azure Resource Manager para habilitar o proxy reverso no Service Fabric. Você pode habilitar o proxy reverso ao criar o cluster ou habilitá-lo atualizando o cluster posteriormente.
Para um novo cluster, você pode criar um modelo personalizado do Gerenciador de Recursos ou pode usar um modelo de exemplo.
Você pode encontrar modelos de exemplo do Gerenciador de Recursos 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. Consulte Configurar Proxy Reverso HTTPS em um cluster seguro no arquivo LEIA-ME 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 de certificados.
Para um cluster existente, você pode exportar o modelo do Gerenciador de Recursos para o grupo de recursos do cluster usando o portal do Azure, o PowerShell ou a CLI do Azure.
Depois de ter um modelo do Gerenciador de Recursos, você pode habilitar o proxy reverso com as seguintes etapas:
Defina uma porta para o proxy reverso na seção Parâmetros do modelo.
"SFReverseProxyPort": { "type": "int", "defaultValue": 19081, "metadata": { "description": "Endpoint for Service Fabric Reverse proxy" } },
Especifique a porta para cada um dos objetos nodetype na seção Microsoft.ServiceFabric/clusters Resource type.
A porta é identificada pelo nome do parâmetro, reverseProxyEndpointPort.
{ "apiVersion": "2021-06-01", "type": "Microsoft.ServiceFabric/clusters", "name": "[parameters('clusterName')]", "location": "[parameters('clusterLocation')]", ... "nodeTypes": [ { ... "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]", ... }, ... ], ... }
Para configurar certificados TLS/SSL na porta do proxy reverso, adicione o certificado ao objeto reverseProxyCertificate no modelo de recurso Microsoft.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", } }
Você também pode especificar um nome comum para certificados de proxy reverso usando o objeto reverseProxyCertificateCommonNames no modelo de recurso de clusters.
Suporte a um certificado de proxy reverso diferente do certificado de cluster
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 à lista de controle de acesso (ACL) para que o Service Fabric possa acessá-lo. Isso pode ser feito na seção Microsoft.Compute/virtualMachineScaleSets Resource type. Para a instalação, adicione o certificado ao osProfile. A seção de extensão do modelo pode atualizar o certificado na 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 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. Conclua a implantação do modelo do Azure Resource Manager usando as configurações mencionadas anteriormente antes de iniciar uma implantação para habilitar o proxy reverso nas etapas 1 a 3.
Habilitar proxy reverso em clusters autônomos
Para clusters autônomos, você habilita o proxy reverso no arquivo ClusterConfig.json. Você pode habilitar o proxy reverso na criação do cluster ou atualizando a configuração para um cluster existente. Para saber mais sobre as configurações disponíveis em ClusterConfig.json arquivos, consulte Configurações de cluster autônomas.
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.
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 de ponto de extremidade de proxy reverso como 19081 para nós com um tipo de "NodeType0":
"properties": { ... "nodeTypes": [ { "name": "NodeType0", ... "reverseProxyEndpointPort": "19081", ... } ], ... }
(Opcional) Para um proxy reverso seguro, configure um certificado na seção de segurança em propriedades.
Para um ambiente de desenvolvimento ou teste, você pode usar a configuração ReverseProxyCertificate :
"properties": { ... "security": { ... "CertificateInformation": { ... "ReverseProxyCertificate": { "Thumbprint": "[Thumbprint]", "ThumbprintSecondary": "[Thumbprint]", "X509StoreName": "My" }, ... } }, ... }
Para um ambiente de produção, a configuração ReverseProxyCertificateCommonNames é recomendada:
"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 como configurar certificados usados para proteger o proxy reverso, consulte Segurança baseada em certificado X509.
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 as alterações por push para o cluster.
Expor proxy reverso em uma porta pública por meio do Azure Load Balancer
Para abordar o proxy reverso de fora de um cluster do Azure, configure as regras do Balanceador de Carga do Azure e uma Sonda de Integridade do Azure para a porta de proxy reverso. Essas etapas podem ser executadas usando o portal do Azure ou o modelo do Gerenciador de Recursos a qualquer momento depois de criar o cluster.
Aviso
Quando você configura a porta do proxy reverso no Balanceador de Carga, todos os microsserviços no cluster que expõem um ponto de extremidade HTTP são endereçáveis de fora do cluster. Isso significa que microsserviços destinados a serem internos podem ser descobertos por um determinado usuário mal-intencionado. Esta situação apresenta potencialmente vulnerabilidades graves que podem ser exploradas; Por exemplo:
- Um usuário mal-intencionado pode iniciar um ataque de negação de serviço chamando repetidamente um serviço interno que não tenha uma superfície de ataque suficientemente protegida.
- Um usuário mal-intencionado pode entregar pacotes malformados para um serviço interno, resultando em comportamento não intencional.
- Um serviço destinado a ser interno pode retornar informações privadas ou confidenciais que não se destinam a ser expostas a serviços fora do cluster, expondo assim essas informações confidenciais a um usuário mal-intencionado.
Certifique-se de entender completamente e mitigar as possíveis ramificações de segurança para seu cluster e os aplicativos em execução nele, antes de tornar pública a porta de proxy reverso.
Se você quiser expor o proxy reverso publicamente para um cluster autônomo, a maneira como você fizer isso dependerá do sistema que hospeda o cluster e está além do escopo deste artigo. O aviso anterior sobre a exposição pública de proxy reverso, no entanto, ainda se aplica.
Expor o proxy reverso usando o portal do Azure
No portal do Azure, clique no grupo de recursos do cluster e, em seguida, clique no balanceador de carga do cluster.
Para adicionar uma sonda de integridade para a porta de proxy reverso, no painel esquerdo da janela do balanceador de carga, em CONFIGURAÇÕES, clique em Sondas de integridade. Em seguida, clique em Adicionar na parte superior da janela Testes de integridade e insira os detalhes da porta de proxy reverso e clique em OK. Por padrão, a porta de proxy reverso é 19081, a menos que você a tenha alterado quando criou o cluster.
Para adicionar uma regra de Balanceador de Carga 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. Em seguida, clique em Adicionar na parte superior da janela Regras de balanceamento de carga e insira os detalhes da porta de proxy reverso. Certifique-se de definir o valor da porta para a porta na qual deseja que o proxy reverso seja exposto, o valor da porta de back-end para a porta definida quando ativou o proxy reverso e o valor da sonda de integridade para a sonda de integridade configurada na etapa anterior. Defina outros campos conforme apropriado e clique em OK.
Expor o proxy reverso por meio de modelos do Gerenciador de Recursos
O JSON a seguir faz referência ao mesmo modelo usado em Habilitar proxy reverso por meio de modelos do Azure Resource Manager. Consulte essa seção do documento para obter informações sobre como criar um modelo do Gerenciador de Recursos ou exportar um modelo para um cluster existente. As alterações são feitas na seção Microsoft.Network/loadBalancers Resource type.
{
"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 de proxy reverso usando configurações de malha
Você pode personalizar o comportamento do proxy reverso por meio de configurações de malha no modelo do Gerenciador de Recursos para clusters hospedados no Azure ou no arquivo ClusterConfig.json para clusters autônomos. 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 de propriedades do cluster.
Por exemplo, você pode definir o valor de DefaultHttpRequestTimeout para definir o tempo limite de solicitações para o proxy reverso para 180 segundos, como no seguinte JSON:
{
"fabricSettings": [
...
{
"name": "ApplicationGateway/Http",
"parameters": [
{
"name": "DefaultHttpRequestTimeout",
"value": "180"
}
]
}
],
...
}
Nota
O Proxy Reverso tem um limite de 16KB para cabeçalhos e não suporta a alteração do limite para um tamanho maior.
Para obter mais informações sobre como atualizar configurações de malha para clusters do Azure, consulte Personalizar configurações de cluster usando modelos do Gerenciador de Recursos. Para clusters autônomos, consulte Personalizar configurações de cluster para clusters autônomos.
Várias configurações de malha são usadas para ajudar a estabelecer uma comunicação segura entre proxy reverso e serviços. Para obter informações detalhadas sobre essas configurações, consulte Conectar-se a um serviço seguro com o proxy reverso.
Próximos passos
- Configurar o encaminhamento para proteger o serviço HTTP com o proxy reverso
- Para opções de configuração de proxy reverso, consulte a seção ApplicationGateway/Http em Personalizar configurações de cluster do Service Fabric.