Balanceamento de carga interno e nomes do DNS

Um registro de endereço DNS, conhecido como registro A, é usado para mapear um nome do DNS para um endereço IP. Ao criar uma regra de encaminhamento para um balanceador de carga interno, é possível designar um rótulo de serviço para que o Google Cloud gere um nome DNS interno do Compute Engine referente a esse balanceador. Esse nome é gerado com base no ID do projeto, no nome da regra de encaminhamento e em um rótulo de serviço especificado por você.

Especificações

  • Esse recurso é compatível com as regras de encaminhamento desses balanceadores de carga:

    • Balanceamento de carga TCP/UDP interno
    • Balanceamento de carga HTTP(S) interno
  • Consulte Formato do registro DNS para mais detalhes sobre o formato de nome DNS que o Google Cloud cria no balanceador de carga. Como os nomes do DNS contêm o nome da regra de encaminhamento, cada um deles é exclusivo, mesmo se você usar um rótulo de serviço igual em várias regras de encaminhamento.

  • A menos que um servidor de nomes alternativo seja configurado, as VMs cliente em qualquer região no mesmo projeto e rede VPC executarão buscas DNS pelo nome DNS interno do balanceador de carga. Para acessar o balanceador de carga, as VMs cliente precisam estar na mesma região a menos que o acesso global esteja disponível e ativado. Se você ativá-lo no balanceamento de carga interno TCP/UDP, um cliente em qualquer região poderá acessar o balanceador.

  • Só é possível especificar um rótulo de serviço ao criar uma regra de encaminhamento. Ele não pode ser adicionado a uma regra de encaminhamento atual. No entanto, é possível substituir uma regra de encaminhamento atual por uma nova que tenha um rótulo de serviço. Se você excluir a regra de encaminhamento original primeiro, a regra substituta poderá usar o mesmo endereço IP interno da original.

  • Os nomes do DNS internos criados a partir de rótulos de serviço têm as restrições a seguir:

    • Nenhum registro PTR reverso correspondente é criado.
    • Cada regra de encaminhamento pode ter apenas um rótulo de serviço.
    • Além do nome do rótulo de serviço e da regra de encaminhamento, não é possível alterar nenhuma outra parte do nome do DNS interno. Isso inclui o formato e o nome de domínio (.internal).

    Se você precisa de nomes do DNS mais flexíveis no balanceador de carga interno, crie registros personalizados em uma zona privada gerenciada do Cloud DNS.

  • Não é possível definir um rótulo de serviço em uma regra de encaminhamento interno que faça referência a um endereço IP interno compartilhado. Isso significa que os registros DNS internos do Compute Engine não podem ser criados automaticamente para um endereço IP interno que tenha a sinalização --purpose=SHARED_LOADBALANCER_VIP, porque o endereço é usado por duas ou mais regras de encaminhamento interno.

Formato do registro DNS

Quando você adiciona um rótulo de serviço a uma regra de encaminhamento, o Google Cloud cria um registro A DNS interno do Compute Engine usando um destes formatos:

  • No balanceamento de carga interno TCP/UDP:

    SERVICE_LABEL.FORWARDING_RULE_NAME.il4.REGION.lb.PROJECT_ID.interno

  • No balanceamento de carga interno HTTP(S):

    SERVICE_LABEL.FORWARDING_RULE_NAME.il7.REGION.lb.PROJECT_ID.interno

SERVICE_LABEL é o rótulo de serviço da regra de encaminhamento que você especifica. Ele precisa seguir este formato:

  • Use até 63 letras minúsculas (a a z), números (0 a 9) ou hifens (-).
  • O rótulo de serviço precisa começar com letra minúscula.
  • O rótulo de serviço precisa terminar com letra minúscula ou um número.

FORWARDING_RULE_NAME é o nome da regra de encaminhamento que você está criando.

REGION é a região do balanceador de carga.

PROJECT_ID é o ID do projeto. Esses IDs que têm o formato organization:project-id são convertidos em project-id.organization. Por exemplo, se o ID do projeto for example.com:example-marketing-prod, o Google Cloud usará example-marketing-prod.example.com.

Como criar uma regra de encaminhamento com um rótulo de serviço

Neste procedimento, você vê como criar uma regra de encaminhamento com um rótulo de serviço de um balanceador de carga interno TCP/UDP ou HTTP(S).

O procedimento aborda apenas a criação de uma regra de encaminhamento com um rótulo de serviço. As propriedades da configuração de back-end do balanceador de carga e outras da configuração de front-end são omitidas. Se você não está familiarizado com o balanceamento de carga interno TCP/UDP ou HTTP(S), consulte estas páginas para exemplos completos:

