Serviços Edge de rede para implantações em vários ambientes

O Google oferece uma variedade de serviços Edge de rede que podem aumentar os recursos e a segurança dos serviços baseados fora do Google Cloud (serviços locais e de várias nuvens), por exemplo, em um data center local ou em outra nuvem pública. Esses serviços Edge de rede permitem que você:

Exemplo de serviços Edge de rede (clique para ampliar)
Exemplo de serviços Edge de rede (clique para ampliar)

Para levar esses benefícios aos seus serviços particulares, locais ou em várias nuvens, implante um balanceador de carga HTTP(S) externo para receber tráfego da Internet pública. O balanceador de carga HTTP(S) encaminha o tráfego para um proxy intermediário configurado pelo Traffic Director que encaminha o tráfego para seu ambiente local ou para uma nuvem que não seja do Google Cloud usando o Cloud VPN ou o Cloud Interconnect.

Neste tutorial, orientamos você em um exemplo completo que usa o Google Cloud Armor na extremidade do Google para permitir seletivamente que os clientes acessem um serviço local de modo privado. Os clientes têm o acesso permitido com base no endereço IP deles.

Conclua as seguintes tarefas:

  1. Implante o Envoy como um proxy intermediário em um grupo de instâncias gerenciadas. Esse proxy Envoy será conectado automaticamente ao Traffic Director.
  2. Como criar uma VM particular simulada no local. Em um exemplo real, você provavelmente já tem uma VM no local.
  3. Como configurar o Traffic Director para rotear todas as solicitações que chegam ao proxy intermediário para a VM simulada no local
  4. Criar um balanceador de carga HTTP(S) externo para receber tráfego da Internet pública e encaminhá-lo ao proxy intermediário
  5. Como anexar uma política de segurança do Google Cloud Armor ao balanceador de carga HTTP(S) externo

Depois de concluir essas tarefas, você tem a opção de explorar outros serviços Edge e recursos avançados de gerenciamento de tráfego.

Pré-requisitos

Antes de configurar o proxy intermediário, conclua as seguintes tarefas:

  • Consulte Como se preparar para o Traffic Director e conclua todas as tarefas de preparação.
  • Garanta que os endpoints locais particulares possam ser acessados de dentro da rede VPC do Google Cloud por meio do Cloud VPN ou Cloud Interconnect. O exemplo usado neste guia de soluções apenas direciona o tráfego para um endpoint no Google Cloud. Por isso, você não precisa configurar a conectividade híbrida para acompanhar. Isso seria necessário em um cenário de implantação real.
  • Verifique se os intervalos de CIDR de sub-rede VPC não entram em conflito com os intervalos de CIDR remoto. As rotas de sub-rede são priorizadas em relação à conectividade remota quando os endereços IP se sobrepõem.
  • Para esta demonstração, consiga as permissões necessárias para criar e atualizar as políticas de segurança do Google Cloud Armor. As permissões podem variar se você quiser usar um serviço diferente, como o Cloud CDN.

Como implantar o proxy do meio em VMs do Compute Engine

Nesta seção, descrevemos como implantar o Envoy como um proxy intermediário no Compute Engine para receber tráfego do balanceador de carga externo e encaminhá-lo para seu destino remoto.

Como criar o modelo de instância para o proxy do meio

Um modelo de instância especifica a configuração das VMs em um grupo de instâncias gerenciadas. O modelo a seguir pode ser usado para criar instâncias de VM com um proxy Envoy conectado ao Traffic Director:

 gcloud compute instance-templates create td-middle-proxy \
    --service-proxy=enabled \
    --tags=allow-hc

Para personalizar a implantação do Envoy, como ao especificar o nome da rede, definir um caminho de registro e/ou ativar o rastreamento, consulte o Guia de opção de implantação automatizada do Envoy.

Como criar o grupo de instâncias gerenciadas para o proxy do meio

Crie o grupo gerenciado de instâncias com base no modelo acima. Neste exemplo, é possível manter o tamanho do grupo de instâncias de 1 para implantar uma única instância. Para uso em produção, ative o escalonamento automático, por exemplo, com base na utilização da CPU. Isso evita a criação de um gargalo se o proxy intermediário precisar lidar com muito tráfego.

gcloud compute instance-groups managed create td-middle-proxy-us-central1-a \
    --zone us-central1-a \
    --template=td-middle-proxy \
    --size=1

