DevSecOpsARTIGO

Rede virtual no Linux: NICs, comutadores, redes e dispositivos

Atualmente, a computação está passando por uma espécie de renascimento. Apesar de a
virtualização ter sido criada há décadas, seu verdadeiro potencial está sendo
atualmente obtido através do uso de hardware comum.

A virtualização consolida as
cargas de trabalho dos servidores para obter eficiência, mas outros elementos do
ecossistema de servidores estão surgindo como candidatos para futuras consolidações.

Muitas pessoas veem a virtualização como a consolidação da CPU, da memória e do
armazenamento, mas essa é uma versão muito simplificada da solução. A rede é o
aspecto principal da virtualização e representa um elemento primordial do conjunto
de virtualização.

Virtualizando redes

Vamos iniciar com uma investigação de alto nível do problema, em seguida vamos
verificar as diversas formas nas quais o Linux constrói e suporta a
virtualização da rede.

Em um ambiente tradicional (consulte a Figura 1), um conjunto de servidores físicos
hospeda o conjunto de aplicativos necessários.

Para permitir a comunicação entre os
servidores, cada servidor inclui uma ou mais placas da interface de rede (NICs)
conectadas a uma infraestrutura de rede externa. A NIC, juntamente com uma pilha de
softwares de rede, permite a comunicação entre os terminais através da
infraestrutura de rede.

Conforme mostrado na Figura 1, essa funcionalidade é
representada por um comutador, que permite a comunicação eficiente de pacotes entre
os terminais participantes.

Figura 1. Infraestrutura de rede tradicional

A principal inovação por trás da consolidação de servidores é a abstração do hardware
físico para permitir que diversos sistemas operacionais e aplicativos compartilhem o
hardware (consulte a Figura 2). Essa inovação é chamada de hypervisor (ou
monitor de máquina virtual (VM)). Cada VM (conjunto de sistema
operacional e aplicativo) visualiza o hardware subjacente como uma máquina completa
e não compartilhada, mesmo que partes do hardware não existam ou sejam
compartilhadas por diversas VMs. Um exemplo disso é a NIC virtual (vNIC).

O
hypervisor pode criar uma ou mais vNICs para cada VM. Essas NICs podem ser parecidas
com NICs físicas para a VM, mas na verdade elas representam somente a interface da
NIC. O hypervisor também permite a construção dinâmica de uma rede virtual completa
com comutadores virtualizados para permitir a comunicação configurável entre os
terminais da VM.

Por fim, o hypervisor também permite a comunicação com a
infraestrutura física de rede conectando as NICs físicas do servidor à
infraestrutura lógica do hypervisor, permitindo a comunicação eficiente entre as VMs
no hypervisor, assim como a comunicação eficiente com a rede externa.

Na seção Recursos é possível encontrar diversos links para obter
mais informações sobre o uso de hypervisor no Linux (uma área valiosa para o sistema
operacional com software livre). 

Figura 2. Infraestrutura de rede virtualizada

A infraestrutura de rede virtualizada permitiu também outras inovações interessantes,
como o dispositivo virtual. Iremos aprender mais sobre ele juntamente com os
elementos da rede virtual como parte desta exploração.

Comutação virtual

Um dos principais desenvolvimentos da infraestrutura de rede virtualizada é o
desenvolvimento do comutador virtual. Ele conecta as vNICs às NICs físicas do
servidor e – o mais importante – é que vincula vNICs a outras vNICs no
servidor para comunicação local.

O que torna essa solução interessante é que em um
comutador virtual o limite não está vinculado à velocidade da rede e sim à largura
de banda da memória, que permite a comunicação eficiente entre VMs locais e minimiza
a sobrecarga da infraestrutura de rede. Isso gera uma economia da rede, pois a rede
física só é usada para comunicação entre os servidores, isolando o tráfego entre as
VMs nos servidores.

Mas como o Linux já incorpora um comutador que opera na camada 2 no kernel, algumas
pessoas questionaram a necessidade de um comutador virtual. A resposta abrange
diversos atributos, mas um dos mais importantes é definido pela nova classificação
para esses tipos de comutadores.

A nova classificação é chamada de comutador
virtual distribuído
e permite a ponte entre os servidores de uma forma que
torna a arquitetura do servidor subjacente transparente.

Um comutador virtual de um
servidor pode se unir de forma transparente a um comutador virtual em outro servidor simplificando a migração das VMs nos
servidores (e suas interfaces virtuais), pois elas podem se conectar ao comutador
virtual distribuído e se unir de forma transparente à sua rede comutada virtual.

Figura 3. O comutador virtual distribuído

Um dos projetos mais importantes nesse espaço é chamado de Open vSwitch, que
será discutido a seguir neste artigo.

