Rede Virtual no Linux

NICs, comutadores, redes e dispositivos

Com o amplo crescimento da virtualização de plataformas, é compreensível que outras partes do ecossistema corporativo também sejam virtualizadas. Uma das áreas mais recentes é a rede virtual. As primeiras implementações de virtualização de plataforma criaram NICs virtuais, mas atualmente, porções maiores da rede estão sendo virtualizadas, como os comutadores que suportam a comunicação entre VMs em um servidor ou distribuída entre servidores. Explore as ideias por trás da rede virtual, como foco na virtualização da NIC e do comutador.

M. Tim Jones, Consultant Engineer, Emulex Corp.

M. Tim JonesM. 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.



06/Dez/2010

Entre em contato com o Tim

Tim é um dos nossos autores mais populares e prolíficos. Navegue em todos os artigos do Tim no developerWorks. Confira o perfil dele e entre em contato com ele e com outros autores e leitores no My developerWorks.

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
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
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 (consulte a Figura 3) 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
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. O Open vSwitch 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. É possível aprender mais sobre as características do virtio na seção Recursos .

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.
  • Fique por dentro dos eventos técnicos e webcasts do developerWorks focados em uma série de produtos IBM e tópicos do segmento de mercado de TI.
  • 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.
  • Veja as demos on demand no developerWorks que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidades avançadas para desenvolvedores experientes.
  • Siga o developerWorks no Twitter ou inscreva-se para receber tweets sobre o Linux no developerWorks.

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.

Discutir

  • Participe da comunidade do My developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=594727
ArticleTitle=Rede Virtual no Linux
publish-date=12062010