Neste exemplo, criamos o grupo de instâncias gerenciadas, contendo instâncias de VM que executam o Envoy, em us-central1-a. Posteriormente neste guia, você criará um balanceador de carga externo para lidar com o tráfego público da Internet dos seus clientes. Como o balanceador de carga externo pode direcionar automaticamente o tráfego para a região mais próxima dos seus clientes e para o grupo de instâncias gerenciadas dentro dessa região, convém criar vários grupos de instâncias gerenciadas. Uma lista completa das regiões e zonas disponíveis do Google Cloud pode ser encontrada neste link.

Como implantar o serviço local simulado

Nesta seção, descrevemos a implantação de um grupo de endpoints de rede (NEG, na sigla em inglês) de conectividade híbrida. Em uma implantação de produção, esse NEG conteria um endpoint (IP:port) resolvido para o servidor local. Neste exemplo, você acabou de criar uma VM do Compute Engine que possa ser acessada em uma IP:port. Essa VM atua como seu servidor local simulado.

Como criar a VM local simulada

Implantar uma única instância de VM para simular um servidor local particular.

gcloud compute instances create on-prem-vm \
  --zone us-central1-a \
  --metadata startup-script='#! /bin/bash
## Installs apache and a custom homepage
sudo su -
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello world from on-premises!</h1></body></html>
EOF'

Identifique e armazene o endereço IP interno para futuras configurações e verificações. O servidor nesta VM detecta solicitações de entrada na porta 80.

ON_PREM_IP=`gcloud compute instances describe on-prem-vm --zone=us-central1-a --format="value(networkInterfaces.networkIP)" | sed "s/['\[\]]*//g"`

Como criar o grupo de endpoints de rede

Crie o grupo de endpoints da rede (NEG) para esta configuração de demonstração especificando o tipo de endpoint da rede non-gcp-private-ip-port. Adicione o endereço IP e a porta da sua VM simulada no local como um endpoint para esse NEG. Após a etapa anterior, o endereço IP é armazenado na variável de ambiente ON_PREM_IP.

Primeiro, crie o NEG:

gcloud compute network-endpoint-groups create td-on-prem-neg \
    --network-endpoint-type non-gcp-private-ip-port \
    --zone us-central1-a

Em seguida, adicione o endereço IP:porta a seu NEG recém-criado.

gcloud compute network-endpoint-groups update td-on-prem-neg \
  --zone=us-central1-a \
  --add-endpoint="ip=$ON_PREM_IP,port=80"

Como configurar o Traffic Director com componentes de balanceamento de carga do Google Cloud

Nesta seção, mostramos como configurar o Traffic Director e permitir que seu proxy intermediário encaminhe o tráfego para seu serviço privado local. Você configura os seguintes componentes:

  • Uma verificação de integridade Essa verificação de integridade se comporta de maneira um pouco diferente das verificações configuradas para outros tipos de NEG, conforme descrito abaixo.
  • Um serviço de back-end Para mais informações sobre serviços de back-end, consulte Visão geral dos serviços de back-end.
  • Um mapa de regras de roteamento Isso inclui a criação de uma regra de encaminhamento, um proxy de destino e um mapa de URL. Para mais informações, leia Como usar regras de encaminhamento e Como usar mapas de URL.

Como criar a verificação de integridade

As verificações de integridade verificam se os endpoints estão íntegros e podem receber solicitações. A verificação de integridade para esse tipo de NEG depende do mecanismo de verificação de integridade distribuída do Envoy, enquanto outros tipos de NEG usam o sistema centralizado de verificação de integridade do Google Cloud.

gcloud compute health-checks create http td-on-prem-health-check

Como criar o serviço de back-end

Crie um serviço de back-end com o esquema de balanceamento de carga INTERNAL_SELF_MANAGED a ser usado com o Traffic Director. Ao criar esse serviço de back-end, especifique a verificação de integridade recém-criada.

gcloud compute backend-services create td-on-prem-backend-service \
    --global \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED \
    --health-checks=td-on-prem-health-check

Em seguida, adicione o NEG criado anteriormente como o back-end desse serviço de back-end.

gcloud compute backend-services add-backend td-on-prem-backend-service \
    --global \
    --network-endpoint-group=td-on-prem-neg \
    --network-endpoint-group-zone=us-central1-a \
    --balancing-mode=RATE \
    --max-rate-per-endpoint=5

Como criar o mapa de regras de roteamento

