Configure a pilha dupla IPv6 para o Cloud Service Mesh

Esta página mostra como equilibrar a carga do tráfego IPv6 na Cloud Service Mesh usando equilibradores de carga baseados em proxy do Traffic Director (TD), bem como como migrar de implementações baseadas em IPv4 para implementações de pilha dupla (IPv4 e IPv6) e como migrar de pilha dupla para IPv4.

Nas implementações de pilha dupla, 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 das suas preferências e seleciona o que se alinha com as suas preferências e o que é suportado.

As funcionalidades de pilha dupla são suportadas no gRPC 1.66.1 e posterior para C++ e Python, 1.12 e posterior para Node, e 1.71 e posterior para Go. O Java não é suportado neste momento.

Versões do gRPC sem suporte de pilha dupla (ou seja, Go e versões anteriores a 1.66 noutros idiomas) usam apenas o primeiro endereço de cada ponto final, na ordem enviada pelo TD.

Antes de começar

Este guia pressupõe que já:

Configure o serviço de back-end IPv6

Nesta secção, configura o seguinte:

  • Dois grupos de back-end (grupos de instâncias, grupos de instâncias geridos ou grupos de pontos finais de rede), um em cada uma de duas zonas diferentes na mesma região.
  • Duas instâncias de VM em cada grupo de back-end.
  • Uma verificação de funcionamento para validar o estado de funcionamento da instância.
  • Regras de firewall que permitem que as verificações de funcionamento alcancem os back-ends.
  • Um serviço de back-end.
  • O serviço de back-end para incluir os dois grupos de back-end configurados.

Configure uma sub-rede para os seus back-ends

O comando seguinte atribui intervalos de endereços internos para IPv4 e IPv6 e permite que as VMs na sub-rede sejam atribuídas com qualquer tipo de endereço.

Tenha em atenção que apenas as sub-redes do modo personalizado são suportadas. Não existe suporte para o modo automático. Pode mudar para o modo personalizado para toda a rede VPC e, em seguida, preencher os back-ends IPv6 (MIGs ou NEGs).

  1. Crie uma rede de pilha dupla:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. 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 o seguinte:

    • SUBNET: um nome para a nova sub-rede.
    • NETWORK: o nome da rede VPC que vai conter a nova sub-rede.
    • PRIMARY_IPv4_RANGE: o intervalo IPv4 principal para a nova sub-rede, na notação CIDR. Para mais informações, consulte o artigo Intervalos de sub-redes IPv4.
    • IPv6_ACCESS_TYPE: o tipo de acesso IPv6. Pode ser EXTERNAL ou INTERNAL.
    • REGION: a Google Cloud região na qual a nova sub-rede vai ser criada.

Configure backends

Pode optar por usar grupos de instâncias geridas (MIG), grupos de instâncias não geridas ou grupos de pontos finais da rede (NEG).

MIG

  1. Crie um grupo de instâncias geridas 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
    
  2. Crie um grupo de instâncias gerido de proxy de gateway:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. Crie um grupo de instâncias geridas 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
    
  4. Adicione uma porta com nome ao grupo de instâncias gerido:

    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 estado separadas para o equilíbrio de carga e a autorrecuperação. As verificações de funcionamento para o balanceamento de carga são normalmente configuradas para serem mais agressivas, porque estas verificações de funcionamento determinam se uma VM recebe tráfego de utilizadores e se quer redirecionar rapidamente o tráfego, se necessário.

    A verificação de funcionamento para a autorrecuperação faz com que o Compute Engine substitua proativamente as VMs com falhas, pelo que esta verificação de funcionamento deve ser mais conservadora do que uma verificação de funcionamento do balanceamento de carga. Tenha em atenção que a autorrecuperação para VMs de pilha dupla baseia-se em verificações de estado do IPv4.

  5. Crie uma verificação de funcionamento:

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. Certifique-se de que as regras de firewall permitem verificações de funcionamento:

    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
    
  7. Aplique a verificação de funcionamento configurando uma política de autorreparação para o seu MIG:

    gcloud compute instance-groups managed update us-mig-1 \
      --health-check dualstack-health-check-http \
      --initial-delay 300 \
      --zone us-central1-a
    

A definição initial-delay atrasa a autorreparação da recriação potencialmente prematura da VM se a VM estiver em processo de arranque. O temporizador de atraso inicial começa quando o campo currentAction da MV muda para VERIFYING.

