Saltar al contenido principal

Router Edge

Problema y finalidad​

Mientras las máquinas de un VDC (centro de datos virtual) solo necesiten su propia red, no necesitan un router. En cuanto el tráfico debe circular entre redes y hacia el exterior del VDC, y determinados servicios deben publicarse en otra dirección y otro puerto, se necesita un punto de conexión: un router que conozca varias redes y mantenga reglas de filtrado de tráfico y de traducción de direcciones.

Edge, un router definido por software (Edge), proporciona este punto de conexión. Se ejecuta dentro del clúster, se conecta a las redes a través de sus puertos y se administra mediante las mismas llamadas a la API que los demás objetos de vStack Center. No necesita un dispositivo de hardware independiente ni una consola de administración aparte: SDN (redes definidas por software) significa que el router es un objeto administrado del clúster, igual que una VM o una red.

Modelo y entidades​

Edge es una máquina virtual administrada por vStack Center. El método edge-create construye una solicitud sintética vms-create y la transfiere al agente de VM. Los métodos edge-start, edge-stop y edge-restart se corresponden con vms-start, vms-stop y vms-restart, y edge-remove se corresponde con vms-remove. La consecuencia práctica: el router consume recursos del clúster como una VM y está sujeto a las mismas restricciones. Por ejemplo, solo se puede agregar un puerto cuando la máquina está detenida. Solo el rol Cluster master puede ver el identificador de la VM (vm_id) en las respuestas de la API.

El propio objeto Edge se describe mediante estos campos:

CampoSignificado
edge_idUUID del router. Es la clave en todos los métodos de Edge
ownerPropietario. Se devuelve a todos los roles
vdc_idEl VDC al que pertenece el Edge compartido
vm_idIdentificador de la VM del router. Solo está disponible para el rol Cluster master
oper_status, oper_progress, oper_tsEstado de la última operación, su progreso en porcentaje y su hora
deploy_tsMarca de tiempo de la aplicación de las reglas en el router
modifiedHora del último cambio del registro
base_version, ctrl_version, GI_objectCampos internos de control de versiones y de federación GI

Edge se conecta a las redes a través de puertos, con un máximo de cuatro. Un puerto describe la relación entre una red, una ranura y direcciones:

Campo del puertoQué especifica
port_idIdentificador del puerto. Lo aceptan edge-ratelimit y edge-remove-nic; las reglas hacen referencia al puerto mediante rule_ifname
slotNúmero de ranura (no mayor que 4)
network_idRed a la que está conectado el puerto
ifnameNúmero de interfaz del puerto
addressDirección IPv4 del puerto, o null si no se ha asignado ninguna dirección IPv4
address_v6Lista de direcciones IPv6 del puerto (hasta 8). Una lista vacía si no se han asignado direcciones IPv6
macDirección MAC del puerto
ip_guardIndicador de IP guard: 0 para deshabilitar, 1 para habilitar. Valor predeterminado: 1
ratelimit_mbitsLímite de ancho de banda en Mbps. 0 significa sin límite

Las reglas de Edge se almacenan en dos conjuntos numerados: nat para la traducción de direcciones y fw para el filtrado de tráfico (firewall). La clave dentro de un conjunto es el número de regla; para las reglas de firewall, el número está en el rango 100–32767. Junto con los conjuntos se devuelve el campo incarnation: es un marcador del conjunto que se envía al router con las reglas.

Cómo funciona​

La configuración y la ejecución de las reglas están separadas. Los métodos edge-add-fw-rule, edge-add-nat-rule, edge-remove-fw-rule y edge-remove-nat-rule son síncronos y solo trabajan con la base de datos de vStack Center: una regla aparece en el conjunto o se elimina de él, pero todavía no afecta al tráfico. Una llamada independiente, edge-deploy-rules, realiza el despliegue: reúne el conjunto completo (incarnation, nat, fw) desde la base de datos y lo envía íntegro al agente de Edge.

