Crea y usa redes virtuales para el entorno de ejecución de VM en GDC

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

Antes de empezar

Para completar este documento, necesitas acceder a los siguientes recursos:

Descripción general de las redes virtuales

Las redes se crean con recursos personalizados. Después de crear el clúster, puedes crear una red en cualquier momento. La configuración de red para la interfaz del host y la asignación del ID de la VLAN, si está definida, no se puede 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 otros recursos, como las VMs o las interfaces de red.

La definición de red puede incluir la puerta de enlace, las rutas y la información de DNS. También puedes habilitar el uso de un servidor DHCP externo. Esta configuración de red se asigna de forma estática o dinámica, según cómo se definan ciertas opciones de configuración de red.

Red de Pods predeterminada

Cada clúster tiene una pod-network que se crea de forma predeterminada para ti. Esta red no se puede cambiar. Las rutas de CIDR del Pod, el CIDR del servicio y la configuración de DNS se propagan de forma automática. La configuración de DNS usa los mismos valores que el clúster.

Las cargas de trabajo que necesitan una interfaz para acceder a la red del Pod del clúster y no necesitan ninguna opción de configuración específica pueden usar pod-network. Las rutas de pod-network siempre están configuradas para garantizar que el clúster y el servicio tengan acceso a las cargas de trabajo, aunque la puerta de enlace predeterminada no esté en la interfaz de pod-network.

Esta pod-network predeterminada permite probar el entorno de ejecución de VM en GDC sin realizar pasos adicionales para crear tus propias redes virtuales. En muchos de nuestros documentos, se usa esta pod-network predeterminada simplificar los ejemplos. Las necesidades de tus cargas de trabajo de VM determinan si esta pod-network predeterminada es suficiente o si debes crear y usar tus propias redes virtuales.

En el siguiente manifiesto de YAML, se muestra una configuración de ejemplo para la pod-network. El clúster propagó los valores de rutas, 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

Crea y usa redes virtuales

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

Usa un servidor DHCP externo

El entorno de ejecución de VM en GDC no proporciona servidores DHCP. Por ende, debes especificar de forma manual direcciones IP para las VMs o configurar el uso de servidores DHCP externos. Cuando habilitas el uso de un servidor DHCP externo, puedes omitir la configuración de los ajustes del DNS y de la puerta de enlace si DHCP los proporciona.

Para crear una red que use un servidor DHCP externo, sigue los pasos que se indican a continuación:

  1. Crea un manifiesto de Network, como use-dhcp-network.yaml, en el editor de tu preferencia:

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

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

    Reemplaza los siguientes valores:

    • NETWORK_NAME: es el nombre de la red.
    • INTERFACE_NAME: es el nombre de la interfaz de tu nodo de Google Distributed Cloud al que se conectará la red. Especifica el nombre de la interfaz física en el nodo que usarás. Todos los nodos del clúster deben tener el mismo nombre de interfaz.

    En este manifiesto de Network, se establecen los siguientes valores:

    • type se establece como L2. Con este parámetro de configuración, las cargas de trabajo solo pueden tener una conexión de capa 2 a esta red. Este es el único type de red que puedes crear en un entorno de ejecución de VM en GDC.
    • externalDHCP4 se establece como true. Este parámetro de configuración habilita el DHCP externo para la red. El servidor DHCP externo se encarga de asignar la dirección IPv4, las rutas, la puerta de enlace y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en el editor.

  4. Crea la red con kubectl:

    kubectl apply -f use-dhcp-network.yaml
    

Define la configuración de red de forma manual

El entorno de ejecución de VM en GDC no proporciona servidores DHCP. Por ende, debes especificar de forma manual direcciones IP para las VMs o configurar el uso de servidores DHCP externos. Si especificas direcciones IP de forma manual, debes definir la configuración de red para el DNS, las rutas y la puerta de enlace predeterminada.

Para crear una red con una configuración de red especificada de forma manual para las VMs, completa los siguientes pasos:

  1. Crea un manifiesto de Network, como manual-network.yaml, en el editor de tu preferencia:

    nano manual-network.yaml
    
  2. Copia y pega el siguiente manifiesto de 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
    

    Reemplaza los siguientes valores:

    • NETWORK_NAME: es el nombre de la red.
    • INTERFACE_NAME: es el nombre de la interfaz de tu nodo de Google Distributed Cloud al que se conectará la red. Especifica el nombre de la interfaz física en el nodo que usarás. Todos los nodos del clúster deben tener el mismo nombre de interfaz.
    • ROUTE_ADDRESS: son rutas opcionales en la notación CIDR que se configurarán en cada VM que se conecte a esta red.
    • GATEWAY_ADDRESS: es la dirección IP de la puerta de enlace que deben usar las VMs.
    • NAMESERVER_ADDRESS: es una o más direcciones IP del servidor de nombres de DNS que usarán las VMs.
  3. Guarda y cierra el manifiesto de Network en el editor.

  4. Crea la red con kubectl:

    kubectl apply -f manual-network.yaml
    

