Configurar el acceso a Internet para máquinas virtuales con cargas de trabajo

Puedes configurar el servicio de red de acceso a Internet para cargas de trabajo de VMware en VMware Engine de Google Cloud por regiones. Puedes dirigir el tráfico saliente a Internet desde tus máquinas virtuales con cargas de trabajo mediante el perímetro de Internet de Google Cloudo una conexión local.

Las VMs con cargas de trabajo que pueden acceder a Internet también pueden acceder a los servicios Google Cloud mediante Acceso privado de Google. El acceso a los Google Cloud servicios mediante el acceso privado de Google se mantiene Google Cloud en las redes y no sale a Internet.

El servicio de red de acceso a Internet admite lo siguiente:

  • Hasta 100 direcciones IP públicas por región
  • Hasta 300 reglas de cortafuegos por tabla de cortafuegos
  • Rendimiento de hasta 2 Gbps en 128.000 conexiones simultáneas por región
  • Protocolos TCP, UDP e ICMP

El servicio de red de acceso a Internet no admite la función de pasarela de nivel de aplicación (ALG).

Antes de empezar

Para cambiar la configuración de acceso a Internet de tu nube privada, debes tener acceso de administrador a VMware Engine.

Para habilitar el acceso a Internet, necesitas un intervalo de direcciones CIDR de servicios perimetrales. Cuando habilitas los servicios de red de acceso a Internet o de IP pública, las pasarelas se implementan en el contexto del tenant del servicio.

Usa el intervalo de direcciones CIDR de los servicios perimetrales para las pasarelas de Internet y de IP públicas de VMware Engine. El intervalo de direcciones debe cumplir los siguientes requisitos:

  • Cumplir el estándar RFC 1918 como intervalo privado.
  • No se solapen con ningún otro intervalo de direcciones de VMware Engine, como el intervalo de direcciones usado para los dispositivos de gestión o los segmentos de NSX.
  • No se solapen con ningún intervalo de direcciones que se anuncie a VMware Engine, como los que se usan en las subredes de redes de nube privada virtual (VPC) o en las redes on‐premise.
  • Dedica un intervalo de direcciones IP con 26 bits de máscara de subred (/26).

Requisitos de Google Cloud CLI y de las APIs

Para usar la herramienta de línea de comandos gcloud o la API para gestionar tus recursos de VMware Engine, te recomendamos que configures las herramientas como se describe a continuación.

gcloud

  1. Configura tu ID de proyecto predeterminado:

    gcloud config set project PROJECT_ID
    
  2. Definir una región y una zona predeterminadas:

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

Para obtener más información sobre la herramienta gcloud vmware, consulta la documentación de referencia del SDK de Google Cloud.

API

En los ejemplos de API de este conjunto de documentación se usa la herramienta de línea de comandos cURL para consultar la API. Se necesita un token de acceso válido como parte de la solicitud cURL. Hay muchas formas de obtener un token de acceso válido. En los siguientes pasos se utiliza la herramienta gcloud para generar un token de acceso:

  1. Inicia sesión en Google Cloud:

    gcloud auth login
    
  2. Generar token de acceso y exportarlo a TOKEN:

    export TOKEN=`gcloud auth print-access-token`
    
  3. Verifica que TOKEN esté configurado correctamente:

    echo $TOKEN
    

Ahora, usa el token de autorización en tus solicitudes a la API. Por ejemplo:

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

Los ejemplos de código de Python de esta documentación usan la biblioteca VMware Engine para comunicarse con la API. Para poder usar este método, la biblioteca debe estar instalada y las credenciales de aplicación predeterminadas deben estar configuradas.

  1. Descarga e instala la biblioteca de Python:

    pip install google-cloud-vmwareengine
    
  2. Configura la información de ADC ejecutando esos comandos en tu shell:

    gcloud auth application-default login
    

    También puedes usar un archivo de clave de cuenta de servicio:

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

