Pular para o conteúdo principal

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:

CampoSignificado
edge_idUUID do roteador. A chave em todos os métodos de Edge
ownerProprietário. Retornado para todos os papéis
vdc_idO VDC ao qual o Edge compartilhado pertence
vm_idIdentificador da VM do roteador. Disponível apenas para o papel Cluster master
oper_status, oper_progress, oper_tsStatus da última operação, seu progresso em porcentagem e seu horário
deploy_tsHorário da aplicação das regras no roteador
modifiedHorário da última alteração do registro
base_version, ctrl_version, GI_objectCampos 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 portaO que especifica
port_idIdentificador da porta. Aceito por edge-ratelimit e edge-remove-nic; as regras referenciam a porta por meio de rule_ifname
slotNúmero do slot (no máximo 4)
network_idRede à qual a porta está conectada
ifnameNúmero da interface da porta
addressEndereço IPv4 da porta, ou null se nenhum endereço IPv4 estiver atribuído
address_v6Lista de endereços IPv6 da porta (até 8). Lista vazia se nenhum endereço IPv6 estiver atribuído
macEndereço MAC da porta
ip_guardFlag de IP guard: 0 para desativar, 1 para ativar. Padrão: 1
ratelimit_mbitsLimite 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_proto e rule_direction sã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_pcap nas configurações do cluster.
  • Toda a funcionalidade de Edge é controlada pela feature flag geral feature.edge nas 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 evento feature.gate-denied.

Leitura adicional​