O mapa de regras de roteamento define como o Traffic Director encaminha o tráfego para o serviço de back-end.

  1. Crie um mapa de URLs que use o serviço de back-end definido acima.

    gcloud compute url-maps create td-hybrid-url-map \
      --default-service td-on-prem-backend-service
    
  2. Crie um arquivo chamado target_proxy.yaml com o conteúdo a seguir.

    name: td-hybrid-proxy
    proxyBind: true
    urlMap: global/urlMaps/td-hybrid-url-map
    
  3. Use o comando import para criar o proxy HTTP de destino. Para mais informações, consulte Proxies de destino para o Traffic Director.

    gcloud compute target-http-proxies import td-hybrid-proxy \
       --source target_proxy.yaml
    
  4. Crie uma regra de encaminhamento que faça referência a esse proxy HTTP de destino. Defina o endereço IP da regra de encaminhamento como 0.0.0.0. Definir o endereço da regra como 0.0.0.0 encaminha o tráfego com base na porta de entrada, no nome do host HTTP e nas informações do caminho configuradas no mapa de URL. O endereço IP especificado na solicitação HTTP é ignorado.

    gcloud compute forwarding-rules create td-hybrid-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=0.0.0.0 \
       --target-http-proxy=td-hybrid-proxy \
       --ports=8080 \
       --network=default
    

Como verificar se o proxy do meio pode encaminhar solicitações para o serviço local simulado

O Traffic Director agora está configurado para rotear o tráfego por meio do proxy intermediário para o serviço particular local simulado. É possível verificar essa configuração criando uma VM de cliente de teste, fazendo login nela e enviando uma solicitação ao proxy intermediário que está executando o Envoy. Após a verificação, exclua a VM do cliente de teste.

Primeiro, consiga o endereço IP do proxy do meio. Você só precisa dessas informações para a etapa de verificação:

gcloud compute instances list

Escreva ou anote o endereço IP da instância no grupo de instâncias gerenciadas td-middle-proxy-us-central1-a.

Em seguida, crie uma instância de cliente de teste:

gcloud compute instances create test-client --zone us-central1-a

Use ssh para fazer login no cliente de teste:

gcloud compute ssh test-client --zone us-central1-a

Por fim, envie uma solicitação para a VM do proxy intermediário, substituindo o endereço IP informado acima por MIDDLE_PROXY_IP:

curl $MIDDLE_PROXY_IP:8080

Você verá a resposta a seguir:

Hello world from on-premises!

Saia da VM do cliente de teste. Depois de sair, é possível excluir a VM:

gcloud compute instances delete test-client \
  --zone us-central1-a

Como implantar o balanceador de carga HTTP externo

Nesta seção, você implantará um balanceador de carga HTTP(S) externo que envia tráfego de entrada para o proxy intermediário. Esta é uma configuração do balanceador de carga HTTP(S) externo padrão.

Reservar um endereço IP externo

Crie um endereço IP externo estático global (external-lb-vip) para o qual os clientes externos enviarão tráfego. É possível recuperá-lo durante a etapa de verificação posteriormente neste guia.

gcloud compute addresses create external-lb-vip \
    --ip-version=IPV4 \
    --global

Como configurar o balanceador de carga HTTP externo

Configurar o balanceador de carga externo para rotear o tráfego de clientes da Internet para seu proxy intermediário já configurado.

  1. Crie uma verificação de integridade usada para determinar se o grupo de instâncias gerenciadas que executa o proxy do meio é íntegro e pode receber tráfego.

       gcloud compute health-checks create tcp tcp-basic-check \
            --port 8080
    
  2. Crie uma regra de firewall para permitir verificações de integridade. Observe que a tag allow-hc será reutilizada aqui para aplicar a regra de firewall às VMs de proxy do meio.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --network default \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags allow-hc \
      --rules tcp
    
  3. Crie um serviço de back-end.

       gcloud compute backend-services create td-middle-proxy-backend-service \
            --protocol HTTP \
            --health-checks tcp-basic-check \
            --global
    
  4. Adicione o grupo de instâncias gerenciadas do proxy intermediário como back-end a esse serviço de back-end.

       gcloud compute backend-services add-backend td-middle-proxy-backend-service \
            --instance-group=td-middle-proxy-us-central1-a \
            --instance-group-zone=us-central1-a \
            --global
    
  5. Crie uma mapa de URL para encaminhar as solicitações recebidas para o proxy intermediário como o serviço de back-end padrão.

       gcloud compute url-maps create lb-map-http \
            --default-service td-middle-proxy-backend-service
    
  6. Crie um proxy HTTP de destino para que as solicitações à regra de encaminhamento VIP do balanceador de carga externo sejam processadas de acordo com o mapa de URL.

     gcloud compute target-http-proxies create http-lb-proxy \
            --url-map lb-map-http
    
  7. Crie uma regra de encaminhamento global para encaminhar as solicitações recebidas para o proxy HTTP de destino.

       gcloud compute forwarding-rules create http-forwarding-rule \
            --address=external-lb-vip\
            --global \
            --load-balancing-scheme=EXTERNAL \
            --target-http-proxy=http-lb-proxy \
            --ports=80
    

