Reserva una dirección IP interna estática

Si una instancia de máquina virtual (VM) requiere una dirección IP interna fija que no cambie, puedes obtener una dirección IP interna estática para esa VM mediante una de las siguientes opciones:

Para obtener información sobre cómo administrar las direcciones IP internas secundarias, consulta Rangos de IP de alias.

En Compute Engine, cada instancia de VM puede tener varias interfaces de red. Cada interfaz puede tener una dirección IP externa, una dirección IP interna principal y una o más direcciones IP internas secundarias. Las reglas de reenvío pueden tener direcciones IP externas para el balanceo de cargas externo o direcciones internas para el balanceo de cargas interno. Para obtener información sobre las direcciones IP, consulta la documentación Direcciones IP.

Las IP internas estáticas proporcionan la habilidad de reservar direcciones IP internas del rango de IP configurado en la subred y, luego, asignan esas direcciones internas reservadas a los recursos según sea necesario. Reservar direcciones IP internas quita esa dirección del grupo de asignación dinámica y evita que se use para asignaciones automáticas. Reservar direcciones IP internas estáticas requiere permisos específicos de IAM para que solo los usuarios autorizados puedan reservar una dirección IP interna estática.

Gracias a la habilidad de reservar direcciones IP internas estáticas, siempre puedes usar la misma dirección IP para el mismo recurso, incluso si tienes que borrar y volver a crear el recurso.

Para reservar una dirección IP externa estática en lugar de una dirección IP interna, consulta Reserva una dirección externa estática.

Antes de comenzar

Permisos

Para reservar y administrar direcciones IP internas estáticas, debes tener la función compute.networkAdmin o uno o más de los siguientes permisos:

  • compute.addresses.create en la dirección IP
  • compute.addresses.createInternal en la dirección IP
  • compute.instances.update en la instancia de VM
  • compute.subnetworks.use en la subred

Restricciones

  • No puedes cambiar la dirección IP interna de un recurso existente. Por ejemplo, no puedes asignar una nueva dirección IP interna estática a una instancia de VM en ejecución. Sin embargo, puedes promover la dirección IP interna efímera de un recurso a una IP interna estática para que la dirección permanezca reservada incluso después de que se borre el recurso.

  • La cantidad de direcciones IP internas estáticas que puedes reservar no debe superar la cuota de tu proyecto. Para obtener más información, consulta las cuotas por proyecto en la documentación de VPC.

  • Un solo recurso a la vez puede usar una dirección IP interna estática.

  • No hay forma de saber si una dirección IP es estática o efímera después de asignarla a un recurso, excepto si se compara la dirección IP con la lista de las direcciones IP internas estáticas reservadas para ese proyecto. Usa el subcomando addresses list a fin de ver una lista de las direcciones IP internas estáticas disponibles para el proyecto.

  • La reserva de una dirección IP interna estática solo es compatible con las redes de VPC. No es compatible con las redes de modo heredado.

  • Borrar un recurso no libera de forma automática una dirección IP interna estática. Debes liberar las direcciones IP internas estáticas de forma manual cuando ya no las necesites.

Cómo reservar una dirección IP interna estática

Puedes reservar una dirección IP interna estática antes de crear el recurso asociado, o puedes crear el recurso con una dirección IP interna efímera y, luego, promover esa dirección IP efímera a una dirección IP interna estática.

Si deseas usar una dirección IP interna estática, debes tener una red de VPC para tu proyecto. Consulta Cómo usar redes VPC para obtener información sobre cómo crear la red de VPC.

Reserva una dirección específica y, luego, asóciala con un recurso específico

En este caso, debes reservar por separado una dirección IP interna estática y asígnala a un recurso. Resumen:

  1. Crea una subred desde la red de VPC.

  2. Reserva una dirección IP interna desde el rango de IP principal de la subred. En este paso, se crea un recurso de dirección IP interna que contiene esa dirección IP interna específica. Este paso también evita que Google Cloud asigne de forma automática esa dirección como una dirección efímera.

  3. Para usar la dirección IP interna reservada, asóciala con una instancia de VM o un balanceador de cargas interno cuando crees la VM o el recurso del balanceador de cargas.

Especifica una dirección IP interna efímera para un recurso y promueve la dirección

En este caso, debes promover una dirección IP interna efímera que aún esté asociada a un recurso para una dirección IP interna estática.

  1. Crea una subred.

  2. Crea una instancia de VM o un balanceador de cargas interno con una dirección IP efímera asignada de forma automática o una dirección IP elegida de forma específica.

  3. Promueve la dirección IP interna a una dirección IP interna estática.

