Crear y usar redes virtuales para el tiempo de ejecución de máquinas virtuales en GDC

Este documento está dirigido a administradores de TI, operadores y especialistas en redes que ejecutan Google Distributed Cloud. En este documento se explica cómo crear y usar redes virtuales para admitir cargas de trabajo de máquinas virtuales que usen el tiempo de ejecución de máquinas virtuales en GDC. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas de usuario habituales de GKE.

Antes de empezar

Para completar este documento, necesitas tener acceso a los siguientes recursos:

Información general sobre las redes virtuales

Las redes se crean con recursos personalizados. Puedes crear una red en cualquier momento después de crear el clúster. La configuración de red de la interfaz del host y la asignación de ID de VLAN, si se ha definido, no se pueden cambiar después de crear una red.

La eliminación de redes está sujeta a algunas condiciones. Por ejemplo, el controlador de red rechaza la eliminación de una red cuando la usan recursos como máquinas virtuales o interfaces de red.

La definición de la red puede incluir la información de la puerta de enlace, las rutas y el DNS. También puedes habilitar el uso de un servidor DHCP externo. Estos ajustes de red se asignan de forma estática o dinámica en función de cómo se definan determinadas opciones de configuración de red.

Red de pods predeterminada

Cada clúster tiene un pod-network creado de forma predeterminada. Esta red no se puede cambiar. Las rutas de los CIDR de pods y servicios, así como la configuración de DNS, se rellenan automáticamente. La configuración de DNS usa los mismos valores que el clúster.

Las cargas de trabajo que necesiten una interfaz para acceder a la red de pods del clúster y no requieran ninguna opción de configuración específica pueden usar pod-network. Las rutas de pod-network siempre se configuran para asegurar el acceso del clúster y del servicio a las cargas de trabajo, aunque la puerta de enlace predeterminada no esté en la interfaz pod-network.

Este pod-network predeterminado te permite probar VM Runtime en GDC sin tener que seguir pasos adicionales para crear tus propias redes virtuales. En muchos de nuestros documentos se usa este valor predeterminado pod-network para reducir la complejidad de los ejemplos. Las necesidades de tus cargas de trabajo de máquinas virtuales determinan si este pod-network predeterminado es suficiente o si necesitas crear y usar tus propias redes virtuales.

.

El siguiente manifiesto YAML muestra un ejemplo de configuración para pod-network. El clúster ha rellenado los valores de las rutas, el DNS y el nombre de la interfaz:

  ​​apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    name: pod-network
  spec:
    routes:
    - to: 192.168.0.0/16
    - to: 10.96.0.0/12
    dnsConfig:
      nameservers:
      - 10.96.0.10

Crear y usar redes virtuales

Para admitir cargas de trabajo de producción, crea redes que admitan las funciones que necesites, como el uso de un servidor DHCP externo o de un ID de VLAN. Estas redes proporcionan conectividad de capa 2 (L2) a tus VMs.

Usar un servidor DHCP externo

El tiempo de ejecución de máquinas virtuales en GDC no proporciona servidores DHCP. Debes especificar manualmente las direcciones IP de las VMs o configurar el uso de servidores DHCP externos. Si habilitas el uso de un servidor DHCP externo, puedes omitir la configuración de los ajustes de DNS y de la pasarela si los proporciona DHCP.

Para crear una red que use un servidor DHCP externo, sigue estos pasos:

  1. Crea un archivo de manifiesto Network, como use-dhcp-network.yaml, en el editor que prefieras:

    nano use-dhcp-network.yaml
    
  2. Copia y pega el siguiente manifiesto YAML:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    Sustituye los siguientes valores:

    • NETWORK_NAME: el nombre de tu red.
    • INTERFACE_NAME: el nombre de la interfaz de tu nodo de Google Distributed Cloud al que quieres asociar la red. Especifica el nombre de la interfaz física de tu nodo que quieras usar. Todos los nodos de tu clúster deben tener el mismo nombre de interfaz.

    En este manifiesto de Network, se han definido los siguientes valores:

    • La opción type está configurada como L2. Con este ajuste, las cargas de trabajo solo pueden tener un adjunto de capa 2 a esta red. Esta es la única red type que puedes crear en el entorno de ejecución de máquinas virtuales de GDC.
    • La opción externalDHCP4 está configurada como true. Este ajuste habilita el DHCP externo para la red. El servidor DHCP externo se encarga de la asignación de direcciones IPv4, las rutas, la pasarela y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en tu editor.

  4. Crea la red con kubectl:

    kubectl apply -f use-dhcp-network.yaml
    