Esta separación tiene dos consecuencias. En primer lugar, hasta que se aplica el conjunto, el conjunto de la base de datos difiere del conjunto del router, por lo que la edición de reglas termina con la aplicación y no con la adición de una regla. En segundo lugar, la aplicación sustituye el conjunto completo en lugar de agregar cambios individuales: el conjunto de la base de datos siempre contiene el estado deseado completo.

Las operaciones asíncronas de Edge pasan por agentes, y el agente depende del tipo de operación. Las operaciones del ciclo de vida de la máquina (iniciar, detener, reiniciar, eliminar) van al agente de VM, las operaciones de puertos (edge-add-nic, edge-remove-nic) van al agente de Storage, y las reglas y el registro del filtro de paquetes van al agente de Edge. Una llamada de este tipo devuelve primero una respuesta intermedia, {"message": "relayed"}. Esto confirma el reenvío, no proporciona el resultado. La respuesta final llega como una devolución de llamada (callback) del agente.

El ciclo de vida funciona de la siguiente manera. edge-create crea la VM del router, registra Edge en la base de datos e inicia la máquina; no es necesario iniciarla por separado después de la creación. A continuación viene la fase de funcionamiento: se agregan y eliminan puertos, se limita el ancho de banda de los puertos y se editan y aplican los conjuntos de reglas. Detener e iniciar cambian el estado del router sin modificar su configuración. edge-remove elimina Edge y todas sus reglas de la base de datos y, a continuación, elimina la VM.

El acceso se basa en privilegios con ámbito. El rol Cluster master puede trabajar con cualquier Edge del clúster. Un administrador de VDC crea routers en su propio VDC, ve todos los routers que hay en él y lee sus conjuntos de reglas. Solo puede administrar los routers que creó: puertos, ancho de banda, inicio y detención, edición y aplicación de reglas, y eliminación. Cada una de estas operaciones devuelve -403 para un router de su VDC que pertenezca a otra persona, incluida la eliminación.

Los usuarios y observadores del VDC pueden leer la lista de routers de su propio VDC, sus fichas y sus conjuntos de reglas. Para este acceso no es necesario ser propietario del router.

El registro del filtro de paquetes ofrece visibilidad sobre el comportamiento de las reglas. El método edge-get-pfloggs recupera el registro del router como un archivo PCAP. Ábralo en un analizador de tráfico para ver qué paquetes coincidieron realmente con las reglas.

Limitaciones​

  • Un Edge no puede tener más de cuatro puertos; el número de ranura no puede ser mayor que 4.
  • Solo se puede agregar un puerto cuando la VM del router está detenida (o en estado de error o de creación). La llamada edge-add-nic se rechaza en un Edge en ejecución.
  • Los números de las reglas de firewall están limitados al rango 100–32767. No hay un rango definido para los números de las reglas NAT.
  • Se pueden asignar manualmente hasta 8 direcciones IPv6 por puerto. Para cada dirección se comprueba el formato, la pertenencia a la subred IPv6 de la red (net_cidr_v6), que no figure entre las direcciones reservadas (ippool_reserved_v6) ni entre las ya asignadas (ippool_port_allocations), y que sea única dentro de la solicitud.
  • Los valores de rule_action, rule_proto y rule_direction son identificadores numéricos de las listas de referencia del clúster, no nombres de acciones y protocolos.
  • Para aplicar reglas se necesita un Edge en ejecución con un progreso del 100 % y el bootstrap completado. Un router detenido o que todavía se está iniciando no acepta reglas.
  • El registro del filtro de paquetes se conserva durante 24 horas, y el agente limita las exportaciones a 3000 paquetes. El propio método está controlado por el indicador de funcionalidad feature.edge_log_pcap en la configuración del clúster.
  • Toda la funcionalidad de Edge está controlada por el indicador de funcionalidad general feature.edge en la configuración del clúster. Mientras está deshabilitado, cualquier solicitud al router devuelve el código -25030, "The edge feature has not been enabled". Las operaciones de lectura también se bloquean: la lista de routers, la ficha del router y los conjuntos de reglas. Cada uno de estos rechazos se registra en el registro de seguridad como un evento feature.gate-denied.

Lecturas adicionales​