Balanceo de cargas interno y nombres de DNS

Un registro de dirección de DNS, conocido como registro A, se usa para asignar un nombre de DNS a una dirección IP. Cuando creas la regla de reenvío de un balanceador de cargas interno, tienes la opción de designar una etiqueta de servicio a fin de que Google Cloud cree un nombre de DNS interno de Compute Engine único para el balanceador de cargas. Este nombre de DNS interno se crea a partir del ID del proyecto, el nombre de la regla de reenvío y una etiqueta de servicio que especifiques.

Especificaciones

  • Esta función es compatible con las reglas de reenvío para estos balanceadores de cargas:

    • Balanceo de cargas TCP/UDP interno
    • Balanceo de cargas HTTP(S) interno
  • Consulta el formato de registro DNS a fin de obtener detalles sobre el formato del nombre de DNS que Google Cloud crea para el balanceador de cargas. Debido a que el nombre de DNS contiene el nombre de la regla de reenvío, cada nombre de DNS es único, incluso si usas la misma etiqueta de servicio para varias reglas de reenvío.

  • A menos que se configure un servidor de nombres alternativo, las VM de cliente en cualquier región del mismo proyecto y red de VPC pueden realizar búsquedas de DNS para el nombre de DNS interno del balanceador de cargas. Para acceder al balanceador de cargas, las VM de cliente se deben ubicar en la misma región, a menos que el acceso global esté disponible y habilitado. Un cliente de cualquier región puede acceder al balanceador de cargas si habilitas el acceso global para el balanceo de cargas de TCP/UDP interno.

  • Solo puedes especificar una etiqueta de servicio cuando creas una regla de reenvío. No se puede agregar una etiqueta de servicio a una regla de reenvío existente. Sin embargo, puedes reemplazar una regla de reenvío existente por una regla de reenvío nueva que tenga una etiqueta de servicio. El reemplazo puede usar la misma dirección IP interna que el original si primero borras la regla de reenvío original.

  • Los nombres de DNS internos creados a partir de etiquetas de servicio tienen las restricciones siguientes:

    • No se crean los registros (PTR) inversos correspondientes.
    • Cada regla de reenvío solo puede tener una etiqueta de servicio.
    • Además de la etiqueta de servicio y el nombre de la regla de reenvío, no puedes cambiar ningún otra parte del nombre de DNS interno. Esto incluye su formato y nombre de dominio (.internal).

    Si necesitas nombres de DNS más flexibles para tu balanceador de cargas interno, puedes crear registros personalizados en una zona privada y administrada de Cloud DNS.

  • No puedes definir una etiqueta de servicio en una regla de reenvío interna que haga referencia a una dirección IP interna compartida. Esto significa que los registros A de DNS internos de Compute Engine no se pueden crear automáticamente para una dirección IP interna que tiene la marca --purpose=SHARED_LOADBALANCER_VIP, ya que dos o más reglas de reenvío internas usan la dirección.

Formato del Registro DNS

Cuando agregas una etiqueta de servicio a una regla de reenvío, Google Cloud crea un registro A de DNS interno de Compute Engine mediante uno de estos formatos:

  • Para el balanceo de cargas de TCP/UDP interno, usa el siguiente formato:

    SERVICE_LABEL.FORWARDING_RULE_NAME.il4.REGION.lb.PROJECT_ID.internal

  • Para el balanceo de cargas HTTP(S) interno, usa este formato:

    SERVICE_LABEL.FORWARDING_RULE_NAME.il7.REGION.lb.PROJECT_ID.internal

SERVICE_LABEL es la etiqueta del servicio de la regla de reenvío que especificaste. Debe seguir este formato:

  • Puedes usar hasta 63 letras minúsculas (a a z), números (0 a 9) o guiones (-).
  • La etiqueta de servicio debe comenzar con una letra en minúscula.
  • La etiqueta de servicio debe terminar con una letra en minúscula o un número.

FORWARDING_RULE_NAME es el nombre de la regla de reenvío que deseas crear.

REGION es la región del balanceador de cargas.