Console

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Criar balanceador de carga.
  3. Em Balanceamento de carga HTTP(S), Balanceamento de carga TCP ou Balanceamento de carga UDP, clique em Iniciar configuração.
  4. Em Somente voltado para a Internet ou interno, selecione Apenas entre minhas VMs e clique em Continuar.
  5. Dê um Nome para o balanceador de carga.
  6. Conclua a Configuração do back-end.
  7. Clique em Configuração do front-end. Conclua a configuração do front-end, especificando um Rótulo de serviço na parte inferior da seção.
  8. Clique em Concluído e em Revisar e finalizar.

gcloud

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno TCP/UDP:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL \
    --region=REGION \
    --backend-service-region=REGION \
    --backend-service=BACKEND_SERVICE_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=PROTOCOL \
    --ports=PORTS \
    --service-label=SERVICE_LABEL

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno HTTPS:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --region=REGION \
    --target-https-proxy-region=REGION \
    --target-https-proxy=TARGET_PROXY_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=TCP \
    --ports=443 \
    --service-label=SERVICE_LABEL

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno HTTP:

gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --region=REGION \
    --target-http-proxy-region=REGION \
    --target-http-proxy=TARGET_PROXY_NAME \
    --network=NETWORK \
    --subnet=SUBNET \
    --address=INTERNAL_IP \
    --ip-protocol=TCP \
    --ports=PORT \
    --service-label=SERVICE_LABEL

Substitua os marcadores por valores apropriados:

  • FORWARDING_RULE_NAME é o nome da regra de encaminhamento do balanceador de carga.
  • REGION é a região do balanceador de carga.
  • BACKEND_SERVICE_NAME é o nome do serviço de back-end do balanceador de carga TCP/UDP interno.
  • TARGET_PROXY_NAME é o nome do proxy HTTPS de destino (para um balanceador de carga HTTPS interno) ou do proxy HTTP de destino (para um balanceador de carga HTTP interno).
  • NETWORK é o nome da rede VPC em que o balanceador de carga é criado.
  • SUBNET é o nome de uma sub-rede na rede VPC. A sub-rede precisa estar na mesma região do serviço de back-end ou proxy de destino do balanceador de carga.
  • INTERNAL_IP é um endereço IP interno no intervalo de IPs principal da sub-rede escolhida. É possível omitir a sinalização --address para que o Google Cloud escolha um endereço IP disponível para você.
  • Para balanceadores de carga TCP/UDP internos, PROTOCOL é TCP ou UDP, correspondendo ao protocolo do serviço de back-end do balanceador de carga. Nos balanceadores de carga internos HTTP(S), o protocolo precisa ser TCP.
  • Nos balanceadores de carga internos TCP/UDP, PORTS é uma matriz de até cinco portas por número ou a palavra ALL. Para balanceadores de carga HTTPS internos, você precisa usar 443 na porta. Nos balanceadores de carga internos HTTP, você pode usar 80 ou 8080 para PORT. Consulte as Especificações de porta nos conceitos das regras de encaminhamento para mais detalhes.
  • SERVICE_LABEL é o rótulo de serviço pretendido. Ele precisa seguir as convenções de nomenclatura.

API

Nos exemplos a seguir, você cria regras de encaminhamento usando o método forwardingRules.insert

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno TCP/UDP:

POST https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL",
  "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/backendServices/BACKEND_SERVICE_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "PROTOCOL",
  "ports": PORTS,
  "serviceLabel": "SERVICE_LABEL"
}

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno HTTPS:

POST https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/targetHttpsProxies/TARGET_PROXY_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "TCP",
  "ports": 443,
  "serviceLabel": "SERVICE_LABEL"
}

Para criar uma regra de encaminhamento com um rótulo de serviço em um balanceador de carga interno HTTP:

POST https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules

{
  "name": "FORWARDING_RULE_NAME",
  "loadBalancingScheme": "INTERNAL_MANAGED",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/targetHttpProxies/TARGET_PROXY_NAME",
  "network": "https://www.googleapis.com/compute/v1/projects/PROJECT/global/networks/NETWORK",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET",
  "IPAddress": "INTERNAL_IP",
  "IPProtocol": "TCP",
  "ports": PORT,
  "serviceLabel": "SERVICE_LABEL"
}