Para obtener más información sobre la biblioteca, visita la página de referencia o consulta los ejemplos de código en GitHub.

Configurar el servicio de acceso a Internet

Puedes permitir que tus máquinas virtuales con cargas de trabajo tengan acceso a Internet creando o actualizando una política de red.

De forma predeterminada, el servicio de red de acceso a Internet está inhabilitado.

Habilitar el servicio de acceso a Internet en una región

Consola

Para habilitar el servicio de acceso a Internet en una región, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Políticas de red.

    Ir a Políticas de la red

  2. Haga clic en Seleccionar un proyecto y, a continuación, seleccione la organización, la carpeta o el proyecto que contenga la red de VMware Engine en la que quiera habilitar el servicio de acceso a Internet.

  3. Haz clic en Crear para crear una política. Si quieres editar una política de red, haz clic en el icono Más al final de una fila y selecciona Editar.

  4. Rellena los detalles de tu política de red, incluida la red y la región a las que se aplica la política.

  5. Activa Acceso a Internet y, de forma opcional, habilita Servicio de dirección IP externa.

  6. En el campo CIDR de servicios perimetrales, introduce el intervalo de direcciones que se va a usar al dirigirse a la puerta de enlace de Internet de VMware Engine (intervalo de direcciones /26).

  7. Haz clic en Crear.

El estado del servicio cambia a Habilitado cuando se completa la operación, normalmente al cabo de varios minutos.

gcloud

Con la herramienta gcloud, ejecuta el siguiente comando para crear una política de red:

gcloud vmware network-policies create NETWORK_POLICY_NAME \
    --vmware-engine-network projects/PROJECT_ID/locations/LOCATIONS/vmwareEngineNetworks/NETWORK_ID \
    --edge-services-cidr=IP_RANGE \
    --location=LOCATION \
    --internet-access

Haz los cambios siguientes:

  • NETWORK_POLICY_NAME: el nombre de esta política de red.
  • NETWORK_ID: la red a la que se aplica esta política de red
  • IP_RANGE: el intervalo CIDR que se va a usar para el acceso a Internet y las pasarelas de acceso a IPs externas, en notación CIDR. Se necesita un bloque CIDR RFC 1918 con un prefijo "/26".
  • LOCATION: global para redes antiguas o la región de una red estándar

API

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies?networkPolicyId=NETWORK_POLICY_NAME

'{
  "vmwareEngineNetwork":"projects/PROJECT_ID/locations/LOCATION/vmwareEngineNetworks/NETWORK_ID",
  "edgeServiceCidr":IP_RANGE,
  "internetAccess: {
    "enabled": true
   },
   "externalIp": {
     "enabled": true
   }
}"

Haz los cambios siguientes:

  • NETWORK_POLICY_NAME: el nombre de esta política de red. Debe tener el formato REGION-default.
  • PROJECT_ID: el ID de proyecto de esta solicitud
  • LOCATION: global para redes antiguas o la región de una red estándar
  • IP_RANGE: el intervalo CIDR que se va a usar para el acceso a Internet y las pasarelas de acceso a IPs externas, en notación CIDR. Se necesita un bloque CIDR RFC 1918 con un prefijo "/26".
  • NETWORK_ID: la red de esta política de red

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def create_network_policy(
    project_id: str,
    region: str,
    ip_range: str,
    internet_access: bool,
    external_ip: bool,
) -> operation.Operation:
    """
    Creates a new network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1"
        ip_range: the CIDR range to use for internet access and external IP access gateways,
            in CIDR notation. An RFC 1918 CIDR block with a "/26" suffix is required.
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.

    Raises:
        ValueError if the provided ip_range doesn't end with /26.
    """
    if not ip_range.endswith("/26"):
        raise ValueError(
            "The ip_range needs to be an RFC 1918 CIDR block with a '/26' suffix"
        )

    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.edge_services_cidr = ip_range
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request = vmwareengine_v1.CreateNetworkPolicyRequest()
    request.network_policy = network_policy
    request.parent = f"projects/{project_id}/locations/{region}"
    request.network_policy_id = f"{region}-default"

    client = vmwareengine_v1.VmwareEngineClient()
    return client.create_network_policy(request)