Grupos de instâncias não geridos

  1. Configure 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
    
  2. 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 é atribuído automaticamente.

  3. Adicione 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

  1. Adicione um back-end onde --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
    
  2. Adicione pontos finais ao grupo de pontos finais 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'
    

Configure a verificação de funcionamento

  1. Crie uma verificação de funcionamento para o serviço de back-end:

      gcloud compute health-checks create http[s] my-health-check 
    --global
    --request-path '/'
    --port SERVICE_PORT

    Substitua SERVICE_PORT pelo número da porta, de 1 a 65535.

  2. Crie uma regra de firewall para permitir verificações de funcionamento:

    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 funcionamento para testar o funcionamento das VMs. Tenha em atenção que 2600:2d00:1:b029::/64 é usado como o endereço IP de origem para verificadores de funcionamento IPv6 para testar o funcionamento da VM de back-end do balanceamento de carga de rede.

Crie e atualize o serviço de back-end com back-ends

  1. 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
    
  2. 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
    

Configure um serviço do Cloud Service Mesh

Esta secção mostra como configurar um serviço IPv6 no Traffic Director. O serviço pode fazer parte de uma configuração de Service Mesh ou pode ser usado para configurar um gateway de serviços, como uma VM que executa o Envoy.

Agora que os serviços de back-end com PREFER_IPV6 estão configurados, pode criar um recurso de gateway appnet.

Crie um recurso de gateway

  1. Num ficheiro denominado 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
    
  2. Crie o recurso Gateway a partir da especificação dual-stack-gateway.yaml:

    gcloud network-services gateways import dual-stack-gateway \
      --source=dual-stack-gateway.yaml \
      --location=global
    

Configure o encaminhamento com HTTPRoute

  1. Num ficheiro denominado 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
    
  2. 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
    
  3. Para validar a conetividade ponto a ponto, use SSH para aceder à VM a partir do MIG de gateway e execute o seguinte comando:

    curl -H 'Host: dual-stack-server' http://[::]
    

    O resultado é semelhante ao seguinte:

    <!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
    

Migre do IPv4 para a pilha dupla

Tem de cumprir os seguintes pré-requisitos antes de poder migrar do IPv4 para o dual-stack:

  • Grupos de instâncias de VM de pilha única existentes us-ig-1 e us-ig-2 com pilha IPV4_ONLY com VMs existentes
  • Um único serviço de back-end IPv4 my-ipv4-backend-service que aponta para us-ig-1 e us-ig-2
  • Uma sub-rede de VM IPV4_ONLY
  • Um recurso de gateway configurado com um endereço da versão IPv4

Atualize a sub-rede para dual-stack

Atualize a sub-rede existente para o back-end para suportar o IPv6:

gcloud compute networks subnets update SUBNET \
  --stack-type IPV4_IPV6 \
  --ipv6-access-type=IPv6_ACCESS_TYPE \

Substitua o seguinte:

  • SUBNET: um nome para a nova sub-rede.
  • IPv6_ACCESS_TYPE: o tipo de acesso IPv6. Pode ser EXTERNAL ou INTERNAL.

Atualize 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 sua VM existente.

Adicione novas VMs de pilha dupla a cada grupo de instâncias

  1. Criar 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
    
  2. Adicione as novas instâncias a 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
    
  3. 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
    
  4. Adicione o grupo de instâncias 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
    

Migre da pilha dupla para o IPv4

Tem de cumprir os seguintes pré-requisitos antes de poder migrar de pilha dupla para IPv4:

  • Grupos de instâncias de VM de pilha dupla existentes us-ig-1 e us-ig-2 com pilha IPV4_IPV6 com VMs existentes
  • Um único serviço de back-end IPv6 my-ipv6-backend-service que aponta para us-ig-1 e us-ig-2
  • Uma sub-rede de VM IPV4_IPV6
  • Um recurso de gateway

Altere cada VM para IPv4

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_ONLY \
  --zone=us-central1

Adicione novas VMs de pilha IPv4 a cada grupo de instâncias

  1. Criar 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
    
  2. Adicione as novas instâncias a 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
    
  3. 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
    
  4. 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 publicar tráfego. Atualize o mapa de URLs para direcionar uma parte do tráfego de clientes para o novo serviço de back-end IPv4.