Usa un ID de VLAN

Cuando creas redes virtuales, puedes definir VLAN etiquetadas. Estas asignaciones de VLAN sirven para aislar el tráfico de red según tus requisitos de carga de trabajo y necesidades de aislamiento. En una red de AnthosManaged, el clúster tiene permiso para crear y borrar la interfaz de VLAN en cada nodo.

Para crear una red que defina una asignación de VLAN, completa los siguientes pasos:

  1. Crea un manifiesto de Network, como vlan-network.yaml, en el editor de tu preferencia:

    nano vlan-network.yaml
    
  2. Copia y pega el siguiente manifiesto de 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
    

    Reemplaza los siguientes valores:

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

    En este manifiesto de Network, se establecen los siguientes valores:

    • Las cargas de trabajo solo pueden tener una conexión L2 a esta red.
    • La red es AnthosManaged. Si no se especifica, este parámetro de configuración es el ciclo de vida predeterminado.
      • En este modo, el clúster tiene permiso para crear y borrar la interfaz de VLAN en cada nodo, como INTERFACE_NAME.VLAN_ID.
      • Si quieres crear las interfaces de VLAN en los nodos o ya las creaste, establece el valor networkLifecycle en UserManaged, como se muestra en la siguiente sección.
    • La red tiene DHCP externo habilitado. El servidor DHCP externo se encarga de asignar la dirección IPv4, las rutas, la puerta de enlace y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en el editor.

  4. Crea la red con kubectl:

    kubectl apply -f vlan-network.yaml
    

Crea una red administrada por el usuario

En la siguiente red virtual de ejemplo, la red es administrada por el usuario, a diferencia de un ejemplo anterior en el que es administrada por Anthos. En las redes administradas por el usuario, tú debes encargarte de crear o borrar la interfaz de VLAN en el host.

Para crear una red en un modo administrado por el usuario y definir de forma manual la configuración de la interfaz de VLAN, completa los siguientes pasos:

  1. Crea un manifiesto de Network, como user-managed-network.yaml, en el editor de tu preferencia:

    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
    

    Reemplaza los siguientes valores:

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

    En este manifiesto de Network, se establecen los siguientes valores:

    • Las cargas de trabajo solo pueden tener una conexión L2 a esta red.
    • La red es UserManaged. Debes crear o borrar la interfaz VLAN_ID de VLAN en cada nodo antes de que se cree la red o después de que esta se borre.
    • La red tiene DHCP externo habilitado. El servidor DHCP externo se encarga de asignar la dirección IPv4, las rutas, la puerta de enlace y la configuración de DNS de las cargas de trabajo conectadas a esta red.
  3. Guarda y cierra el manifiesto de Network en el editor.

  4. Crea la red con kubectl:

    kubectl apply -f user-managed-network.yaml
    

Conecta una VM a una red

La configuración de red para la VM, como el DNS y el DHCP, se asigna de forma estática o dinámica según cómo se definan ciertas 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 puerta de enlace y la ruta debe provenir del recurso de red.
  • Si no configuras una dirección IP estática en la VM, se enviará una consulta al servidor DHCP. La VM obtiene toda la información del servidor DHCP y, además, ignora cualquier configuración que definas en el recurso de red.
  • Si el DHCP externo no está establecido en true en el recurso de red, debes configurar una dirección IP estática para la VM. El resto de la información proviene de la configuración que defines en el recurso de red.

Para crear una VM que se conecte a una red, completa los siguientes pasos:

CLI

  • Para crear una VM con kubectl, completa los siguientes pasos:

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

    Reemplaza los siguientes valores:

    • VM_NAME: es el nombre de la VM.
    • NETWORK_NAME: es el nombre de la red a la que te conectarás.
      • Si la red está configurada para permitir el uso de servidores DHCP externos, la VM obtiene una asignación de dirección IP de forma automática. Si necesitas definir una dirección IP estática, agrega el parámetro y el valor --ip IP_ADDRESS opcionales.

Manifiesto

Para crear una VM con un manifiesto de YAML, completa los siguientes pasos:

  1. Crea un manifiesto de VirtualMachine, como my-vm.yaml, en el editor de tu preferencia:

    nano my-vm.yaml
    
  2. Copia y pega el siguiente manifiesto de 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 de YAML, define la siguiente configuración:

    • VM_NAME: es el nombre de la VM.
    • NETWORK_NAME: es el nombre de la red a la que te conectarás.
    • IP_ADDRESS: es la dirección IP en notación CIDR que se asignará a la VM, como 192.0.2.10/24.
      • Si la red está configurada para permitir el uso de servidores DHCP externos, quita este campo del manifiesto de VirtualMachine.

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

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

  4. Crea la VM con kubectl:

    kubectl apply -f my-vm.yaml
    

¿Qué sigue?