Directrices para la función de red optimizada para la movilidad de HCX (MON)

Al configurar el acceso a Internet para las VMs migradas mediante HCX con la función de redes optimizadas para la movilidad (MON), se requiere una configuración de enrutamiento específica para asegurar la conectividad.

En los segmentos de extensión de capa 2 (L2E) que se hayan habilitado con MON, las VMs migradas no tendrán sus rutas anunciadas automáticamente al servicio de Internet de VMware Engine. Para asegurarte de que estas VMs puedan acceder a Internet, debes realizar la siguiente acción:

  • Habilita la redistribución de rutas estáticas a BGP en el router de nivel 1.

Este paso manual es fundamental para anunciar las rutas de tus segmentos habilitados para MON, lo que les permite enrutar el tráfico de Internet a través del entorno de VMware Engine. Sin esta configuración, las VMs de estos segmentos no podrán acceder a Internet público.

Inhabilitar el servicio de acceso a Internet en una región

Para inhabilitar el servicio de acceso a Internet en una región, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Políticas de red.

    Ir a Políticas de la red

  2. Haga clic en Seleccionar un proyecto y, a continuación, seleccione la organización, la carpeta o el proyecto que contenga la red de VMware Engine en la que quiera inhabilitar el servicio de acceso a Internet.

  3. En la fila correspondiente a la política de red pertinente, haz clic en el icono Más.

  4. Cambia Acceso a Internet a Inhabilitado.

    • Debes inhabilitar el servicio de IP pública para poder inhabilitar el acceso a Internet.
    • Para inhabilitar el servicio de IP pública, primero debes eliminar todas las direcciones IP públicas asignadas y las puertas de enlace VPN de punto a sitio.
  5. Haz clic en Guardar.

El estado del servicio cambia a Inhabilitado cuando se completa la operación, normalmente al cabo de varios minutos.

gcloud

Con la herramienta gcloud, ejecuta el siguiente comando para actualizar la política de red:

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --location LOCATION

Haz los cambios siguientes:

  • NETWORK_POLICY_NAME: el nombre de esta política de red
  • LOCATION: global para redes antiguas o la región de una red estándar

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled -d "{
  "internetAccess: {
    "enabled": false
 },
  "externalIp": {
    "enabled": false
   }
}"

Haz los cambios siguientes:

  • PROJECT_ID: el ID de proyecto de esta solicitud
  • LOCATION: global para redes antiguas o la región de una red estándar
  • NETWORK_POLICY_NAME: el nombre de esta política de red

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

Usar una conexión local para el acceso a Internet de las cargas de trabajo

También puedes dirigir el tráfico saliente a Internet desde las máquinas virtuales de tu carga de trabajo en VMware Engine a través de una conexión on-premise. El tráfico se dirige en función del estado de lo siguiente:

  • Anuncio de ruta predeterminada (0.0.0.0/0) desde las instalaciones locales
  • Servicio de IP pública de VMware Engine
  • Servicio de acceso a Internet de VMware Engine
  • Controles de Servicio de VPC en la conexión de peering de VPC entre tu red de VPC y VMware Engine

Habilitar el enrutamiento del tráfico de Internet a través de una conexión local