PROJECT_ID es el ID del proyecto. Los ID del proyecto que tienen el formato organization:project-id se convierten en project-id.organization. Por ejemplo, si tu ID del proyecto es example.com:example-marketing-prod, Google Cloud usará example-marketing-prod.example.com.

Crea una regla de reenvío con una etiqueta de servicio

En este procedimiento, se muestra cómo crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas TCP/UDP interno o un balanceador de cargas HTTP(S) interno.

En este procedimiento, solo se explica cómo crear una regla de reenvío con una etiqueta de servicio. Se omiten las propiedades de la configuración de backend del balanceador de cargas y otras propiedades de la configuración de frontend. Si es la primera vez que usas el balanceo de cargas de TCP/UDP interno o el balanceo de cargas HTTP(S) interno, consulta estas páginas para ver ejemplos completos:

Console

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Crear balanceador de cargas.
  3. En Balanceo de cargas HTTP(S), Balanceo de cargas TCP o Balanceo de cargas UDP, haz clic en Iniciar configuración.
  4. En Orientado a Internet o solo interno selecciona Solo entre mis VM, luego, haz clic en Continuar.
  5. Ingresa un Nombre para el balanceador de cargas.
  6. Completa la Configuración del backend.
  7. Haz clic en Configuración de frontend. Completa la configuración de frontend y especifica una Etiqueta de servicio en la parte inferior de esa sección.
  8. Haz clic en Listo y, luego, en Revisar y finalizar.

gcloud

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas TCP/UDP interno, haz lo siguiente:

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

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas HTTPS interno, haz lo siguiente:

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

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas HTTP interno, haz lo siguiente:

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

Reemplaza los marcadores por valores adecuados:

  • FORWARDING_RULE_NAME es el nombre de la regla de reenvío del balanceador de cargas.
  • REGION es la región del balanceador de cargas.
  • BACKEND_SERVICE_NAME es el nombre del servicio de backend del balanceador de cargas TCP/UDP interno.
  • TARGET_PROXY_NAME es el nombre del proxy HTTPS de destino (para un balanceador de cargas HTTPS interno) o del proxy HTTP de destino (para un balanceador de cargas HTTP interno).
  • NETWORK es el nombre de la red de VPC en la que se crea el balanceador de cargas.
  • SUBNET es el nombre de una subred en la red de VPC. La subred debe estar en la misma región que el servicio de backend o el proxy de destino del balanceador de cargas.
  • INTERNAL_IP es una dirección IP interna en el rango de IP principal de la subred elegida. Puedes omitir la marca --address para que Google Cloud elija una dirección IP disponible para ti.
  • En el caso de los balanceadores de cargas TCP/UDP internos, PROTOCOL es TCP o UDP, lo cual coincide con el protocolo del servicio de backend del balanceador de cargas. Para los balanceadores de cargas HTTP(S) internos, el protocolo debe ser TCP.
  • En el caso de los balanceadores de cargas TCP/UDP internos, PORTS es un arreglo de hasta cinco puertos por número o la palabra ALL. En el caso de los balanceadores de cargas HTTPS internos, debes usar 443 para el puerto. En el caso de los balanceadores de cargas HTTP internos, puedes usar 80 o 8080 para PORT. Consulta las especificaciones de puertos en los conceptos de reglas de reenvío para obtener más información.
  • SERVICE_LABEL es la etiqueta de servicio que necesitas. Esta debe seguir las convenciones de nombres.

api

En los siguientes ejemplos, se crean reglas de reenvío mediante el método forwardingRules.insert.

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas TCP/UDP interno, haz lo siguiente:

POST https://compute.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"
}

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas HTTPS interno, haz lo siguiente:

POST https://compute.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"
}

Si deseas crear una regla de reenvío con una etiqueta de servicio para un balanceador de cargas HTTP interno, haz lo siguiente:

POST https://compute.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"
}