Definir manualmente la configuración de red

El tiempo de ejecución de máquinas virtuales en GDC no proporciona servidores DHCP. Debes especificar manualmente las direcciones IP de las VMs o configurar el uso de servidores DHCP externos. Si especificas las direcciones IP manualmente, debes definir los ajustes de red de DNS, rutas y pasarela predeterminada.

Para crear una red con ajustes de red especificados manualmente para las VMs, sigue estos pasos:

  1. Crea un archivo de Network manifiesto, como manual-network.yaml, en el editor que prefieras:

    nano manual-network.yaml
    
  2. Copia y pega el siguiente manifiesto YAML:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      routes:
      - to: "ROUTE_ADDRESS"
      gateway4: GATEWAY_ADDRESS
      dnsConfig:
        nameservers:
        - NAMESERVER_ADDRESS
    

    Sustituye los siguientes valores:

    • NETWORK_NAME: el nombre de tu red.
    • INTERFACE_NAME: el nombre de la interfaz de tu nodo de Google Distributed Cloud al que quieres asociar la red. Especifica el nombre de la interfaz física de tu nodo que quieras usar. Todos los nodos de tu clúster deben tener el mismo nombre de interfaz.
    • ROUTE_ADDRESS: rutas opcionales en notación CIDR que se configurarán en cada máquina virtual que se conecte a esta red.
    • GATEWAY_ADDRESS: la dirección IP de la pasarela que usarán tus VMs.
    • NAMESERVER_ADDRESS: una o varias direcciones IP de servidor de nombres DNS que usarán tus máquinas virtuales.
  3. Guarda y cierra el manifiesto de Network en tu editor.

  4. Crea la red con kubectl:

    kubectl apply -f manual-network.yaml
    

Usar un ID de VLAN

Cuando creas redes virtuales, puedes definir VLANs etiquetadas. Estas asignaciones de VLAN te ayudan a aislar el tráfico de red en función de los requisitos de tus cargas de trabajo y de tus necesidades de aislamiento. En una red AnthosManaged, el clúster tiene permiso para crear y eliminar la interfaz de VLAN en cada nodo.

Para crear una red que defina una asignación de VLAN, sigue estos pasos:

  1. Crea un archivo de Network manifiesto, como vlan-network.yaml, en el editor que prefieras:

    nano vlan-network.yaml
    
  2. Copia y pega el siguiente manifiesto YAML:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: AnthosManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    Sustituye los siguientes valores:

    • NETWORK_NAME: el nombre de tu red.
    • INTERFACE_NAME: el nombre de la interfaz de tu nodo de Google Distributed Cloud al que quieres asociar la red. Especifica el nombre de la interfaz física de tu nodo que quieras usar. Todos los nodos de tu clúster deben tener el mismo nombre de interfaz.
    • VLAN_ID: el ID de VLAN para el que quieres etiquetar el tráfico.

    En este manifiesto de Network, se han definido los siguientes valores:

    • Las cargas de trabajo solo pueden tener un archivo adjunto L2 a esta red.
    • La red es AnthosManaged. Este es el ciclo de vida predeterminado si no se especifica.
      • En este modo, el clúster tiene permiso para crear y eliminar la interfaz de VLAN en todos los nodos, como INTERFACE_NAME.VLAN_ID.
      • Si quieres crear o ya has creado las interfaces de VLAN en los nodos, asigna el valor networkLifecycle a UserManaged, tal como se muestra en la siguiente sección.
    • La red tiene habilitado el protocolo DHCP externo. El servidor DHCP externo se encarga de la asignación de direcciones IPv4, las rutas, la pasarela y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en tu editor.

  4. Crea la red con kubectl:

    kubectl apply -f vlan-network.yaml
    

Crear una red gestionada por el usuario