Los dos métodos se describen en el siguiente diagrama.

Reserva de una IP interna.

Reservar una nueva dirección IP interna estática

Para poder reservar una dirección IP interna estática nueva, debes crear una red de VPC con una subred.

Console

Puedes reservar una dirección IP interna independiente con Cloud Console.

  1. En Cloud Console, ve a la página Redes de VPC.

    Ir a las redes de VPC

  2. Haz clic en la red de VPC en la que deseas reservar la IP estática nueva.
  3. Haz clic en Direcciones IP internas estáticas y, luego, en Reservar dirección estática.
  4. Ingresa un Nombre para esta dirección IP.
  5. Selecciona una subred.
  6. Si deseas especificar qué dirección IP deseas reservar, en Dirección IP estática, selecciona Permitirme elegir y, luego, completa una Dirección IP personalizada. De lo contrario, el sistema asignará de forma automática una dirección IP en la subred.
  7. Si quieres compartir esta IP en diferentes frontends, en Propósito, elige Compartido.
  8. Haz clic en Reservar para finalizar el proceso.

gcloud

Ejecuta el comando compute addresses create mediante la herramienta de gcloud:

gcloud compute addresses create ADDRESS_NAME [ADDRESS_NAME..] \
    --region REGION --subnet SUBNETWORK \
    --addresses IP_ADDRESS

Reemplaza lo siguiente:

  • ADDRESS_NAME: Son los nombres que deseas para una o más de las direcciones que se crearán.
  • REGION: Es la región para esta solicitud.
  • SUBNETWORK: Es la subred para esta dirección IP interna.
  • IP_ADDRESS: Es la dirección IP que se reservará, que debe estar dentro del rango de IP principal de la subred. Si no se especifica, se asignará una de forma automática desde la subred.

Por ejemplo, para reservar una dirección IP interna asignada de forma automática desde una subred, ejecuta este comando:

gcloud compute addresses create example-address-1 \
    --region us-central1 --subnet subnet-1

Para reservar una dirección IP interna específica desde una subred, ejecuta este comando:

gcloud compute addresses create example-address-1 \
    --region us-central1 --subnet subnet-1 --addresses 10.128.0.12

Puedes crear varias direcciones si usas más de un nombre de dirección. Sin embargo, todas las direcciones se reservarán en la misma subred. Por ejemplo:

gcloud compute addresses create example-address-1 example-address-2 \
    --region us-central1 --subnet subnet-1 \
    --addresses 10.128.0.12,10.128.0.13

API

Realiza una llamada al método addresses.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

El cuerpo de la solicitud debe incluir el addressType que debe ser INTERNAL, el name de la dirección y la subnetwork a la que pertenece la dirección IP. Puedes permitir que el sistema asigne de forma automática una dirección IP o especificar la address para una dirección IP específica. La dirección IP debe pertenecer al rango de direcciones IP principal de la subred.

{
  "addressType": "INTERNAL",
  "name": "ADDRESS_NAME",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
  "address": "IP_ADDRESS"
}

Por ejemplo:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses

{
  "name": "example-address-1",
  "addressType": "INTERNAL",
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet",
  "address": "10.128.0.12"
}

Terraform

Puedes usar un módulo de Terraform para crear una dirección IP interna.

En el siguiente ejemplo, los argumentos de Terraform tienen valores de ejemplo que puedes cambiar. En el ejemplo, se crean dos direcciones IP internas específicas:

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "3.0.0"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
  addresses  = ["10.0.0.3", "10.0.0.4"]
}

En el siguiente ejemplo, se crean dos direcciones IP internas asignadas de forma dinámica:

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "3.0.0"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
}

Promueve una dirección IP interna efímera en uso a una dirección estática

Si tienes direcciones IP efímeras que estén en uso, puedes promoverlas a direcciones IP internas estáticas para que permanezcan en el proyecto hasta que las quites de forma activa.

Antes de reservar una dirección IP existente, necesitarás el valor de la dirección IP que deseas promover. Realiza una solicitud describe al recurso para obtener la dirección IP. Por ejemplo, si promocionas una dirección IP que una instancia de VM use en la actualidad, usa el siguiente comando:

gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "networkIP"

La herramienta de gcloud muestra el valor networkIP, que es la IP interna que usa el recurso. Por ejemplo:

networkIP: 10.240.0.2

Luego, promueve la dirección.

Console