Um dos problemas do isolamento do tráfego local do servidor é que o tráfego não será
visível externamente (para analisadores de rede, por exemplo). As implementações têm
resolvido esse problema através de diversos esquemas, como o OpenFlow, o NetFlow e o
sFlow, que são usados para exportar acessos remotos para controlar e monitorar o
tráfego.

Open vSwitch

As primeiras implementações dos comutadores virtuais distribuídos eram fechadas e
restritas à operação com conjuntos proprietários de hypervisors. Nos ambientes
atuais de computação em nuvem, o ideal é suportar um ambiente heterogêneo no qual
diversos hypervisors possam coexistir.

O Open vSwitch é um comutador virtual com diversas camadas disponível como um
software livre na licença do Apache 2.0. Em maio de 2010 a versão 1.0.1 do Open
vSwitch foi disponibilizada, oferecendo suporte a um impressionante conjunto de
recursos.

Ele ainda suporta as principais soluções de hypervisor de software
livre, incluindo o Kernel-based VM (KVM), o VirtualBox, o Xen e o XenServer. É um
substituto para o módulo atual de ponte do Linux.

O Open vSwitch consiste em um daemon de comutador e um módulo do kernel concomitante
que gerencia a comutação baseada no fluxo. Existem também diversos outros daemons e
utilitários para gerenciar o comutador (especialmente da perspectiva do OpenFlow). É
possível executar o Open vSwitch integralmente do espaço do usuário, mas isso
ocasiona a redução do desempenho.

Além de fornecer um comutador com qualidade de produção para ambientes de VM, o Open
vSwitch inclui um impressionante roteiro de recursos para competir com outras
soluções fechadas e proprietárias.

Virtualização do dispositivo de rede

A virtualização do hardware da NIC existe há algum tempo de diversas
formas – muito antes da introdução da comutação virtual. Esta seção aborda
algumas implementações e também algumas acelerações de hardware disponíveis para
melhorar a velocidade da virtualização da rede.

  • QEMU

Apesar de o QEMU ser um emulador de plataforma, ele fornece emulação de software para
diversos dispositivos de hardware, incluindo NICs. Além disso, o QEMU fornece um
servidor de Protocolo de Configuração de Host Dinâmico para a atribuição de
endereços IP. O QEMU trabalha juntamente com o KVM para oferecer emulação de
plataforma e de dispositivo individual para preparar a plataforma para a
virtualização baseada no KVM. É possível aprender mais sobre o QEMU na seção Recursos.

  • virtio

virtio é uma estrutura de paravirtualização de
entrada/saída (E/S) para Linux que simplifica e acelera o tráfego de E/S da VM para
o hypervisor. O

virtio cria um mecanismo de transporte
padronizado para a E/S entre uma VM e um hypervisor para a virtualização dos
dispositivos de bloco, dispositivos Peripheral Component Interconnect (PCI)
genéricos e dispositivos de rede, entre outros.

  • TAP e TUN

A virtualização tem sido implementada nas pilhas de rede há bastante tempo para
permitir o acesso das pilhas de rede convidadas da VM à pilha de rede do host. O TAP
e o TUN são dois exemplos desse esquema.

TAP é um driver de kernel de rede virtual
que implementa um dispositivo Ethernet e, dessa forma, opera no nível do quadro
Ethernet. O driver TAP fornece a conexão Ethernet através da qual os quadros
Ethernet convidados podem se comunicar.

O TUN (ou “túnel” de rede) simula um
dispositivo da camada de rede e se comunica no nível mais alto dos pacotes IP, que
fornece uma pequena otimização, enquanto o dispositivo Ethernet subjacente pode
gerenciar o enquadramento da camada 2 dos pacotes IP do TUN.

  • Virtualização de E/S

A virtualização de E/S é um esquema padronizado do PCI-Special Interest Group (SIG)
que permite a aceleração da virtualização no nível do hardware.

O Single-root IOV
(SR-IOV), em especial, expõe uma interface através da qual uma placa PCI Express
(PCIe) única pode ser exibida para diversos usuários como diversas placas PCIe,
permitindo a conexão de diversos drivers independentes na placa PCIe, sem o
conhecimento um do outro.

O SR-IOV faz isso estendendo as funções virtuais para
diversos usuários, que são parecidas com funções físicas no espaço PCIe, mas são
representadas na placa como funções compartilhadas.

O benefício do SR-IOV para a virtualização da rede é o desempenho. Ao invés do
hypervisor implementar o compartilhamento da NIC física, a própria placa implementa
a multiplexação, permitindo a passagem direta da E/S das VMs convidadas diretamente
para a placa.

