Configurar a pilha dupla IPv6 para o Cloud Service Mesh
Esta página mostra como balancear o tráfego IPv6 na malha de serviços do Cloud usando balanceadores de carga baseados em proxy do Traffic Director (TD), além de como migrar de implantações baseadas em IPv4 para implantações de pilha dupla (IPv4 e IPv6) e como migrar de pilha dupla para IPv4.
Em implantações de pilha dupla, você tem a opção de indicar se o IPv4 ou o IPv6 é enviado para o back-end do serviço. O proxy ou o cliente gRPC testa cada caminho de dados na ordem de preferência e seleciona aquele que está alinhado com sua preferência e com o que é compatível.
Os recursos de pilha dupla são compatíveis com o gRPC 1.66.1 e versões mais recentes para C++ e Python, 1.12 e versões mais recentes para Node e 1.71 e versões mais recentes para Go. O Java não tem suporte no momento.
Versões do gRPC sem suporte à pilha dupla (por exemplo, O Go e as versões anteriores à 1.66 em outros idiomas vão usar apenas o primeiro endereço de cada endpoint, na ordem enviada pelo TD.
Antes de começar
Este guia pressupõe que você já:
- Configure as APIs de roteamento de serviço com o Envoy e cargas de trabalho sem proxy.
- Concluiu as etapas na seção Continuar o processo de configuração do guia de integração.
Configurar o serviço de back-end IPv6
Nesta seção, você configura o seguinte:
- Dois grupos de back-end (grupos de instâncias, grupos de instâncias gerenciadas ou grupos de endpoints de rede), um em cada uma das duas zonas diferentes na mesma região.
- Duas instâncias de VM em cada grupo de back-end.
- Uma verificação de integridade para verificar a integridade da instância.
- Regras de firewall que permitem que as verificações de integridade acessem os back-ends.
- Um serviço de back-end
- O serviço de back-end para incluir os dois grupos de back-end configurados.
Configurar uma sub-rede para os back-ends
O comando a seguir aloca intervalos de endereços internos para IPv4 e IPv6 e permite que as VMs na sub-rede sejam alocadas com qualquer tipo de endereço.
Somente sub-redes de modo personalizado são compatíveis. Não há suporte para o modo automático. Você pode mudar para o modo personalizado em toda a rede VPC e preencher os back-ends IPv6 (MIGs ou NEGs).
Crie uma rede de pilha dupla:
gcloud compute networks create NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
Crie uma sub-rede de pilha dupla para VMs de back-end:
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --range=PRIMARY_IPv4_RANGE \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=IPv6_ACCESS_TYPE \ --region=REGION
Substitua:
- SUBNET: um nome para a nova sub-rede.
- NETWORK: o nome da rede VPC que conterá a nova sub-rede.
- PRIMARY_IPv4_RANGE: o intervalo IPv4 principal da nova sub-rede, em notação CIDR. Para mais informações, consulte Intervalos de sub-rede IPv4.
- IPv6_ACCESS_TYPE: o tipo de acesso IPv6.
Pode ser
EXTERNAL
ouINTERNAL
. - REGION: a Google Cloud região em que a nova sub-rede será criada.
Configurar back-ends
Você pode usar grupos gerenciados de instâncias (MIGs), grupos não gerenciados de instâncias ou grupos de endpoints de rede (NEGs).
MIG
Crie um grupo gerenciado de instâncias com
dual-stack-gateway-template
:gcloud alpha compute instance-templates create dual-stack-gateway-template \ --region=REGION \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=dual-stack-http-server \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_IPV6 \ --service-proxy=enabled,scope=gateway-proxy
Crie um grupo de instâncias gerenciadas de proxy de gateway:
gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \ --zone=ZONE \ --size=1 \ --template=dual-stack-gateway-template
Crie um grupo de instâncias gerenciado de back-end:
gcloud compute instance-templates create dual-stack-backend-template \ --region=REGION \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=dual-stack-http-server \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_IPV6 \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`dual-stack-server\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
gcloud compute instance-groups managed create dual-stack-ZONE-backend-mig \ --zone=ZONE \ --size=1 \ --template=dual-stack-backend-template
Adicione uma porta nomeada ao grupo de instâncias gerenciadas:
gcloud compute instance-groups set-named-ports us-ig-1 \ --named-ports http:80 \ --zone ZONE \ gcloud compute instance-groups set-named-ports us-ig-2 \ --named-ports http:80 \ --zone ZONE
Usamos verificações de integridade separadas para balanceamento de carga e recuperação automática. As verificações de integridade para balanceamento de carga são normalmente configuradas para serem mais agressivas, porque elas determinam se uma VM recebe tráfego do usuário e se você quer redirecionar rapidamente o tráfego, se necessário.
A verificação de integridade para recuperação automática faz com que o Compute Engine substitua proativamente as VMs com falha. Por isso, essa verificação de integridade precisa ser mais conservadora do que uma verificação de integridade de balanceamento de carga. A recuperação automática para VMs de pilha dupla será baseada em verificações de integridade IPv4.
Crie uma verificação de integridade:
gcloud compute health-checks create http dualstack-health-check-http \
Verifique se as regras de firewall permitem verificações de integridade:
IPv4
gcloud compute firewall-rules create dual-stack-allow-ipv4-health-check \ --network=NETWORK \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags=dual-stack-http-server \ --rules=tcp:22,80
IPv6
gcloud compute firewall-rules create dual-stack-allow-ipv6-health-check \ --network=NETWORK \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=::/0 \ --target-tags=dual-stack-http-server \ --rules=tcp:22,80
Aplique a verificação de integridade configurando uma política de recuperação automática para o MIG:
gcloud compute instance-groups managed update us-mig-1 \ --health-check dualstack-health-check-http \ --initial-delay 300 \ --zone us-central1-a
A configuração inicial-delay atrasa a recuperação automática da recriação prematura
da VM, caso ela esteja em processo de inicialização. O timer de atraso
inicial começa quando o campo currentAction
da VM é alterado para VERIFYING
.
Grupos de instâncias não gerenciadas
Configurar grupos de instâncias:
gcloud compute instance-groups unmanaged create us-ig-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged create us-ig-2 \ --zone us-central1-b
Crie duas instâncias de VM de pilha dupla em cada grupo de instâncias:
gcloud compute instances create inst-us-central1-1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-3 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-4 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6
O endereço IPv6 será atribuído automaticamente.
Adicionar VMs a grupos de instâncias:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances inst-us-central1-1,inst-us-central1-2 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances inst-us-central1-3,inst-us-central1-4 \ --zone us-central1-b
NEG
Adicione um back-end em que
--network-endpoint-type
é GCE_VM_IP_PORT:gcloud compute network-endpoint-groups create us-neg-lb-1 \ --network=NETWORK SUBNET \ --zone=us-central1-a --network-endpoint-type=GCE_VM_IP_PORT \ gcloud compute network-endpoint-groups create us-neg-lb-2 \ --network=NETWORK SUBNET \ --zone=us-central1-b --network-endpoint-type=GCE_VM_IP_PORT
Adicione endpoints ao grupo de endpoints de rede:
gcloud compute network-endpoint-groups update us-neg-lb-1 \--zone=us-central1-a \ --add-endpoint 'instance=inst-us-central1-1,ip=IPV4_ADRS_1, ipv6=IPV6_ADRS_1,port=80' \ --add-endpoint 'instance=inst-us-central1-2,ip=IPV4_ADRS_2, ipv6=IPV6_ADRS_2,port=80' \ gcloud compute network-endpoint-groups update us-neg-lb-2 --zone=us-central1-b \ --add-endpoint 'instance=inst-us-central1-3,ip=IPV4_ADRS_3, ipv6=IPV6_ADRS_3,port=80' \ --add-endpoint 'instance=inst-us-central1-4,ip=IPV4_ADRS_4,ipv6=IPV6_ADRS_4,port=80'
Configurar a verificação de integridade
Crie uma verificação de integridade para o serviço de back-end:
gcloud compute health-checks create http[s] my-health-check
--global
--request-path '/'
--port SERVICE_PORTSubstitua SERVICE_PORT pelo número da porta, de 1 a 65535.
Crie uma regra de firewall para permitir verificações de integridade:
gcloud compute firewall-rules create allow-scan-probe \ --action allow \ --description "allow-scan-probe" \ --rules tcp:SERVICE_PORT \ --source-ranges 2600:2d00:1:b029::/64 \ --priority 10 \ --network=NETWORK
O intervalo 2600:2d00:1:b029::/64 é usado para os endereços IP de origem dos verificadores de integridade para verificar a integridade das VMs. O endereço IP de origem 2600:2d00:1:b029::/64 é usado para verificar a integridade das VMs de back-end do balanceamento de carga de rede.
Criar e atualizar o serviço de back-end com o Backends
Crie o serviço de back-end:
gcloud compute backend-services create my-backend-service \ --ip-address-selection-policy PREFER_IPV6 \ --global \ --health-checks my-health-check \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --timeout=5m
Adicione os back-ends ao serviço de back-end:
gcloud compute backend-services add-backend my-backend-service \ --instance-group us-ig-1 \ --instance-group-zone us-central1-a \ --global \ gcloud compute backend-services add-backend my-backend-service \ --instance-group us-ig-2 \ --instance-group-zone us-central1-b \ --global
Configurar um serviço do Cloud Service Mesh
Esta seção mostra como configurar um serviço IPv6 no Traffic Director. O serviço pode fazer parte de uma configuração de malha de serviço ou ser usado para configurar um gateway de serviço, como uma VM que executa o Envoy.
Agora que os serviços de back-end com PREFER_IPV6
estão configurados, você pode criar
um recurso de gateway da AppNet.
Criar um recurso de gateway
Em um arquivo chamado
dual-stack-gateway.yaml
, crie a especificação do gateway para tráfego HTTP:cat <<EOF | tee dual-stack-gateway.yaml name: dual-stack-gateway scope: gateway-proxy ipVersion: IPV6 ports: - 80 type: OPEN_MESH EOF
Crie o recurso Gateway usando a especificação
dual-stack-gateway.yaml
:gcloud network-services gateways import dual-stack-gateway \ --source=dual-stack-gateway.yaml \ --location=global
Configurar o roteamento com HTTPRoute
Em um arquivo chamado
dual-stack-http_route.yaml
, crie a especificação HTTPRoute:cat <<EOF | tee dual-stack-http-route.yaml name: dual-stack-http-route hostnames: - dual-stack-server gateways: - projects/PROJECT_ID/locations/global/gateways/dual-stack-gateway rules: - action: destinations: - serviceName: "projects/PROJECT_ID/locations/global/backendServices/dual-stack-backend-service" EOF
Use a especificação em
dual-stack-http-route.yaml
para criar o recurso HTTPRoute.gcloud network-services http-routes import dual-stack-http-route \ --source=dual-stack-http-route.yaml \ --location=global
Para verificar a conectividade de ponta a ponta, use SSH para se conectar à VM do gateway MIG e execute o seguinte comando:
curl -H 'Host: dual-stack-server' http://[::]
A saída é semelhante a:
<!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
Migrar de IPv4 para pilha dupla
É preciso atender aos seguintes pré-requisitos antes de migrar do IPv4 para a pilha dupla:
- Grupos de instâncias de VM de pilha única
us-ig-1
eus-ig-2
com pilhaIPV4_ONLY
e VMs atuais - Um único serviço de back-end IPv4
my-ipv4-backend-service
apontando paraus-ig-1
eus-ig-2
- Uma sub-rede de VM
IPV4_ONLY
- Um recurso de gateway configurado com um endereço de versão IPv4
Fazer upgrade da sub-rede para pilha dupla
Atualize a sub-rede atual para que o back-end ofereça suporte a IPv6:
gcloud compute networks subnets update SUBNET \ --stack-type IPV4_IPV6 \ --ipv6-access-type=IPv6_ACCESS_TYPE \
Substitua:
- SUBNET: um nome para a nova sub-rede.
- IPv6_ACCESS_TYPE: o tipo de acesso IPv6.
Pode ser
EXTERNAL
ouINTERNAL
.
Fazer upgrade de cada VM para pilha dupla
gcloud compute instances network-interfaces update EXISTING_VM_NAME \ --stack-type=IPV4_IPV6 \ --zone=us-central1
Substitua EXISTING_VM_NAME pelo nome da VM.
Adicionar novas VMs de pilha dupla a cada grupo de instâncias
Crie novas instâncias de VM:
gcloud compute instances create my-new-vm-1 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create my-new-vm-2 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6
Adicione as novas instâncias aos grupos de instâncias:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances my-new-vm-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances my-new-vm-2 \ --zone us-central1-b
Crie um serviço de back-end IPv6:
gcloud compute backend-services create dual-stack-backend-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks=dual-stack-health-check-http \ --ip-address-selection-policy=PREFER_IPV6
Adicione o Instance-Group atualizado ao serviço de back-end de pilha dupla recém-criado:
gcloud compute backend-services add-backend dual-stack-backend-service \ --instance-group=us-ig-1 \ --instance-group-zone=ZONE \ --global
gcloud compute backend-services add-backend dual-stack-backend-service \ --instance-group=us-ig-2 \ --instance-group-zone=ZONE \ --global
Migrar de pilha dupla para IPv4
É preciso atender aos seguintes pré-requisitos antes de migrar de pilha dupla para IPv4:
- Grupos de instâncias de VM de pilha dupla
us-ig-1
eus-ig-2
com pilhaIPV4_IPV6
e VMs - Um único serviço de back-end IPv6
my-ipv6-backend-service
apontando paraus-ig-1
eus-ig-2
- Uma sub-rede de VM IPV4_IPV6
- Um recurso de gateway
Fazer downgrade de cada VM para IPv4
gcloud compute instances network-interfaces update EXISTING_VM_NAME \ --stack-type=IPV4_ONLY \ --zone=us-central1
Adicionar novas VMs de pilha IPv4 a cada grupo de instâncias
Crie novas instâncias de VM:
gcloud compute instances create my-new-vm-1 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_ONLY \ gcloud compute instances create my-new-vm-2 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_ONLY
Adicione as novas instâncias aos grupos de instâncias:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances my-new-vm-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances my-new-vm-2 \ --zone us-central1-b
Crie um serviço de back-end IPv4:
gcloud compute backend-services create my-ipv4-backend-service \ –ip-address-selection-policy IPV4_ONLY \ --global \ --health-checks my-health-check \ --load-balancing-scheme INTERNAL_SELF_MANAGED \ --timeout=5m
Adicione os grupos de instâncias atualizados ao serviço de back-end IPv4 recém-criado:
gcloud compute backend-services add-backend my-ipv4-backend-service \ --instance-group us-ig1 \ --instance-group-zone us-central1-a \ --global \ gcloud compute backend-services add-backend my-ipv4-backend-service \ --instance-group us-ig2 \ --instance-group-zone us-central1-b \ --global
Agora, os serviços de back-end IPv4 e IPv6 podem atender ao tráfego. Atualize o mapa de URL para direcionar parte do tráfego do cliente para o novo serviço de back-end IPv4.