Reemplaza los marcadores por valores adecuados:

  • FORWARDING_RULE_NAME es el nombre de la regla de reenvío del balanceador de cargas.
  • REGION es la región del balanceador de cargas.
  • BACKEND_SERVICE_NAME es el nombre del servicio de backend del balanceador de cargas TCP/UDP interno.
  • TARGET_PROXY_NAME es el nombre del proxy HTTPS de destino (para un balanceador de cargas HTTPS interno) o del proxy HTTP de destino (para un balanceador de cargas HTTP interno).
  • NETWORK es el nombre de la red de VPC en la que se crea el balanceador de cargas.
  • SUBNET es el nombre de una subred en la red de VPC. La subred debe estar en la misma región que el servicio de backend o el proxy de destino del balanceador de cargas.
  • INTERNAL_IP es una dirección IP interna en el rango de IP principal de la subred elegida. Puedes omitir la clave IPAddress a fin de que Google Cloud elija una dirección IP disponible para ti.
  • En el caso de los balanceadores de cargas TCP/UDP internos, PROTOCOL es TCP o UDP, lo cual coincide con el protocolo del servicio de backend del balanceador de cargas. Para los balanceadores de cargas HTTP(S) internos, el protocolo debe ser TCP.
  • En el caso de los balanceadores de cargas TCP/UDP internos, PORTS es un arreglo de hasta cinco puertos por número o la palabra ALL. En el caso de los balanceadores de cargas HTTPS internos, debes usar 443 para el puerto. En el caso de los balanceadores de cargas HTTP internos, puedes usar 80 o 8080 para PORT. Consulta las especificaciones de puertos en los conceptos de reglas de reenvío para obtener más información.
  • SERVICE_LABEL es la etiqueta de servicio que necesitas. Esta debe seguir las convenciones de nombres.

Visualiza las etiquetas de servicio

Console

Puede ver el nombre de DNS interno de Compute Engine (creado a partir de la etiqueta de servicio) para cada regla de reenvío interna de un balanceador de cargas interno:

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en el nombre del balanceador de cargas interno para ver su página de detalles.s
  3. Las reglas de reenvío internas asignadas al balanceador de cargas se enumeran en la sección Frontend. En la columna nombre de DNS, se muestra el nombre de DNS interno de Compute Engine que se asigna a cada regla de reenvío. La etiqueta de servicio es la primera parte de ese nombre (antes del primer punto). Si no se muestra ningún nombre, la regla de reenvío no tiene una etiqueta de servicio definida.

gcloud

  1. Enumera las reglas de reenvío en tu proyecto que usa el balanceo de cargas de TCP/UDP interno o el balanceo de cargas HTTP(S) interno. Ubica las que necesites y anota el nombre y la región para el siguiente paso.

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

    El valor de SCHEME depende de las reglas de reenvío que debes enumerar:

    • Para los balanceadores de cargas TCP/UDP internos, usa INTERNAL.
    • Para los balanceadores de cargas HTTP(S) internos, usa INTERNAL_MANAGED.
  2. Describe la regla de reenvío y reemplaza FORWARDING_RULE_NAME por su nombre y REGION por su región:

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

api

Visualiza la regla de reenvío y la etiqueta de servicio con el método forwardingRules.get

La respuesta a la solicitud a la API incluye la etiqueta de servicio (serviceLabel) y el nombre de DNS interno de Compute Engine (serviceName).

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

Respuesta de TCP/UDP:

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

Respuesta HTTP(S):

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

Ejemplo

En el siguiente procedimiento, se muestra cómo reemplazar una regla de reenvío por una que tenga una etiqueta de servicio. Este procedimiento funciona para el balanceo de cargas TCP/UDP interno y el balanceo de cargas HTTP(S) interno.

Si aún no creaste una regla de reenvío para tu balanceador de cargas interno, omite este ejemplo y consulta Crea una regla de reenvío con una etiqueta de servicio.

  1. Describe la regla de reenvío existente del balanceador de cargas y anota la dirección IP interna de la regla de reenvío:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
        --region=REGION \
        --format="get(IPAddress)"
    
  2. Borra la regla de reenvío:

    gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \
        --region=REGION
    
  3. Crea una regla de reenvío de reemplazo con el mismo nombre y la misma dirección IP interna con una etiqueta de servicio. Consulta Crea una regla de reenvío con una etiqueta de servicio para obtener instrucciones.

¿Qué sigue?