Configure back-ends externos com grupos de pontos finais de rede da Internet
Este documento fornece instruções para configurar back-ends externos para a Cloud Service Mesh através de grupos de pontos finais de rede (NEGs) da Internet, que requerem um nome de domínio totalmente qualificado. Este documento destina-se a utilizadores que têm um nível de familiaridade intermédio a avançado com o seguinte:
Este guia de configuração fornece instruções básicas para o seguinte:
- Configurar a malha de serviços na nuvem para usar um NEG de Internet e TLS não autenticado para tráfego de saída
- Encaminhar tráfego para um serviço do Cloud Run a partir da sua malha de serviços
Antes de começar
Reveja a vista geral da rede de serviços na nuvem com grupos de pontos finais da rede da Internet.
Para efeitos deste guia, as configurações de exemplo pressupõem o seguinte:
- Todos os recursos relevantes do Compute Engine, como proxies intermédios, recursos do Cloud Service Mesh, zonas do Cloud DNS e conetividade híbrida, estão anexados à rede da nuvem virtual privada (VPC) predefinida.
- O serviço
example.com:443
está a ser executado na sua infraestrutura no local. O domínioexample.com
é publicado por três pontos finais:10.0.0.100
,10.0.0.101
e10.0.0.102
. Existem rotas que garantem a conetividade dos proxies do Envoy a estes pontos finais remotos.
A implementação resultante é semelhante à seguinte.
Encaminhamento de tráfego com um NEG de Internet e TLS com SNI
Depois de configurar a malha de serviços na nuvem com um NEG da Internet através do FQDN e do TLS para o tráfego de saída, a implementação de exemplo comporta-se conforme ilustrado no diagrama e na descrição do tráfego seguintes.
Os passos na legenda seguinte correspondem à numeração no diagrama anterior.
Passo | Descrição |
---|---|
0 | O Envoy recebe a configuração do back-end FQDN do Cloud Service Mesh através do xDS. |
0 | O Envoy, em execução na VM, consulta continuamente o DNS para o FQDN configurado. |
1 | A aplicação do utilizador inicia um pedido. |
2 | Parâmetros do pedido. |
3 | O proxy Envoy interceta o pedido. O exemplo pressupõe que está a usar 0.0.0.0 como o endereço IP virtual (VIP) da regra de encaminhamento. Quando 0.0.0.0 é o VIP, o Envoy interceta todos os pedidos. O encaminhamento de pedidos baseia-se apenas em parâmetros da camada 7, independentemente do endereço IP de destino no pedido original gerado pela aplicação. |
4 | O Envoy seleciona um ponto final remoto em bom estado e faz um handshake TLS com o SNI obtido a partir da política TLS do cliente. |
5 | O Envoy encaminha o pedido para o ponto final remoto. |
Não é apresentado no diagrama, mas, se as verificações de funcionamento estiverem configuradas, o Envoy verifica continuamente o funcionamento dos pontos finais remotos e encaminha pedidos apenas para pontos finais em bom estado.
Configure a conetividade híbrida
Este documento também pressupõe que a conetividade híbrida já está estabelecida:
- A conetividade híbrida entre a rede VPC e os serviços nas instalações ou uma nuvem pública de terceiros é estabelecida com o Cloud VPN ou o Cloud Interconnect.
- As regras de firewall e as rotas da VPC estão configuradas corretamente para estabelecer acessibilidade bidirecional do Envoy aos pontos finais do serviço privado e, opcionalmente, a um servidor DNS no local.
- Para um cenário de comutação por falha de HA regional bem-sucedido, o encaminhamento dinâmico global está ativado. Para mais detalhes, consulte o modo de planeamento de itinerários dinâmico.
Configure a configuração do Cloud DNS
Use os seguintes comandos para configurar uma zona privada do Cloud DNS para o domínio (FQDN) example.com
que tem registos A
a apontar para os pontos finais 10.0.0.100
, 10.0.0.101
, 10.0.0.102
e 10.0.0.103
.
gcloud
- Crie uma zona privada gerida por DNS e anexe-a à rede predefinida:
gcloud dns managed-zones create example-zone \ --description=test \ --dns-name=example.com \ --networks=default \ --visibility=private
- Adicione registos de DNS à zona privada:
gcloud dns record-sets transaction start \ --zone=example-zone gcloud dns record-sets transaction add 10.0.0.100 10.0.0.101 10.0.0.102 10.0.0.103 \ --name=example.com \ --ttl=300 \ --type=A \ --zone=example-zone gcloud dns record-sets transaction execute \ --zone=example-zone
Configure o Cloud Service Mesh com um NEG FQDN da Internet
Nesta secção, configura a malha de serviços na nuvem com um FQDN de Internet NEG.
Crie o NEG, a verificação de funcionamento e o serviço de back-end
gcloud
- Crie o NEG da Internet:
gcloud compute network-endpoint-groups create on-prem-service-a-neg \ --global \ --network-endpoint-type INTERNET_FQDN_PORT
- Adicione o ponto final
FQDN:Port
à NEG da Internet:
gcloud compute network-endpoint-groups update on-prem-service-a-neg \ --global \ --add-endpoint=fqdn=example.com,port=443
- Crie uma verificação de funcionamento global:
gcloud compute health-checks create http service-a-http-health-check \ --global
- Crie um serviço de back-end global denominado
on-prem-service-a
e associe-lhe a verificação de funcionamento:
gcloud compute backend-services create on-prem-service-a \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --health-checks service-a-http-health-check
- Adicione o NEG denominado
on-prem-service-a-neg
como back-end do serviço de back-end:
gcloud compute backend-services add-backend on-prem-service-a \ --global \ --global-network-endpoint-group \ --network-endpoint-group on-prem-service-a-neg
Crie um mapa de regras de encaminhamento
O mapa de URLs, o proxy HTTP de destino e a regra de encaminhamento constituem um mapa de regras de encaminhamento, que fornece informações de encaminhamento para o tráfego na sua malha.
Este mapa de URLs contém uma regra que encaminha todo o tráfego HTTP para
on-prem-service-a
.
gcloud
- Crie o mapa de URLs:
gcloud compute url-maps create td-url-map \ --default-service on-prem-service-a
- Crie o proxy HTTP de destino e associe o mapa de URLs ao proxy de destino:
gcloud compute target-http-proxies create td-proxy \ --url-map td-url-map
- Crie a regra de encaminhamento global usando o endereço IP
0.0.0.0
. Este é um endereço IP especial que faz com que o seu plano de dados ignore o endereço IP de destino e encaminhe os pedidos com base apenas nos parâmetros HTTP do pedido.
gcloud compute forwarding-rules create td-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 \ --target-http-proxy=td-proxy \ --ports=443 \ --network=default
Configure o TLS e o HTTPS não autenticados
Opcionalmente, se quiser configurar HTTPS não autenticado entre os seus proxies Envoy e os seus serviços no local, use estas instruções. Estas instruções também demonstram como configurar o SNI no handshake do TLS.
Uma política TLS do cliente especifica a identidade do cliente e o mecanismo de autenticação quando um cliente envia pedidos de saída para um serviço específico. Uma política TLS do cliente é anexada a um recurso de serviço de back-end através do campo securitySettings
.
gcloud
- Crie e importe a política de TLS do cliente; defina o SNI para o FQDN que configurou no NEG:
cat << EOF > client_unauthenticated_tls_policy.yaml name: "client_unauthenticated_tls_policy" sni: "example.com" EOF gcloud beta network-security client-tls-policies import client_unauthenticated_tls_policy \ --source=client_unauthenticated_tls_policy.yaml \ --location=global
- Se configurou uma verificação de funcionamento
HTTP
com o serviço de back-end na secção anterior, desassocie a verificação de funcionamento do serviço de back-end:
gcloud compute backend-services update on-prem-service-a \ --global \ --no-health-checks
- Crie uma verificação de funcionamento
HTTPS
:
gcloud compute health-checks create https service-a-https-health-check \ --global
- Anexe a política de TLS do cliente ao serviço de back-end que criou anteriormente. Isto aplica o HTTPS não autenticado a todos os pedidos de saída do cliente para este serviço de back-end:
gcloud compute backend-services export on-prem-service-a \ --global \ --destination=on-prem-service-a.yaml cat << EOF >> on-prem-service-a.yaml securitySettings: clientTlsPolicy: projects/${PROJECT_ID}/locations/global/clientTlsPolicies/client_unauthenticated_tls_policy healthChecks: - projects/${PROJECT_ID}/global/healthChecks/service-a-https-health-check EOF gcloud compute backend-services import on-prem-service-a \ --global \ --source=on-prem-service-a.yaml
Pode usar NEGs FQDN da Internet para encaminhar tráfego para qualquer serviço acessível através de FQDN, por exemplo, serviços externos e internos resolvidos por DNS ou serviços do Cloud Run.
Migre de um NEG IP:Port
para um NEG FQDN:Port
NON_GCP_PRIVATE_IP_PORT
O NEG requer que programe os pontos finais de serviço no NEG como pares IP:PORT
estáticos, enquanto o INTERNET_FQDN_NEG
permite que os pontos finais sejam resolvidos dinamicamente através do DNS. Pode migrar para o NEG da Internet
configurando registos DNS para os seus pontos finais de serviço no local e configurando
a malha de serviços na nuvem, conforme descrito nos passos seguintes:
- Configure os registos DNS para o seu FQDN.
- Crie um NEG de Internet com o FQDN.
- Crie um novo serviço de back-end com o NEG da Internet que criou no passo 2 como back-end. Associe a mesma verificação de estado de funcionamento que usou com o serviço de back-end do NEG de conetividade híbrida ao novo serviço de back-end. Verifique se os novos pontos finais remotos estão em bom estado.
- Atualize o mapa de regras de encaminhamento para fazer referência ao novo serviço de back-end, substituindo o back-end antigo que inclui o NEG de conetividade híbrida.
- Se quiser evitar o tempo de inatividade durante a migração em direto numa implementação de produção, pode usar o tráfego baseado no peso. Inicialmente, configure o novo serviço de back-end para receber apenas uma pequena percentagem do tráfego, por exemplo, 5%. Use
as instruções para configurar a divisão do tráfego.
- Verifique se os novos pontos finais remotos estão a publicar tráfego corretamente.
- Se estiver a usar a divisão de tráfego baseada no peso, configure o novo serviço de back-end para receber 100% do tráfego. Este passo esgota o serviço de back-end antigo.
- Depois de verificar que os novos back-ends estão a publicar tráfego sem problemas, elimine o serviço de back-end antigo.
Resolução de problemas
Para resolver problemas de implementação, siga as instruções nesta secção. Se os seus problemas não forem resolvidos com estas informações, consulte o artigo Resolução de problemas de implementações que usam o Envoy.
Um ponto final nas instalações não está a receber tráfego
Se um ponto final não estiver a receber tráfego, certifique-se de que está a passar nas verificações de estado e que as consultas DNS do cliente Envoy devolvem o respetivo endereço IP de forma consistente.
O Envoy usa o modo strict_dns
para gerir as ligações. Faz o equilíbrio de carga do tráfego em todos os pontos finais resolvidos que estão em bom estado. A ordem pela qual os pontos finais são resolvidos não importa no modo strict_dns
, mas o Envoy esgota o tráfego para qualquer ponto final que já não esteja presente na lista de endereços IP devolvidos.
O cabeçalho do anfitrião HTTP não corresponde ao FQDN quando o pedido chega ao meu servidor no local
Considere um exemplo em que o domínio example.com
é resolvido para 10.0.0.1
, que é o endereço IP da regra de encaminhamento, e o domínio altostrat.com
é resolvido para 10.0.0.100
, que é o ponto final do seu serviço no local. Quer enviar tráfego para o domínio altostrat.com
, que está configurado no seu GNE.
É possível que a aplicação no Compute Engine ou GKE defina o cabeçalho HTTP Host
como example.com
(Host:
example.com
), que é transmitido para o ponto final no local. Se estiver a usar HTTPS, o Envoy define o SNI como altostrat.com
durante o handshake TLS.
O Envoy obtém o SNI do recurso de política de TLS do cliente.
Se este conflito estiver a causar problemas no processamento ou no encaminhamento do pedido quando este atinge o ponto final no local, como solução alternativa, pode reescrever o cabeçalho Host
para altostrat.com
(Host: altostrat.com
). Isto pode ser feito no Cloud Service Mesh através da reescrita de URLs ou no ponto final remoto, se tiver capacidade de reescrita de cabeçalhos.
Outra solução alternativa menos complexa é definir o cabeçalho Host
como altostrat.com
(Host: altostrat.com
) e usar o endereço especial 0.0.0.0
como o endereço IP da regra de encaminhamento.
O Envoy devolve muitos erros 5xx
Se o Envy devolver um número excessivo de erros 5xx, faça o seguinte:
- Verifique os registos do Envoy para distinguir se a resposta está a ser enviada pelo back-end (back-end no local) e qual o motivo do erro 5xx.
- Certifique-se de que as consultas DNS são bem-sucedidas e que não existem erros
SERVFAIL
ouNXDOMAIN
. - Certifique-se de que todos os pontos finais remotos estão a passar nas verificações de funcionamento.
- Se as verificações de estado não estiverem configuradas, certifique-se de que todos os pontos finais estão acessíveis a partir do Envoy. Verifique as regras e as rotas da firewall no lado do Google Cloud , bem como no lado no local.
Não é possível aceder a serviços externos através da Internet pública a partir da malha de serviços
Pode enviar tráfego para serviços localizados na Internet pública através de back-ends de FQDN no Cloud Service Mesh. Primeiro, tem de estabelecer a conetividade
à Internet entre os clientes do Envoy e o serviço externo. Se estiver a receber um erro 502
durante as ligações ao serviço externo, faça o seguinte:
- Certifique-se de que tem as rotas corretas, especificamente a rota predefinida
0.0.0.0/0
, e as regras de firewall configuradas. - Certifique-se de que as consultas DNS são bem-sucedidas e que não existem erros
SERVFAIL
ouNXDOMAIN
. - Se o proxy Envoy estiver em execução numa VM do Compute Engine que não tenha um endereço IP externo ou num cluster privado do GKE, tem de configurar o Cloud NAT ou outro meio para estabelecer conetividade com a Internet de saída.
Se os erros persistirem ou se estiver a receber outros erros 5xx, verifique os registos do Envoy para restringir a origem dos erros.
Não é possível aceder aos serviços sem servidor a partir da malha de serviços
Pode enviar tráfego para serviços sem servidor (Cloud Run, funções do Cloud Run e App Engine) através de back-ends FQDN no Cloud Service Mesh. Se o proxy Envoy estiver em execução numa VM do Compute Engine que não tenha um endereço IP externo ou num cluster privado do GKE, tem de configurar o acesso privado à Google na sub-rede para poder aceder às APIs e aos serviços Google.
O que se segue?
- Para saber mais sobre as políticas de TLS do cliente, consulte a segurança dos serviços do Cloud Service Mesh e a API Network Security.