Para promover una dirección IP interna efímera a una dirección IP estática en Console, sigue estos pasos:

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Selecciona tu proyecto.
  3. Selecciona la instancia que deseas cambiar.
  4. Haz clic en la herramienta Editar en la parte superior de la página.
  5. Haz clic en la herramienta de edición en Interfaces de red.
  6. En Tipo de IP interna, selecciona Estática.
  7. Completa la información de una dirección IP estática.
  8. Haz clic en Listo para guardar los cambios.
  9. Haz clic en Guardar para actualizar tu instancia.

gcloud

Para promover una o más direcciones IP existentes, usa el comando compute addresses create y proporciona la marca --addresses con las IP internas explícitas que desees promover:

gcloud compute addresses create ADDRESS_NAME_1 [ADDRESS_NAME_2..] \
    --addresses IP_ADDRESS_1,[IP_ADDRESS_2,..] \
    --region REGION \
    --subnet SUBNETWORK

Reemplaza lo siguiente:

  • ADDRESS_NAME: Son los nombres que desees para la dirección. Declara los nombres en el mismo orden en el que declararás las direcciones IP. En este caso, ADDRESS_NAME_1 corresponde a IP_ADDRESS_1, y ADDRESS_NAME_2 a IP_ADDRESS_2.
  • IP_ADDRESS_1,[IP_ADDRESS_2,...]: Son las direcciones IP que se deben promover. Por ejemplo, 10.128.1.9
  • REGION: Es la región en la que se reservará esta dirección.
  • SUBNETWORK: Es la subred de esta solicitud.

Por ejemplo:

gcloud compute addresses create example-address-1 example-address-2 \
    --addresses 10.128.4.90,10.128.0.232 \
    --region us-central1 \
    --subnet subnet-1

API

Realiza una llamada al método addresses.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

El cuerpo de la solicitud debe incluir el addressType que debe ser INTERNAL, el name de la dirección, la address que se promoverá y la subnetwork a la que pertenece la dirección IP:

{
  "addressType": "INTERNAL",
  "address": "IP_ADDRESS",
  "name": "ADDRESS_NAME",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"
}

Por ejemplo:

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses

{
  "name": "example-address-1",
  "addressType": "INTERNAL",
  "address": "10.128.0.2",
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet"
}

Crea una instancia de VM con una dirección IP interna específica

Puedes elegir una dirección IP interna específica para asignar a una instancia cuando la creas. La dirección IP debe ser una dirección IP válida de la subred de la instancia y la dirección IP no debe estar en uso. La dirección IP permanece adjunta a la instancia hasta que borres la instancia, lo que libera la dirección IP de nuevo al grupo. Si detienes y reinicias la instancia, esta conserva la misma dirección IP interna.

Si no especificas una dirección IP, Compute Engine asigna de forma automática una desde la subred o la red. Puedes especificar una dirección IP interna mediante Google Cloud Console, la herramienta de gcloud o la API de Compute Engine.

Console

  1. En Cloud Console, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en Crear instancia.
  3. En la página Crear una instancia nueva, completa las propiedades que quieras para tu instancia.
  4. Expande la sección Administración, seguridad, discos, herramientas de redes, instancia única.
  5. Haz clic en Herramientas de redes.
  6. En Interfaces de redes, haz clic en la interfaz de red predeterminada para editarla.
  7. De forma opcional, en Red y Subred, selecciona la red y la subred que deseas usar.
  8. En IP interna principal, selecciona una opción de dirección IP interna de la lista desplegable.
  9. Haz clic en Listo para terminar de modificar la interfaz de red.
  10. Haz clic en Crear para crear la instancia.

gcloud

Especifica una dirección IP válida cuando crees la instancia:

gcloud compute instances create VM_NAME
     --private-network-ip IP_ADDRESS

Reemplaza lo siguiente:

  • VM_NAME: Es el nombre de la VM que deseas crear
  • IP_ADDRESS: Es la dirección IP que deseas asignar.

Si usas una red de modo de subred personalizado, también debes especificar la subred con el parámetro --subnet SUBNET.

API

Para crear una instancia de VM con una dirección IP interna estática, llama al método instances.insert y proporciona la propiedad networkInterfaces[].networkIP de forma explícita con la dirección IP interna que deseas asignar para la VM.

Por ejemplo:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/us-central1-f/machineTypes/e2-micro",
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
     }],
    "network": "global/networks/default",
    "networkIP": "IP_ADDRESS"
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/v20150818"
     }
   }]
 }

Reemplaza lo siguiente:

  • PROJECT_ID: ID del proyecto en el que se creará la VM
  • ZONE: Zona en la que se creará la VM
  • VM_NAME: Es el nombre de la máquina virtual.
  • IP_ADDRESS: La dirección IP que se asignará a la VM.