Atualmente, o Linux inclui suporte para o SR-IOV, o que beneficia o hypervisor da
KVM. O Xen também inclui suporte para SR-IOV, permitindo a apresentação eficiente de
uma vNIC às VMs convidadas. O suporte para SR-IOV está no roteiro do Open vSwitch.

  • LANs Virtuais

Apesar de relacionadas, as LANs virtuais (VLANs) são um método físico para a
virtualização de redes. As VLANs fornecem a possibilidade de criação de redes
virtuais em uma rede distribuída, dessa forma os hosts distintos (em redes
independentes) aparecem como se fossem parte do mesmo domínio de transmissão.

As
VLANs fazem isso identificando quadros com as informações da VLAN a fim de
identificar suas associações com uma LAN particular (de acordo com o padrão 802.1Q
do Institute of Electrical and Electronics Engineers [IEEE]).

Os hosts trabalham
juntamente com os comutadores da VLAN para virtualizar a rede física. Mas apesar das
VLANs se assemelharem a redes separadas, elas compartilham a mesma rede e também a
largura de banda disponível e os impactos resultantes do congestionamento.

  • Aceleração de hardware

Diversas acelerações de virtualização focadas na E/S direcionadas às NICs e outros
dispositivos começaram a aparecer. A Virtualization Technology for Directed I/O
(VT-d) da Intel fornece a possibilidade de isolamento dos recursos de E/S para
melhorar a confiabilidade e a segurança, o que inclui o remapeamento das
transferências de acesso direto à memória (usando tabelas com páginas de diversos
níveis) e o remapeamento das interrupções associadas ao dispositivo, suportando os
convidados não modificados e aqueles cientes da virtualização.

O Virtual Machine
Device Queues (VMDq) da Intel também acelera o fluxo do tráfego na rede nas
configurações de virtualização incorporando filas e classificando a inteligência no
hardware, resultando em uma menor utilização da CPU pelo hypervisor e em melhorias
maiores no desempenho geral do sistema. O Linux inclui suporte para ambos.

Dispositivos virtuais de rede

Até aqui, este artigo explorou a virtualização dos dispositivos NIC e comutadores,
algumas das implementações existentes e algumas das formas através das quais as
virtualizações são aceleradas através do hardware. Agora, vamos expandir essa
discussão para os serviços de rede gerais.

Uma das inovações interessantes no espaço de virtualização é o ecossistema que está
surgindo da consolidação dos servidores. Ao invés de dedicar aplicativos às versões
especializadas de hardware, as partes de um servidor são isoladas para fornecer
energia para as VMs que estenderem os serviços no servidor. Essas VMs são chamadas
de dispositivos virtuais, pois elas se concentram em um aplicativo
específico e foram desenvolvidas para uma configuração de virtualização.

O dispositivo virtual normalmente se conecta ao hypervisor – ou à infraestrutura
de rede genérica apresentada pelo hypervisor – para ampliar um serviço
específico. O diferencial é que, em um servidor consolidado, as partes da capacidade
de processamento (como os núcleos) e a largura de banda de E/S podem ser
configuradas dinamicamente para o dispositivo virtual.

Essa capacidade possui custo
reduzido (pois não exige o isolamento de um servidor único) e é possível alterar de
forma dinâmica a capacidade com base nas necessidades dos outros aplicativos em
execução no servidor.

Os dispositivos virtuais também podem ter um gerenciamento
simplificado, pois o aplicativo é vinculado ao sistema operacional (na VM). Nenhuma
configuração especial é necessária, pois a VM é totalmente pré-configurada. Esse é
um benefício considerável dos dispositivos virtuais e o motivo do seu crescimento
atual.

Os dispositivos virtuais têm sido desenvolvidos para diversos aplicativos
corporativos e incluem a otimização da WAN, roteadores, redes privadas virtuais,
firewalls, sistemas de detecção/proteção contra invasões, classificação e
gerenciamento de e-mails, entre outros.

Além dos serviços de rede, os dispositivos
virtuais atuam no armazenamento, na segurança, na estrutura de aplicativos e no
gerenciamento de conteúdo.

Conclusão

Houve um tempo em que tudo que era gerenciável também estava ao alcance de nossas
mãos. Mas atualmente, nosso mundo está cada vez mais virtualizado e os dispositivos
e serviços físicos caíram em desuso.

As redes físicas foram virtualmente segmentadas
para permitir o isolamento do tráfego e a construção de redes virtuais em entidades
separadas geograficamente. Os aplicativos se transformaram em dispositivos virtuais
segmentados em núcleos e localizados em servidores poderosos, aumentando não apenas
a complexibilidade para o administrador, como também a flexibilidade e melhorando o
gerenciamento. E, claro, o Linux está na linha de frente.

Recursos