Como definir a porta nomeada do grupo de instâncias gerenciadas

Defina uma porta nomeada para o grupo de instâncias a fim de permitir que o proxy intermediário receba tráfego HTTP do balanceador de carga externo.

gcloud compute instance-groups managed set-named-ports td-middle-proxy-us-central1-a \
    --named-ports http:8080 \
    --zone us-central1-a

Como verificar a configuração do balanceador de carga HTTP externo

Nesta etapa, verifique se o balanceador de carga externo está configurado corretamente. Será possível enviar uma solicitação para o VIP do balanceador de carga e receber uma resposta da VM simulada no local.

PUBLIC_VIP=`gcloud compute addresses describe external-lb-vip \
    --format="get(address)" \
    --global`

Emita uma solicitação curl para o endereço IP público e verifique se você recebe a mensagem Hello world.

curl $PUBLIC_VIP

A saída a seguir será exibida:

Hello world from on-premises!

Como ativar o Google Cloud Armor

Configurar as políticas de segurança do Google Cloud Armor para permitir apenas o acesso ao seu serviço a partir de CLIENT_IP_RANGE, que precisa incluir o endereço IP público do dispositivo cliente com o qual você pretende testar; por exemplo, "192.0.2.0/24". Essas políticas são aplicadas no serviço de back-end do balanceador de carga externo (neste exemplo, td-hybrid-backend-service apontando para o proxy intermediário). Para mais informações sobre as permissões necessárias para definir essas regras, consulte Como configurar políticas de segurança do Google Cloud Armor.

  1. Crie a política de segurança do Google Cloud Armor.

    gcloud compute security-policies create external-clients-policy \
        --description "policy for external clients"
    
  2. Atualize a regra padrão da política de segurança para negar todo o tráfego.

    gcloud compute security-policies rules update 2147483647 \
        --security-policy external-clients-policy \
        --action "deny-404"
    
  3. Adicione uma regra de prioridade mais alta para permitir o tráfego de um intervalo de IP específico.

    gcloud compute security-policies rules create 1000 \
        --security-policy external-clients-policy \
        --description "allow traffic from CLIENT_IP_RANGE" \
        --src-ip-ranges "CLIENT_IP_RANGE" \
        --action "allow"
    
  4. Anexe as políticas de segurança do Google Cloud Armor ao seu serviço de back-end.

    gcloud compute backend-services update td-middle-proxy-backend-service \
        --security-policy external-clients-policy
    

Verificação final

Emita uma solicitação curl para o endereço IP virtual público do balanceador de carga HTTP externo. Você também receberá a resposta esperada se o endereço IP do dispositivo cliente estiver dentro do <var>CLIENT_IP_RANGE</var> permitido especificado acima.

curl $PUBLIC_VIP

A saída a seguir será exibida:

Hello world from on-premises!

Emita a mesma solicitação curl de um dispositivo cliente diferente cujo endereço IP esteja fora de CLIENT_IP_RANGE ou simplesmente atualizar sua regra de política de segurança para não incluir mais o endereço IP do cliente. Agora você receberá um erro 404 Not Found.

Solução de problemas

Meu serviço local não é acessível por meio do endereço IP do balanceador de carga HTTP(S) externo global

Se o serviço local já estiver acessível nas VMs do Google Cloud que executam o Envoy, siga estas etapas para resolver os problemas na configuração.

Verifique se o MIG do GCP Envoy está marcado como íntegro. No Console do Google Cloud, acesse Serviços de rede > Balanceamento de carga e clique em url-map lb-map-http para visualizar os detalhes. Você verá 1/1 da instância em td-middle-proxy-us-central1-a.

Se não estiver íntegra, verifique se uma regra de firewall foi configurada para permitir o tráfego de verificação de integridade de entrada para as VMs do Google Cloud que estão executando Envoy:

gcloud compute firewall-rules describe fw-allow-health-check

Você verá a resposta a seguir:

allowed:
- IPProtocol: tcp
...
direction: INGRESS
disabled: false
...
...
sourceRanges:
- 130.211.0.0/22
- 35.191.0.0/16
targetTags:
- allow-hc

A seguir