Roteador edge
Problema e finalidade
Enquanto as máquinas de um VDC (data center virtual) precisarem apenas da própria rede, elas não precisam de um roteador. Quando o tráfego precisa circular entre redes e para fora do VDC, e serviços específicos precisam ser publicados em outro endereço e outra porta, é necessário um ponto de conexão: um roteador que conheça várias redes e mantenha regras de filtragem de tráfego e de tradução de endereços.
O Edge, um roteador definido por software (Edge), fornece esse ponto de conexão. Ele é executado dentro do cluster, conecta-se às redes por meio de suas portas e é gerenciado pelas mesmas chamadas de API que os demais objetos do vStack Center. Ele não exige um appliance de hardware nem um console de administração separados: SDN (rede definida por software) significa que o roteador é um objeto gerenciado do cluster, assim como uma VM ou uma rede.
Modelo e entidades
O Edge é uma máquina virtual gerenciada pelo vStack Center. O método edge-create monta
uma requisição sintética vms-create e a repassa ao agente de VMs. Os métodos edge-start,
edge-stop e edge-restart correspondem a vms-start, vms-stop e
vms-restart, e edge-remove corresponde a vms-remove. A consequência prática:
o roteador consome recursos do cluster como uma VM e está sujeito às mesmas
restrições. Por exemplo, uma porta só pode ser adicionada quando a máquina está parada.
Somente o papel Cluster master vê o identificador da VM (vm_id) nas respostas da API.
O próprio objeto Edge é descrito pelos seguintes campos:
| Campo | Significado |
|---|---|
edge_id | UUID do roteador. A chave em todos os métodos de Edge |
owner | Proprietário. Retornado para todos os papéis |
vdc_id | O VDC ao qual o Edge compartilhado pertence |
vm_id | Identificador da VM do roteador. Disponível apenas para o papel Cluster master |
oper_status, oper_progress, oper_ts | Status da última operação, seu progresso em porcentagem e seu horário |
deploy_ts | Horário da aplicação das regras no roteador |
modified | Horário da última alteração do registro |
base_version, ctrl_version, GI_object | Campos internos de versionamento e de federação GI |
O Edge se conecta às redes por meio de portas, no máximo quatro. Uma porta descreve a relação entre uma rede, um slot e endereços:
| Campo da porta | O que especifica |
|---|---|
port_id | Identificador da porta. Aceito por edge-ratelimit e edge-remove-nic; as regras referenciam a porta por meio de rule_ifname |
slot | Número do slot (no máximo 4) |
network_id | Rede à qual a porta está conectada |
ifname | Número da interface da porta |
address | Endereço IPv4 da porta, ou null se nenhum endereço IPv4 estiver atribuído |
address_v6 | Lista de endereços IPv6 da porta (até 8). Lista vazia se nenhum endereço IPv6 estiver atribuído |
mac | Endereço MAC da porta |
ip_guard | Flag de IP guard: 0 para desativar, 1 para ativar. Padrão: 1 |
ratelimit_mbits | Limite de largura de banda em Mbps. 0 significa sem limite |
As regras do Edge são armazenadas em dois conjuntos numerados: nat para tradução de endereços e
fw para filtragem de tráfego (firewall). A chave dentro de um conjunto é o número da regra;
para regras de firewall, o número fica no intervalo 100–32767. O campo incarnation
é retornado junto com os conjuntos: é um marcador do conjunto enviado ao roteador com as regras.
Como funciona
A configuração e a execução das regras são separadas. Os métodos edge-add-fw-rule,
edge-add-nat-rule, edge-remove-fw-rule e edge-remove-nat-rule
são síncronos e trabalham apenas com o banco de dados do vStack Center: uma regra aparece no
conjunto ou é removida dele, mas ainda não afeta o tráfego. Uma chamada separada,
edge-deploy-rules, realiza a aplicação: ela monta o conjunto completo
(incarnation, nat, fw) a partir do banco de dados e o envia integralmente ao agente de Edge.
Essa separação tem duas consequências. Primeiro, até que o conjunto seja aplicado, o conjunto no banco de dados difere do conjunto no roteador; portanto, a edição de regras termina com a aplicação, e não com a adição de uma regra. Segundo, a aplicação substitui o conjunto inteiro em vez de acrescentar alterações individuais: o conjunto no banco de dados sempre contém o estado desejado completo.
As operações assíncronas de Edge passam por agentes, e o agente depende do
tipo de operação. As operações de ciclo de vida da máquina (iniciar, parar, reiniciar, remover) vão para
o agente de VMs, as operações de porta (edge-add-nic, edge-remove-nic) vão para o agente
de Storage, e as regras e o log do filtro de pacotes vão para o agente de Edge. Uma chamada desse tipo primeiro
retorna uma resposta intermediária, {"message": "relayed"}. Isso confirma o
encaminhamento, e não fornece o resultado. A resposta final chega como um
callback do agente.
O ciclo de vida funciona da seguinte forma. edge-create cria a VM do roteador, registra
o Edge no banco de dados e inicia a máquina; não é necessário iniciá-la separadamente após a criação.
Em seguida vem a fase de operação: portas são adicionadas e removidas, a largura de banda das portas
é limitada, e os conjuntos de regras são editados e aplicados. Parar e iniciar
alternam o roteador entre estados sem alterar sua configuração. edge-remove
remove o Edge e todas as suas regras do banco de dados e, em seguida, exclui a VM.
O acesso é baseado em privilégios com escopo. O papel Cluster master pode trabalhar com qualquer
Edge do cluster. Um administrador de VDC cria roteadores no próprio VDC, vê
todos os roteadores ali e lê seus conjuntos de regras. Ele só pode gerenciar os roteadores
que criou: portas, largura de banda, início e parada, edição e aplicação de regras,
e remoção. Cada uma dessas operações retorna -403 para um roteador do seu VDC
que pertence a outra pessoa, inclusive a remoção.
Usuários e observadores do VDC podem ler a lista de roteadores do próprio VDC, seus cartões e seus conjuntos de regras. Para esse acesso, não é necessário ser proprietário do roteador.
O log do filtro de pacotes dá visibilidade sobre o comportamento das regras. O
método edge-get-pfloggs obtém o log do roteador como um arquivo PCAP. Abra-o
em um analisador de tráfego para ver quais pacotes as regras realmente capturaram.
Limitações
- Um Edge pode ter no máximo quatro portas; o número do slot não pode exceder 4.
- Uma porta só pode ser adicionada quando a VM do roteador está parada (ou em estado de erro ou
de criação). A chamada
edge-add-nicé rejeitada em um Edge em execução. - Os números das regras de firewall são limitados ao intervalo 100–32767. Nenhum intervalo é definido para os números das regras de NAT.
- É possível atribuir manualmente até 8 endereços IPv6 por porta. Cada endereço é
verificado quanto ao formato, à pertinência à sub-rede IPv6 da rede (
net_cidr_v6), à ausência entre os endereços reservados (ippool_reserved_v6) e já alocados (ippool_port_allocations) e à unicidade dentro da requisição. - Os valores de
rule_action,rule_protoerule_directionsão identificadores numéricos das listas de referência do cluster, e não nomes de ações e protocolos. - A aplicação de regras exige um Edge em execução, com progresso de 100% e bootstrap concluído. Um roteador parado ou ainda em inicialização não aceita regras.
- O log do filtro de pacotes é mantido por 24 horas, e o agente limita as exportações
a 3000 pacotes. O próprio método é controlado pela feature flag
feature.edge_log_pcapnas configurações do cluster. - Toda a funcionalidade de Edge é controlada pela feature flag geral
feature.edgenas configurações do cluster. Enquanto ela estiver desativada, qualquer requisição de roteador retorna o código-25030, "The edge feature has not been enabled". As operações de leitura também são bloqueadas: a lista de roteadores, o cartão do roteador e os conjuntos de regras. Cada recusa desse tipo é registrada no log de segurança como um eventofeature.gate-denied.