Substitua os marcadores por valores apropriados:

  • FORWARDING_RULE_NAME é o nome da regra de encaminhamento do balanceador de carga.
  • REGION é a região do balanceador de carga.
  • BACKEND_SERVICE_NAME é o nome do serviço de back-end do balanceador de carga TCP/UDP interno.
  • TARGET_PROXY_NAME é o nome do proxy HTTPS de destino (para um balanceador de carga HTTPS interno) ou do proxy HTTP de destino (para um balanceador de carga HTTP interno).
  • NETWORK é o nome da rede VPC em que o balanceador de carga é criado.
  • SUBNET é o nome de uma sub-rede na rede VPC. A sub-rede precisa estar na mesma região do serviço de back-end ou proxy de destino do balanceador de carga.
  • INTERNAL_IP é um endereço IP interno no intervalo de IPs principal da sub-rede escolhida. É possível omitir a chave IPAddress para que o Google Cloud escolha um endereço IP disponível para você.
  • Para balanceadores de carga TCP/UDP internos, PROTOCOL é TCP ou UDP, correspondendo ao protocolo do serviço de back-end do balanceador de carga. Nos balanceadores de carga internos HTTP(S), o protocolo precisa ser TCP.
  • Nos balanceadores de carga internos TCP/UDP, PORTS é uma matriz de até cinco portas por número ou a palavra ALL. Para balanceadores de carga HTTPS internos, você precisa usar 443 na porta. Nos balanceadores de carga internos HTTP, você pode usar 80 ou 8080 para PORT. Consulte as Especificações de porta nos conceitos das regras de encaminhamento para mais detalhes.
  • SERVICE_LABEL é o rótulo de serviço pretendido. Ele precisa seguir as convenções de nomenclatura.

Como visualizar rótulos de serviço

Console

Veja o nome do DNS interno do Compute Engine, criado a partir do rótulo do serviço, de cada regra de encaminhamento interna de um balanceador de carga interno:

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique no nome do balanceador de carga interno para visualizar a página de detalhes.
  3. As regras de encaminhamento internas atribuídas ao balanceador de carga são listadas na seção Front-end. A coluna Nome do DNS mostra o nome do DNS interno do Compute Engine atribuído a cada regra de encaminhamento. O rótulo de serviço é a primeira parte desse nome e está localizado antes do primeiro ponto. Se nenhum nome é exibido, você não definiu um rótulo de serviço para a regra de encaminhamento.

gcloud

  1. Liste as regras de encaminhamento no seu projeto usadas pelo balanceamento de carga interno TCP/UDP ou HTTP(S). Localize a regra necessária e anote o nome e a região dela para a próxima etapa.

    gcloud compute forwarding-rules list \
        --filter="loadBalancingScheme=SCHEME"
    

    O valor de SCHEME depende das regras de encaminhamento que você precisa listar:

    • Nos balanceadores de carga internos TCP/UDP, use INTERNAL.
    • Nos balanceadores de carga internos HTTP(S), use INTERNAL_MANAGED.
  2. Descreva a regra de encaminhamento, substituindo FORWARDING_RULE_NAME pelo nome e REGION pela região:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
        --region=REGION \
        --format="get(serviceLabel)"
    

api

Veja a regra de encaminhamento e o rótulo de serviço com o método forwardingRules.get

A resposta à solicitação da API inclui o rótulo de serviço (serviceLabel) e o nome de DNS interno do Compute Engine (serviceName).

GET https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/forwardingRules/FORWARDING_RULE_NAME

Resposta TCP/UDP:

{
  ...
  "serviceLabel": "SERVICE_LABEL",
  "serviceName": "SERVICE_LABEL.FORWARDING_RULE_NAME.il4.REGION.lb.PROJECT.internal",
  ...
}

Resposta HTTP(S):

{
  ...
  "serviceLabel": "SERVICE_LABEL",
  "serviceName": "SERVICE_LABEL.FORWARDING_RULE_NAME.il7.REGION.lb.PROJECT.internal",
  ...
}

Exemplo

Veja no procedimento a seguir como substituir uma regra de encaminhamento por uma que tenha um rótulo de serviço. O procedimento funciona com o balanceamento de carga interno TCP/UDP e HTTP(S).

Se você ainda não criou uma regra de encaminhamento para o balanceador de carga interno, pule este exemplo e consulte Como criar uma regra de encaminhamento com um rótulo de serviço.

  1. Descreva a regra de encaminhamento atual do balanceador de carga e anote o endereço IP interno dela:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
        --region=REGION \
        --format="get(IPAddress)
    
  2. Exclua a regra de encaminhamento:

    gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \
        --region=REGION
    
  3. Crie uma regra de encaminhamento substituta com o mesmo nome e um endereço IP interno com um rótulo de serviço. Consulte Como criar uma regra de encaminhamento com um rótulo de serviço para mais instruções.

A seguir