Aprender

  • Ele é um ótimo sistema operacional e também uma
    plataforma para soluções de virtualização. É possível aprender mais sobre Linux e
    virtualização nos artigos Virtual
    Linux
    (developerWorks, dezembro de 2006) e Anatomia de
    um Hypervisor Linux
    (developerWorks, maio de 2009).
  • O Linux implementa uma estrutura de virtualização
    de E/S (usada pelo KVM) chamada virtio. O virtio fornece uma estrutura simples para o
    desenvolvimento de drivers paravirtualizados eficientes. É possível saber mais sobre
    o virtio e suas características no artigo Virtio: An I/O
    virtualization framework for Linux
    (developerWorks, janeiro de 2010).
  • O SR-IOV fornece uma forma de virtualização de
    adaptadores físicos para uso por diversas VMs convidadas. É possível ler mais sobre
    emulação de dispositivos e virtualização de E/S no artigo Virtualização Linux e passagem PCI (developerWorks, outubro de 2009).
  • O SR-IOV permite que diversos sistemas operacionais
    convidados compartilhem dispositivos PCIe. É possível aprender mais sobre o SR-IOV
    neste site de criação de hardware
    da Intel
    . O site PCI-SIG fornece as especificações das diversas tecnologias IOV.
  • Os dispositivos virtuais são uma forma física de
    entrega de aplicativos de software relativamente nova. Um diferencial importante dos
    dispositivos virtuais é a capacidade de compartilhamento dos dispositivos entre mais
    de um hypervisor para uma maior portabilidade. Uma etapa nessa direção é o Open
    Virtualization Format (OVF), que define o formato dos metadados dos dispositivos
    virtuais. É possível aprender mais sobre dispositivos virtuais e OVF no artigo Dispositivos Virtuais e o Open Virtualization Format (developerWorks,
    outubro de 2009).
  • O QEMU é um emulador de software livre para
    sistemas de computadores completos que fornece uma solução completa de virtualização
    (através da emulação). É possível aprender mais sobre o QEMU no artigo Emulação do
    Sistema com o QEMU
    (developerWorks, setembro de 2007).
  • O padrão IEEE 802.1Q fornece o padrão
    de rede para a identificação de VLANs, definindo o conceito de VLAN na camada MAC
    para o isolamento virtual de dispositivos.
  • Na zona Linux do
    developerWorks
    , você encontrará muitos artigos e
    tutoriais de instruções
    , bem como downloads, fóruns de discussão e muitos
    outros recursos para desenvolvedores e administradores Linux.
  • Participe de um briefing ao vivo e gratuito do developerWorks para atualizar-se rapidamente
    em relação aos produtos e ferramentas IBM e às tendências do segmento de mercado de
    TI.

Obter produtos e tecnologias

  • O OpenSolaris implementou a
    virtualização da NIC e do comutador como parte de um projeto chamado
    Crossbow.
    O Projeto
    Crossbow
    trouxe a virtualização e o controle dos recursos de largura de
    banda para a pilha de rede para minimizar a complexidade e a sobrecarga.
  • Open vSwitch é o primeiro comutador de
    software livre com diversas camadas que atende o ecossistema virtualizado.
    Recentemente lançado na versão 1.0, o Open vSwitch fornece uma incrível lista de
    recursos e suporta diversos hypervisors de software livre (incluindo a KVM, o Xen, o
    XenServer e o VirtualBox).
  • A plataforma de computação em nuvem
    Xen
    é uma infraestrutura de virtualização que incorpora o pacote do
    comutador virtual Open vSwitch como parte da sua pilha.
  • Avalie os produtos
    IBM
    da maneira que for melhor para você: faça download da versão de teste
    de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe
    algumas horas na SOA
    Sandbox
    aprendendo a implementar Arquitetura Orientada a Serviços de modo
    eficiente.


***


artigo publicado originalmente no developerWorks Brasil, por M. Tim Jones

M. Tim Jones é arquiteto de firmware integrado e autor de Artificial
Intelligence: A Systems Approach, GNU/Linux Application Programming

(atualmente em sua segunda edição),
AI Application Programming (em sua
segunda edição) e
BSD Sockets Programming from a Multilanguage Perspective.
Seu conhecimento em engenharia varia do desenvolvimento de kernels para naves
espaciais geossincrônicas até a arquitetura de sistemas embarcados e o
desenvolvimento de protocolos de rede. Tim é Consultor de Engenharia da Emulex Corp.
em Longmont, Colorado.

é o portal de tecnologia da IBM para profissionais de TI de todo o mundo. Colabore, aprenda a criar aplicativos inovadores e compreenda tecnologias avançadas. Acesse mais artigos e tutoriais em www.ibm.com/developerworks/br

Ver perfil