En la siguiente red virtual de ejemplo, la red está gestionada por el usuario, a diferencia de la gestionada por Anthos de un ejemplo anterior. En las redes gestionadas por el usuario, eres responsable de crear o eliminar la interfaz de VLAN en el host.

Para crear una red en modo gestionado por el usuario y definir manualmente la configuración de la interfaz VLAN, sigue estos pasos:

  1. Crea un archivo de manifiesto Network, como user-managed-network.yaml, en el editor que prefieras:

    nano user-managed-network.yaml
    
  2. Copia y pega la siguiente definición de YAML:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: NETWORK_NAME
    spec:
      type: L2
      networkLifecycle: UserManaged
      l2NetworkConfig:
        vlanID: VLAN_ID
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    Sustituye los siguientes valores:

    • NETWORK_NAME: el nombre de tu red.
    • INTERFACE_NAME: la interfaz del host a la que se va a conectar la red.
    • VLAN_ID: el ID de VLAN para el que quieres etiquetar el tráfico.

    En este manifiesto de Network, se han definido los siguientes valores:

    • Las cargas de trabajo solo pueden tener un archivo adjunto L2 a esta red.
    • La red es UserManaged. Debes crear o eliminar la interfaz de VLANVLAN_ID en todos los nodos antes de crear la red o después de eliminarla.
    • La red tiene habilitado el protocolo DHCP externo. El servidor DHCP externo se encarga de la asignación de direcciones IPv4, las rutas, la pasarela y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en tu editor.

  4. Crea la red con kubectl:

    kubectl apply -f user-managed-network.yaml
    

Conectar una VM a una red

La configuración de red de tu VM, como DNS y DHCP, se asigna de forma estática o dinámica en función de cómo se definan determinadas opciones de configuración de red:

  • Si configuras una dirección IP estática en la VM, no se enviará ninguna consulta a un servidor DHCP. La información adicional para configurar la pasarela y la ruta debe proceder del recurso de red.
  • Si no configuras una dirección IP estática en la máquina virtual, se envía una consulta al servidor DHCP. La VM obtiene toda la información del servidor DHCP e ignora cualquier configuración que definas en el recurso de red.
  • Si DHCP externo no está configurado como true en el recurso de red, debes configurar una dirección IP estática para la VM. El resto de la información procede de la configuración que definas en el recurso de red.

Para crear una VM que se conecte a una red, sigue estos pasos:

CLI

  • Para crear una máquina virtual con kubectl, sigue estos pasos:

    kubectl virt create vm VM_NAME \
      --image ubuntu20.04 \
      --network NETWORK_NAME
    

    Sustituye los siguientes valores:

    • VM_NAME: el nombre de tu máquina virtual.
    • NETWORK_NAME: el nombre de la red a la que quieres conectarte.
      • Si la red está configurada para permitir el uso de servidores DHCP externos, la VM recibe una asignación de dirección IP automáticamente. Si necesitas definir una dirección IP estática, añade el parámetro y el valor opcionales --ip IP_ADDRESS.

Archivo de manifiesto

Para crear una VM mediante un manifiesto YAML, sigue estos pasos:

  1. Crea un archivo de VirtualMachine manifiesto, como my-vm.yaml, en el editor que prefieras:

    nano my-vm.yaml
    
  2. Copia y pega el siguiente manifiesto YAML:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          ipAddresses:
            - IP_ADDRESS
          default: true
      disks:
        - virtualMachineDiskName: VM_NAME-boot-dv
          boot: true
    

    En este manifiesto YAML, define los siguientes ajustes:

    • VM_NAME: el nombre de tu máquina virtual.
    • NETWORK_NAME: el nombre de la red a la que quieres conectarte.
    • IP_ADDRESS: la dirección IP en notación CIDR que se asignará a tu VM, como 192.0.2.10/24.
      • Si tu red está configurada para permitir el uso de servidores DHCP externos, elimina este campo del manifiesto VirtualMachine.

    El disco de arranque llamado VM_NAME-boot-dv ya debe existir. Para obtener más información, consulta Crear un disco de arranque de VM.

  3. Guarda y cierra el manifiesto de VirtualMachine en tu editor.

  4. Crea la VM con kubectl:

    kubectl apply -f my-vm.yaml
    

Siguientes pasos