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:
| Campo | Significado |
|---|---|
edge_id | UUID del router. Es la clave en todos los métodos de Edge |
owner | Propietario. Se devuelve a todos los roles |
vdc_id | El VDC al que pertenece el Edge compartido |
vm_id | Identificador de la VM del router. Solo está disponible para el rol Cluster master |
oper_status, oper_progress, oper_ts | Estado de la última operación, su progreso en porcentaje y su hora |
deploy_ts | Marca de tiempo de la aplicación de las reglas en el router |
modified | Hora del último cambio del registro |
base_version, ctrl_version, GI_object | Campos 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 puerto | Qué especifica |
|---|---|
port_id | Identificador del puerto. Lo aceptan edge-ratelimit y edge-remove-nic; las reglas hacen referencia al puerto mediante rule_ifname |
slot | Número de ranura (no mayor que 4) |
network_id | Red a la que está conectado el puerto |
ifname | Número de interfaz del puerto |
address | Dirección IPv4 del puerto, o null si no se ha asignado ninguna dirección IPv4 |
address_v6 | Lista de direcciones IPv6 del puerto (hasta 8). Una lista vacía si no se han asignado direcciones IPv6 |
mac | Dirección MAC del puerto |
ip_guard | Indicador de IP guard: 0 para deshabilitar, 1 para habilitar. Valor predeterminado: 1 |
ratelimit_mbits | Lí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-nicse 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_protoyrule_directionson 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_pcapen la configuración del clúster. - Toda la funcionalidad de Edge está controlada por el indicador de funcionalidad general
feature.edgeen 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 eventofeature.gate-denied.