Neste tutorial, você aprenderá a usar o serviço de balanceador de carga de aplicativo externo do Google Compute Engine para distribuir o tráfego para servidores da Web dos Serviços de Informações da Internet (IIS, na sigla em inglês) da Microsoft entre diferentes regiões do Compute Engine.
Cenário
É necessário balancear a carga do tráfego para o site www.example.com
.
Você quer garantir que as solicitações recebidas sejam roteadas para a região
mais próxima e que as solicitações possam fazer failover para uma instância
íntegra na próxima região mais próxima, se necessário.
Ao concluir a configuração desse cenário, você terá um balanceador de carga de aplicativo externo com a capacidade de receber solicitações por um endereço IP global e único. Esse endereço IP pode rotear cada solicitação recebida por tipo de conexão, ou seja, HTTP ou HTTPS. Para solicitações HTTPS, o balanceador de carga implementa a criptografia SSL/TLS entre o cliente que envia a solicitação e o balanceador de carga.
O seguinte diagrama ilustra a arquitetura do balanceador de carga:
O balanceador de carga tem vários componentes para garantir o máximo de configurabilidade. Para uma descrição da função de cada componente, consulte a Visão geral do balanceador de carga de aplicativo externo.
- Instâncias de máquina virtual do Compute Engine
- Discos permanentes do Compute Engine
- Imagens da máquina do Windows Server 2012
O custo de execução deste tutorial varia conforme o tempo de execução, número de instâncias, tamanho do disco e tipo de máquina. Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto. Se estiver começando no Google Cloud, talvez esteja qualificado para uma avaliação gratuita.
Este tutorial supõe que você:
- está usando uma máquina Windows;
- criou um projeto do Console do Google Cloud;
- Você instalou a CLI gcloud. Ele é usado para interagir com o Google Cloud;
- executou
gcloud auth login
para autenticar com o Google Cloud; - Você instalou um cliente RDP (Remote Desktop Protocol) da sua escolha. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft. Se você já tiver um cliente RDP instalado, pule esta tarefa.
leu e entendeu a visão geral do balanceador de carga de aplicativo externo;
Definiu o projeto do Cloud como o projeto padrão com que a CLI gcloud interage: Se isso não tiver sido feito, execute o comando a seguir:
PS C:\> gcloud config set --project <project_name>
Configurar as instâncias de back-end
Nesta seção, você criará dois serviços de back-end em diferentes regiões. Cada serviço de back-end inclui duas instâncias de back-end, cada uma executando um servidor da Web Microsoft IIS no Windows Server 2012. Para evitar configurações manuais em cada servidor, crie uma imagem de disco com base em uma instância do servidor e use essa imagem para criar outras instâncias do servidor.
Criar a instância de imagem de origem
Para criar a instância que você usará como imagem de origem:
- Na máquina Windows local, abra o PowerShell.
Crie uma nova instância do Windows Server 2012 na região
us-central1
e adicione as tagsrdp-tag
ewww-tag
à instância. Depois, ative o acesso externo à instância criando regras de firewall que especificam essas tags:PS C:\> gcloud compute instances create src-img ^ --zone us-central1-f --image windows-2012-r2 ^ --tags rdp-tag,www-tag
Após criar a instância de imagem de origem, defina regras de firewall para acesso externo à instância:
Crie uma regra de firewall que permita o acesso externo à porta 3389 em todas as instâncias com a tag
rdp-tag
. Essa regra permite que a instância de imagem de origem e quaisquer instâncias subsequentes que utilizem a tagrdp-tag
fiquem acessíveis para o RDP:PS C:\> gcloud compute firewall-rules create rdp-rule ^ --allow tcp:3389 --source-ranges 0.0.0.0/0 ^ --target-tags rdp-tag
Crie outra regra de firewall que permita o acesso externo à porta 80 em todas as instâncias marcadas com
www-tag
. Essa regra permite o envio e o recebimento de tráfego HTTP na sua instância de imagem de origem e em quaisquer instâncias subsequentes que utilizem a tagwww-tag
:PS C:> gcloud compute firewall-rules create www-rule ^ --allow tcp:80 --source-ranges 0.0.0.0/0 ^ --target-tags www-tag
Configurar a instância de imagem de origem
Em seguida, crie um novo usuário do Windows na instância de imagem de origem e estabeleça uma conexão RDP:
- No navegador da Web, visite a Página de instâncias de VM no console do Google Cloud e clique no nome da instância da imagem de origem (
src-img
). - Clique no botão Definir senha do Windows.
- Na caixa de diálogo Definir nova senha do Windows, adicione seu nome de usuário.
- Clique em Definir para criar a conta de usuário na instância.
- Copie a senha fornecida e feche a caixa de diálogo.
Clique no menu suspenso RDP e selecione a opção Fazer o download do arquivo RDP para fazer o download do arquivo RDP para sua instância.
Use esse arquivo para se conectar à instância usando um cliente RDP. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft.
Depois de estabelecer uma conexão RDP com a instância de imagem de origem, instale o IIS e adicione uma página inicial padrão:
- Na instância de imagem de origem, abra o PowerShell como administrador.
No PowerShell, cole o texto a seguir para instalar os serviços e as dependências do IIS:
PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
Depois que os serviços forem instalados, crie uma nova página inicial em
C:\inetpub\wwwroot
, o diretório da Web padrão do IIS:PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
Verificar se a instância de imagem de origem pode exibir conteúdo
No navegador da Web, acesse a página Instâncias de VMs. Clique no IP externo da instância para verificar se ela está veiculando a página inicial que você criou anteriormente.
Criar uma imagem reutilizável do Windows Server 2012 a partir da instância de imagem de origem
Depois de verificar se a instância de imagem de origem está devidamente configurada e capaz de veicular conteúdo, crie uma imagem de disco reutilizável a partir do disco permanente raiz da instância:
- Na instância de imagem de origem, abra o PowerShell como administrador.
Execute o comando a seguir para preparar o sistema para clonagem:
PS C:> GCESysprep
Quando a operação
GCESysprep
for concluída, você será desconectado automaticamente da sessão RDP.Na máquina local, execute o comando a seguir para excluir a instância de origem e manter o disco permanente raiz:
PS C:> gcloud compute instances delete src-img --keep-disks boot
Depois da exclusão da instância, crie uma imagem a partir do disco permanente raiz que você manteve:
PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f
Criar um modelo de instância usando a imagem de origem
Agora que você criou uma imagem de disco do servidor Windows configurado, use-a como a imagem de origem para um modelo de instância. Depois, configure dois grupos gerenciados de instâncias que usam esse modelo para criar novas instâncias.
Na máquina local, execute o comando a seguir para criar um modelo de instância usando win-be-img
como a imagem de origem e rdp-tag
e www-tag
como as tags de instância:
PS C:\> gcloud compute instance-templates create win-be-tmpl ^
--tags rdp-tag,www-tag ^
--image win-be-img
Criar um grupo de instâncias gerenciado para cada região
Em seguida, crie grupos de instâncias gerenciadas em cada região. Após serem criados, esses grupos se autopreencherão com duas instâncias idênticas baseadas no modelo de instância que você definiu anteriormente. Depois, o balanceador de carga será configurado para tratar esses grupos de instâncias como destinos de back-end.
Para criar os grupos de instância gerenciadas:
Na máquina local, execute o seguinte comando para criar um novo grupo de instâncias gerenciadas na zona
us-central1-f
e para preenchê-lo com duas instâncias idênticas:PS C:> gcloud compute instance-groups managed create us-be-group ^ --base-instance-name us ^ --size 2 ^ --zone us-central1-f ^ --template win-be-tmpl
Faça o mesmo na zona
europe-west1-d
:PS C:\> gcloud compute instance-groups managed create eu-be-group ^ --base-instance-name eu ^ --size 2 ^ --zone europe-west1-d ^ --template win-be-tmpl
Conferir se as instâncias de back-end estão em execução
No navegador da Web, acesse a página Instâncias de VMs. Clique no IP externo de cada back-end para conferir se ele está veiculando a página inicial que você criou anteriormente.
Criar e configurar o serviço de balanceamento de carga
O serviço de balanceamento de carga do Compute Engine é formado por diversos componentes. Nesta seção, você criará esses componentes e fará a conexão entre eles.
Na máquina local, execute o comando a seguir para criar uma nova verificação de integridade. O balanceador de carga usa essa verificação para avaliar a integridade das instâncias de back-end:
PS C:\> gcloud compute http-health-checks create basic-check
Crie um serviço de back-end:
PS C:\> gcloud compute backend-services create be-srv ^ --protocol HTTP --http-health-check basic-check --global-health-checks
Adicione seus grupos de instância como destinos para o serviço de back-end:
PS C:\> gcloud beta compute backend-services add-backend be-srv ^ --instance-group us-be-group --zone us-central1-f PS C:\> gcloud beta compute backend-services add-backend be-srv ^ --instance-group eu-be-group --zone europe-west1-d
Crie um mapa padrão de URLs para direcionar todas as solicitações recebidas para todas as suas instâncias:
PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
Crie um recurso de certificado SSL. O balanceador de carga usa esse recurso para criptografar e descriptografar o tráfego.
Se você já tiver uma chave privada e um certificado SSL de uma autoridade de certificação, é possível usá-los para criar uma nova
SSLCertificate
ao executar o comando abaixo. Caso contrário, crie e use um certificado autoassinado para testes. Para mais informações, consulte Como criar uma chave privada e um certificado.Execute o comando a seguir para criar o recurso de certificado SSL. Substitua
<crt_file_path>
pelo caminho local do certificado e<key_file_path>
pelo caminho da chave privada.PS C:\> gcloud beta compute ssl-certificates create www-cert ^ --certificate
--private-key Crie proxies HTTP e HTTPS de destino para encaminhar solicitações ao mapa de URLs. O proxy é a parte do balanceador de carga em que é armazenado o certificado SSL para o balanceador de carga. Portanto, você também associa o certificado ao proxy nesta etapa:
PS C:> gcloud compute target-http-proxies create http-lb-proxy ^ --url-map lb-map PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^ --url-map lb-map --ssl-certificate www-cert
Para que o balanceador de carga receba tráfego de maneira confiável, é necessário atribuir um endereço IP estático global à regra de encaminhamento global do balanceador de carga. Para criar um recurso de IP estático global, execute o comando a seguir:
PS C:> gcloud compute addresses create lb-ip --global
Anote o endereço IP.
Crie duas regras de encaminhamento globais para lidar com as solicitações HTTP e HTTPS recebidas. Cada regra de encaminhamento enviará tráfego para um dos proxies de destino que você criou, dependendo da especificação de endereço IP, protocolo IP e porta.
Substitua
<lb_ip_addr>
nos seguintes comandos pelo endereço IP estático criado na etapa anterior:PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^ --address <lb_ip_addr> --global ^ --target-http-proxy http-lb-proxy --port-range 80 PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^ --address <lb_ip_addr> --global ^ --target-https-proxy https-lb-proxy --port-range 443
Depois de criar as regras de encaminhamento globais, pode demorar vários minutos para a configuração se propagar. Para verificar o progresso da propagação, é possível monitorar a configuração no Console do Google Cloud ou executar o seguinte comando na máquina local:
PS C:\> gcloud compute backend-services get-health be-srv
Enviar tráfego para os back-ends
Agora que você configurou o serviço de balanceamento de carga, comece a enviar o tráfego para a regra de encaminhamento e veja a dispersão do tráfego para diferentes instâncias.
Para enviar tráfego aos back-ends:
- Abra a página de balanceamento de carga no console do Google Cloud .
- Clique no nome do balanceador de carga.
- Na seção Back-end, verifique a coluna Íntegra para confirmar se as instâncias estão íntegras. Essa informação pode demorar um pouco para ser indicada na tela.
- Quando isso acontecer, copie as informações de IP:Port da seção Front-end e cole-as no navegador.
O navegador exibirá a página de conteúdo padrão.
Restringir o acesso aos back-ends
Após verificar se tudo está funcionando conforme esperado, modifique as regras de firewall para que o tráfego HTTP(S) venha exclusivamente do seu serviço de balanceamento de carga:
Na máquina local, execute o seguinte comando para atualizar a regra de firewall
www-rule
. Este comando restringe o tráfego de todos os intervalos de IP, exceto130.211.0.0/22
e35.191.0.0/16
, que são os intervalos de IP do proxy e da verificação de integridade do balanceador de carga:PS C:\> gcloud compute firewall-rules update www-rule ^ --source-ranges 130.211.0.0/22,35.191.0.0/16 ^ --target-tags www-tag
No navegador da Web, acesse a página Instâncias de VMs.
Clique em cada instância para verificar se ela agora está inacessível.
Simular uma interrupção
Você pode simular a interrupção de uma ou mais instâncias em uma região para observar como a carga será equilibrada entre as instâncias íntegras restantes.
Para impedir que uma instância receba solicitações adicionais:
- Estabeleça uma conexão RDP com a instância.
- Na instância, abra o PowerShell como administrador.
Execute o comando a seguir para criar uma regra de firewall na instância. Este comando bloqueia o tráfego de verificação de integridade do verificador de integridade e impede todas as novas conexões HTTP do balanceador de carga para a instância:
PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22,35.191.0.0/16
Na máquina local, execute o comando a seguir para verificar se agora a instância informa um status
UNHEALTHY
:PS C:\> gcloud compute backend-services get-health be-srv
Depois que a instância começar a informar um status
UNHEALTHY
, envie uma solicitação para o balanceador de carga. Só há a resposta de instâncias íntegras.Após concluir a simulação de uma interrupção, restaure a conectividade da instância excluindo a regra de firewall. Abra o PowerShell como administrador na instância não íntegra e execute o comando a seguir para excluir a regra:
PS C:\> netsh advfirewall firewall delete rule name="Outage Test"
Limpeza
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Excluir seu projeto do Google Cloud
A maneira mais fácil de evitar cobranças é excluir o projeto criado para o tutorial.
Para excluir o projeto:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir as instâncias
Para excluir uma instância do Compute Engine:
- No Console do Google Cloud, acesse a página Instâncias de VMs.
- Marque a caixa de seleção de a instância que você quer excluir.
- Para excluir a instância, clique em Mais ações, clique em Excluir e siga as instruções.
Excluir os discos permanentes
Para excluir um disco do Compute Engine:
- No Console do Google Cloud, acesse a página Discos.
- Marque a caixa de seleção do disco que você quer excluir.
- Para excluir o disco, clique em Excluir.
Próximas etapas
Leia mais sobre o uso do Windows no Compute Engine
Leia a documentação referente a instâncias do Windows no Compute Engine.
Conheça outros tutoriais
Confira o conteúdo de migração de dados do Google Cloud. Confira o Centro de arquitetura do Cloud.