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

Este documento está dirigido a propietarios de aplicaciones y administradores de plataformas que ejecutan GKE en Bare Metal. 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.

Antes de comenzar

Para completar este documento, necesitas acceso 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 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 VM 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.

pod-network predeterminada

Cada clúster tiene una pod-network creada de forma predeterminada para ti. No se puede cambiar esta red. Las rutas para el 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.

Este pod-network predeterminado te permite probar el entorno de ejecución de la VM en GDC sin realizar pasos adicionales para crear tus propias redes virtuales. Muchos de nuestros documentos usan esta pod-network predeterminada para reducir la complejidad de los ejemplos. Las necesidades de tus cargas de trabajo de VM determinan si esta pod-network predeterminada es suficiente o si necesitas crear y usar tus propias redes virtuales.

En el siguiente manifiesto YAML, se muestra una configuración de muestra para la pod-network. El clúster propagó 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 el uso de un ID de VLAN. Estas redes proporcionan conectividad de capa 2 (L2) para tus VM.

Usa un servidor de DHCP externo

El entorno de ejecución de VM en GDC no proporciona servidores DHCP. Debes especificar direcciones IP para las VMs de forma manual 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 de DNS y de puerta de enlace si los proporciona DHCP.

Para crear una red que use un servidor DHCP externo, completa los siguientes pasos:

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

    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
    

    Reemplaza los siguientes valores:

    • NETWORK_NAME: Es el nombre de tu red.
    • INTERFACE_NAME: Es el nombre de la interfaz de tu nodo de GKE en Bare Metal al que se conectará la red. Especifica el nombre de la interfaz física en el nodo que deseas usar. Todos los nodos del clúster deben tener el mismo nombre de interfaz.

    En este manifiesto Network, se establecen los siguientes valores:

    • type se configura como L2. Con esta configuración, 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 VM en GDC.
    • externalDHCP4 se configura como true. Esta configuración habilita el DHCP externo para la red. El servidor DHCP externo es responsable de la asignación de direcciones 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 Network en tu editor.

  4. Crea la red mediante 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. Debes especificar direcciones IP para las VMs de forma manual 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.

A fin de crear una red con una configuración de red especificada de forma manual para las VM, completa los siguientes pasos:

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

    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
    

    Reemplaza los siguientes valores:

    • NETWORK_NAME: Es el nombre de tu red.
    • INTERFACE_NAME: Es el nombre de la interfaz de tu nodo de GKE en Bare Metal al que se conectará la red. Especifica el nombre de la interfaz física en el nodo que deseas usar. 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 VM.
    • NAMESERVER_ADDRESS: Es una o más direcciones IP del servidor de nombres de DNS para que usen tus VM.
  3. Guarda y cierra el manifiesto Network en tu editor.

  4. Crea la red mediante kubectl:

    kubectl apply -f manual-network.yaml
    

Usa un ID de VLAN

Cuando creas redes virtuales, puedes definir VLAN etiquetadas. Estas asignaciones de VLAN te ayudan a aislar el tráfico de red según tus requisitos de carga de trabajo y necesidades de aislamiento. En una red 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 Network, como vlan-network.yaml, en el editor que elijas:

    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
    

    Reemplaza los siguientes valores:

    • NETWORK_NAME: Es el nombre de tu red.
    • INTERFACE_NAME: Es el nombre de la interfaz de tu nodo de GKE en Bare Metal al que se conectará la red. Especifica el nombre de la interfaz física en el nodo que deseas usar. Todos los nodos del clúster deben tener el mismo nombre de interfaz.
    • VLAN_ID: Es el ID de VLAN para el que deseas etiquetar el tráfico.

    En este manifiesto Network, se establecen los siguientes valores:

    • Las cargas de trabajo solo pueden tener un adjunto L2 a esta red.
    • La red es AnthosManaged. Si no se especifica, esta 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 es responsable de la asignación de direcciones 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 Network en tu editor.

  4. Crea la red mediante 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 administrada por Anthos en un ejemplo anterior. En las redes administradas por el usuario, eres responsable 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 Network, como user-managed-network.yaml, en el editor que elijas:

    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 tu 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 deseas etiquetar el tráfico.

    En este manifiesto Network, se establecen los siguientes valores:

    • Las cargas de trabajo solo pueden tener un adjunto 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 se borre la red.
    • La red tiene DHCP externo habilitado. El servidor DHCP externo es responsable de la asignación de direcciones 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 Network en tu editor.

  4. Crea la red mediante kubectl:

    kubectl apply -f user-managed-network.yaml
    

Conecta una VM a una red

La configuración de red para la VM, como DNS y 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 envía ninguna consulta a un servidor de 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 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 se establece 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: el nombre de tu VM.
    • NETWORK_NAME: El nombre de tu 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.

Manifest

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

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

    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 la siguiente configuración:

    • VM_NAME: el nombre de tu VM.
    • NETWORK_NAME: El nombre de tu red a la que te conectarás.
    • IP_ADDRESS: La dirección IP en notación de CIDR que se asignará a la VM, como 192.0.2.10/24.
      • Si tu red está configurada para permitir el uso de servidores DHCP externos, quita este campo del manifiesto 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 VirtualMachine en tu editor.

  4. Crea la VM mediante kubectl:

    kubectl apply -f my-vm.yaml
    

¿Qué sigue?