Si borras una instancia con una dirección IP especificada, la dirección vuelve al grupo de direcciones no asignadas. Si necesitas una dirección IP interna para conservar más allá de la vida útil de la instancia, puedes reservar una dirección IP interna estática.

Crea un balanceador de cargas interno con una dirección IP interna estática

Para crear un balanceador de cargas interno que use una dirección IP interna estática, sigue las instrucciones en los siguientes vínculos:

Usa una dirección IP interna estática para una interfaz de red secundaria

Cuando creas una instancia de VM con varias interfaces de red, puedes usar una dirección IP interna estática reservada para las interfaces de red primaria y secundaria.

Para asignar una dirección IP interna estática a una interfaz de red secundaria, sigue estos pasos:

  1. Primero, reserva una dirección IP interna estática. Por ejemplo, en el siguiente ejemplo, se reserva una dirección llamada my-second-ip-address en la región us-central1. Debido a que el comando omite la marca --addresses, Compute Engine reserva una dirección IP aleatoria:

    gcloud compute addresses create my-second-ip-address \
        --region us-central1 --subnet subnet-b
  2. Usa la dirección como la dirección IP para la interfaz secundaria cuando crees una instancia de VM. Por ejemplo:

    gcloud compute instances create my-instance \
        --image-family IMAGE_FAMILY \
        --image-project IMAGE_PROJECT \
        --network-interface subnet=subnet-a,no-address \
        --network-interface \
          subnet=subnet-b,private-network-ip=my-second-ip-address,no-address

Usa una IP interna estática con una VPC compartida

Puedes crear una IP interna estática reservada en una subred compartida de una red de VPC compartida. El objeto de la dirección IP se crea en el mismo proyecto de servicio que el recurso que lo usará, aunque su valor provenga del rango de IP disponibles en la subred compartida seleccionada de la red de VPC compartida. Consulta estas páginas para obtener más información sobre este caso práctico:

Enumera direcciones IP internas estáticas

En Cloud Console, puedes ver tus direcciones IP internas estáticas de una VPC seleccionada. Para ver todas las direcciones IP estáticas existentes, incluidas la dirección IP externa y la interna, ejecuta addresses list o realiza una solicitud GET a la API.

Console

  1. En Cloud Console, ve a la página Redes de VPC.

    Ir a las redes de VPC

  2. Haz clic en la red de VPC que deseas verificar.
  3. Haz clic en DIRECCIONES IP INTERNAS ESTÁTICAS para ver todas las direcciones IP internas estáticas reservadas en esta VPC.

gcloud

Usa el comando compute addresses list para enumerar todas las direcciones IP estáticas, incluidas las direcciones IP externas y las internas.

gcloud compute addresses list

API

Realiza una llamada al método addresses.list:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

Reemplaza lo siguiente:

  • REGION: El nombre de la región para esta solicitud.
  • PROJECT_ID: El ID del proyecto de esta solicitud

Para enumerar todas las direcciones de todas las regiones, llama al método aggregatedList.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses

Borra una dirección IP interna estática

Puedes borrar una dirección IP interna estática si ya no la necesitas. Puedes borrar una dirección, ya sea que otro recurso la use o no. Si un recurso usa la dirección, permanece adjunta al recurso hasta que este se borra. En ese caso, la dirección se devuelve al grupo de direcciones disponibles para otros proyectos.

Console

  1. En Cloud Console, ve a la página Redes de VPC.

    Ir a las redes de VPC

  2. Identifica la red de VPC que contiene la IP que deseas liberar y haz clic en su nombre.
  3. Haz clic en DIRECCIONES IP INTERNAS.
  4. Selecciona las direcciones IP que deseas liberar.
  5. Haz clic en LIBERAR y confirma esta operación. Para ello, haz clic en LIBERAR en el mensaje emergente.

gcloud

Ejecuta el comando compute addresses delete mediante la herramienta de gcloud:

gcloud compute addresses delete ADDRESS_NAME \
    --region REGION

Reemplaza los siguientes elementos:

  • ADDRESS_NAME: Es el nombre de la dirección que se borrará.
  • REGION: Es la región a la que pertenece la dirección.

Por ejemplo:

gcloud compute addresses delete example-address-to-delete \
    --region us-west1

API

Realiza una llamada al método addresses.delete.

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME

Por ejemplo, para borrar una dirección en la región us-west1, ejecuta el siguiente comando:

DELETE https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-west1/addresses/example-address-to-delete

¿Qué sigue?