Para acceder a Internet desde tus máquinas virtuales con cargas de trabajo a través de una conexión on-premise, debes completar dos pasos:

  1. Anuncia la ruta predeterminada (0.0.0.0/0) desde el entorno on-premise a través de una conexión on-premise (Cloud VPN o Cloud Interconnect). Comprueba la pasarela Cloud VPN o Cloud Router donde termina la conexión local a tu VPN.
  2. Inhabilita el acceso a Internet y el servicio de IP pública de la red de VMware Engine.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de red.

    Ir a Políticas de la red

  2. Haga clic en Seleccionar un proyecto y, a continuación, seleccione la organización, la carpeta o el proyecto que contenga la red de VMware Engine en la que quiera habilitar el servicio de acceso a Internet.

  3. En la fila correspondiente a la política de red pertinente, haz clic en el icono Más.

  4. Cambia el valor de IP pública a Inhabilitada.

  5. Cambia Acceso a Internet a Inhabilitado.

  6. Haz clic en Guardar.

  7. Si usas una red de VMware Engine antigua: habilita Controles de Servicio de VPC en la conexión de emparejamiento de VPC entre tu red VPC y VMware Engine mediante el comando gcloud services vpc-peerings enable-vpc-service-controls:

    gcloud services vpc-peerings enable-vpc-service-controls \
       --network=VPC_NETWORK \
       --service=servicenetworking.googleapis.com

gcloud

Con la herramienta gcloud, ejecuta el siguiente comando para actualizar la política de red:

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --no-external-ip-address \
  --location LOCATION

Haz los cambios siguientes:

  • NETWORK_POLICY_NAME: el nombre de esta política de red
  • LOCATION: global para redes antiguas o la región de una red estándar

Si usas una red de VMware Engine antigua, habilita Controles de Servicio de VPC en la conexión de emparejamiento de VPC entre tu red VPC y VMware Engine mediante el comando gcloud services vpc-peerings enable-vpc-service-controls:

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled

"{
  "internetAccess: {
    "enabled": false
   },
  "externalIp: {
    "enabled": false
   }
}"

Si usas una red de VMware Engine antigua, habilita Controles de Servicio de VPC en la conexión de emparejamiento de VPC entre tu red VPC y VMware Engine mediante el comando gcloud services vpc-peerings enable-vpc-service-controls:

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK_NAME \
   --service=servicenetworking.googleapis.com

Python

Asigna el valor False a internet_access y external_ip.

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

Si usas una red de VMware Engine antigua, habilita Controles de Servicio de VPC en la conexión de emparejamiento de VPC entre tu red VPC y VMware Engine mediante el comando gcloud services vpc-peerings enable-vpc-service-controls:

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

Habilitar Controles de Servicio de VPC es fundamental para enrutar el tráfico de Internet a través de una conexión on-premise o de una VPC de tu proyecto.

Cuando Controles de Servicio de VPC está habilitado, Google Cloud hace los siguientes cambios de enrutamiento en la red de VPC del productor de servicios (en este caso, el proyecto de inquilino de servicios emparejado con VMware Engine):

  • Elimina la ruta predeterminada de IPv4 (destino 0.0.0.0/0, siguiente salto a la pasarela de Internet predeterminada).
  • Empieza a reenviar el tráfico de Internet mediante la ruta predeterminada de la interconexión de VPCs.

Ejemplo:

Para habilitar Controles de Servicio de VPC en una conexión que empareja una red llamada "my-network" en el proyecto actual, usa el comando gcloud services vpc-peerings enable-vpc-service-controls:

gcloud services vpc-peerings enable-vpc-service-controls \
    --network=my-network \
    --service=servicenetworking.googleapis.com

Inhabilitar el enrutamiento del tráfico de Internet a través de una conexión local

Para inhabilitar el enrutamiento del tráfico de Internet desde las VMs de tu carga de trabajo a través de una conexión on-premise, deja de anunciar la ruta predeterminada (0.0.0.0/0) e inhabilita los Controles de Servicio de VPC en la conexión de emparejamiento de VPCs.

Si usas una red de VMware Engine antigua, inhabilita Controles de Servicio de VPC en la conexión de emparejamiento de VPC entre tu red VPC y VMware Engine. Para ello, usa el comando gcloud services vpc-peerings disable-vpc-service-controls:

gcloud services vpc-peerings disable-vpc-service-controls \
    --network=VPC_NETWORK_NAME \
    --service=servicenetworking.googleapis.com

Siguientes pasos