OpenStack Networking » History » Version 41

Thiago Paiva, 25 Feb 2014 09:40

1 12 Raphael Cóbe
h1. OpenStack Networking - Netron
2 1 Thiago Paiva
3 1 Thiago Paiva
XLCloud-Networking_Needs_Quantum.pdf: continuar da página 9
4 21 Thiago Paiva
5 34 Thiago Paiva
6 33 Raphael Cóbe
h2. Guias de Integração com Openflow:
7 33 Raphael Cóbe
8 33 Raphael Cóbe
"Floodlight":https://wiki.openstack.org/wiki/Neutron/FloodlightPluginSetup
9 33 Raphael Cóbe
10 33 Raphael Cóbe
"Trema":https://wiki.openstack.org/wiki/Neutron/NEC_OpenFlow_Plugin
11 33 Raphael Cóbe
12 33 Raphael Cóbe
"Ryu":https://github.com/osrg/ryu/wiki/OpenStack
13 33 Raphael Cóbe
14 33 Raphael Cóbe
"RestProxy Plugin":https://wiki.openstack.org/wiki/Neutron/RestProxyPlugin
15 33 Raphael Cóbe
16 33 Raphael Cóbe
"OpenVSwitch":http://openvswitch.org/openstack/2011/08/01/openstack-quantum-and-open-vswitch-part-ii/
17 33 Raphael Cóbe
18 33 Raphael Cóbe
19 1 Thiago Paiva
h2. Neutron
20 1 Thiago Paiva
21 34 Thiago Paiva
Serviço OpenStack que lida com rede (OpenStack Networking)
22 34 Thiago Paiva
23 40 Thiago Paiva
* é uma API disponível para os tenants
24 34 Thiago Paiva
* oferece recursos dinamicamente
25 34 Thiago Paiva
* criar e configurar redes virtuais
26 34 Thiago Paiva
27 34 Thiago Paiva
* Neutron é apenas uma camada de abstração que unifica as chamadas de configuração. Quem realmente faz o trabalho é o Neutron Plugin.
28 34 Thiago Paiva
* Neutron controla a virtualização de rede (network services) da mesma forma que Nova controla a virtualização de servidores e instâncias.
29 34 Thiago Paiva
* Neutron fornece uma API para gerenciamento de rede pelos projetos (tenants)
30 34 Thiago Paiva
* Neutron pode definir topologias de rede complexas
31 34 Thiago Paiva
* Neutron consegue lidar com diferentes tecnologias de virtualização de rede.
32 34 Thiago Paiva
33 1 Thiago Paiva
34 34 Thiago Paiva
h2. Implementação de referência
35 1 Thiago Paiva
36 1 Thiago Paiva
!{width:70%;}Neutron-PhysNet-Diagram.png!
37 37 Thiago Paiva
Retirada do "OpenStack Admin Guide":http://docs.openstack.org/admin-guide-cloud/content/figures/9/a/common/figures/Neutron-PhysNet-Diagram.png
38 1 Thiago Paiva
39 37 Thiago Paiva
* cloud controller host (Cloud Controller Node): quantum-server, nova-api, nova-scheduler, keystone, RabbitMQ, MySQL.
40 37 Thiago Paiva
* network gateway host (Network Node): quantum-metadata-agent, quantum-dhcp-agent, quantum-l3-agent, quantum-*-plugin-agent
41 37 Thiago Paiva
* conjunto de hypervisors para rodar VMs. Compute node: nova-compute, quantum-*-plugin-agent
42 1 Thiago Paiva
43 37 Thiago Paiva
cloud controller host e network gateway host podem ser combinados em uma máquina, porém é recomendado que exista um network gateway host separado para evitar restrições de CPU entre os encaminhamentos realizados pelo quantum-l3-agent e outros serviços OS.
44 37 Thiago Paiva
45 37 Thiago Paiva
* DataNetwork: comunicação de dados dentro da implementação de nuvem.
46 37 Thiago Paiva
* Management Network: comunicações entre componentes OS.
47 37 Thiago Paiva
* External Network: oferece acesso à internet à implementação OS.
48 37 Thiago Paiva
* API Network: expõe todas as APIs do OS, incluindo  a Netron API para os tenants. Pode ser a própria rede externa utilizando o recurso de subredes para separação.
49 37 Thiago Paiva
50 37 Thiago Paiva
51 41 Thiago Paiva
h3. Controller host config (OVS)
52 37 Thiago Paiva
53 37 Thiago Paiva
!{width:70%;}under-the-hood-scenario-1-ovs-network.png!
54 37 Thiago Paiva
Retirada do "OpenStack Guide":http://docs.openstack.org/admin-guide-cloud/content/figures/10/a/common/figures/under-the-hood-scenario-1-ovs-network.png
55 37 Thiago Paiva
56 37 Thiago Paiva
57 37 Thiago Paiva
h3. Compute host config (OVS)
58 37 Thiago Paiva
59 37 Thiago Paiva
!{width:70%;}under-the-hood-scenario-2-ovs-compute.png!
60 37 Thiago Paiva
Retirada do "OpenStack Guide":http://docs.openstack.org/admin-guide-cloud/content/figures/10/a/common/figures/under-the-hood-scenario-2-ovs-compute.png
61 37 Thiago Paiva
62 37 Thiago Paiva
63 1 Thiago Paiva
h2. Networking API
64 1 Thiago Paiva
65 37 Thiago Paiva
Networking oferece uma API para definir interface entre os serviços OpenStack (e.g.: vNICs de máquinas virtuais com Nova). Os recursos alocados possuem dois modos: controle e operação
66 1 Thiago Paiva
67 37 Thiago Paiva
Abstrações que descrevem os recursos:
68 1 Thiago Paiva
* Network: segmento L2 isolado (análogo a VLAN)
69 36 Thiago Paiva
* Subnet: faixa de endereços IP (v4 ou v6) e estado de configuração associado.
70 36 Thiago Paiva
* Port: ponto de conexão para um dispositivo. Também descreve configurações associadas da rede (como MAC e endereço IP usado na porta em questão).
71 36 Thiago Paiva
72 37 Thiago Paiva
Modo de operação:
73 37 Thiago Paiva
* Rede: List, get, add, update, remove
74 37 Thiago Paiva
* Porta: List, get, add, update, remove
75 37 Thiago Paiva
* Periférico: Get, plug, unplug
76 36 Thiago Paiva
77 37 Thiago Paiva
78 1 Thiago Paiva
h2. Agentes
79 34 Thiago Paiva
80 1 Thiago Paiva
Agentes são softwares que devem rodar em cada nó que lida com pacotes de dados.
81 36 Thiago Paiva
82 36 Thiago Paiva
* plug-in agent (neutron-*-agent): roda em cada hypervisor para configuração local do vswitch. 
83 36 Thiago Paiva
* dhcp agent (neutron-dhcp-agent): provê serviço DHCP para as redes dos tenants.
84 1 Thiago Paiva
* l3 agent (neutron-l3-agent): provê acesso externo a VMs de dentro das redes dos tentants. Porém, alguns plugins tem sua própria implementação desse recurso.
85 36 Thiago Paiva
* l3 metering agent (neutron-metering-agent): provê medidas de tráfico das redes dos tenants.
86 1 Thiago Paiva
87 1 Thiago Paiva
88 1 Thiago Paiva
h2. Neutron Manager
89 1 Thiago Paiva
90 1 Thiago Paiva
* Gerenciador do Nova para o Neutron. Redireciona requisições relacionadas.
91 34 Thiago Paiva
* Oferece outros serviços de rede (gerenciamento de IP, DHCP, NAT, ...)
92 34 Thiago Paiva
93 34 Thiago Paiva
94 37 Thiago Paiva
h2. Camadas do Neutron
95 36 Thiago Paiva
96 36 Thiago Paiva
*# presentation: configuration managers, operational APIs, ...
97 36 Thiago Paiva
*# virtual network application: L2 switch, firewall, load balancer, router, ...
98 36 Thiago Paiva
*# controller: floodlight, cisco overdrive, nicira OVP, ...
99 36 Thiago Paiva
*# management: VxLan, STT, OpenFlow, SNMP, nvGRE, GRE, VLANs, NetConf, ...
100 36 Thiago Paiva
*# devices: Nexus 5k, UCS, Open vSwitch, OF-enabled switches, Linux Bridge, ...
101 36 Thiago Paiva
102 36 Thiago Paiva
103 34 Thiago Paiva
h2. Neutron Plugin
104 34 Thiago Paiva
105 34 Thiago Paiva
Neutron Plugin são pedaços de código que implementam chamadas da API Neutron.
106 34 Thiago Paiva
107 34 Thiago Paiva
* composto por um controle centralizado e data model.
108 34 Thiago Paiva
* Implementa todas as operações inclusas na "Network API v2.0".
109 34 Thiago Paiva
* Traduz as operações da "Network API v2.0" em chamadas de reconfiguração de switches reais e virtuais.
110 34 Thiago Paiva
* Pode ser compatível com mais de um tipo de switch (um plugin pode ter múltiplos drivers).
111 34 Thiago Paiva
* Define se as mensagens devem ser síncronas ou assíncronas
112 34 Thiago Paiva
* implementa ou faz interface com qualquer tipo de SDN (OpenFlow, Orchestration, Tunneling, Network Interface, virtualization, ‘legacy’, ...)
113 34 Thiago Paiva
114 34 Thiago Paiva
* Apenas um plugin pode rodar de cada vez.
115 34 Thiago Paiva
* não existe uma interface padrão para os drivers.
116 34 Thiago Paiva
* "meta-plugin' que chama código de dois diferentes plugins. (proposto -- ver l2 modular plugin)
117 34 Thiago Paiva
* plugins e drivers devem ser escritos como biblioteca para permitir o reuso.
118 34 Thiago Paiva
119 26 Thiago Paiva
120 34 Thiago Paiva
h3. Componentes:
121 1 Thiago Paiva
122 34 Thiago Paiva
Um plugin geralmente é formado por códigos para:
123 34 Thiago Paiva
124 34 Thiago Paiva
* armazenar informação sobre a configução lógica atual da rede  (e.g., SQL database)
125 34 Thiago Paiva
* determina e armazena informações sobre o 'mapeamento' entre modelo lógico e rede física (e.g. escolhendo uma VLAN para representar uma rede virtual)..
126 34 Thiago Paiva
* comunica com um ou mais tipos de switches para configurá-los de acordo com o mapeamento. Isso pode ser na forma de um agente rodando no _hypervisor_ ou de código que remotamente se conecta a um switch e o reconfigura.
127 34 Thiago Paiva
128 34 Thiago Paiva
129 34 Thiago Paiva
h3. Plugins disponíveis:
130 34 Thiago Paiva
131 35 Thiago Paiva
* "Big Switch Plug-in (Floodlight REST Proxy)":http://www.openflowhub.org/display/floodlightcontroller/Neutron+REST+Proxy+Plugin
132 34 Thiago Paiva
* "Brocade Plug-in":http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html#brocade_plugin
133 34 Thiago Paiva
* "Cisco":http://wiki.openstack.org/cisco-neutron
134 34 Thiago Paiva
* "Cloudbase Hyper-V Plug-in":http://www.cloudbase.it/quantum-hyper-v-plugin/
135 26 Thiago Paiva
* "Linux Bridge Plug-in":http://wiki.openstack.org/Neutron-Linux-Bridge-Plugin
136 21 Thiago Paiva
* "Mellanox Plug-in":https://wiki.openstack.org/wiki/Mellanox-Neutron/
137 34 Thiago Paiva
* "Midonet Plug-in":http://www.midokura.com/
138 26 Thiago Paiva
* "ML2 (Modular Layer 2) Plug-in":https://wiki.openstack.org/wiki/Neutron/ML2
139 34 Thiago Paiva
* "NEC OpenFlow Plug-in":http://wiki.openstack.org/Quantum-NEC-OpenFlow-Plugin
140 26 Thiago Paiva
* "Nicira NVP Plug-in":http://www.nicira.com/support
141 34 Thiago Paiva
* "Open vSwitch Plug-in":http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html#openvswitch_plugin
142 34 Thiago Paiva
* "PLUMgrid":https://https://wiki.openstack.org/wiki/PLUMgrid-Neutron
143 34 Thiago Paiva
* "Ryu Plug-in":https://github.com/osrg/ryu/wiki/OpenStack
144 1 Thiago Paiva
145 1 Thiago Paiva
146 34 Thiago Paiva
h2. Observações
147 1 Thiago Paiva
148 34 Thiago Paiva
* Cria-se 'netork' e a associa auma 'sub-net'
149 34 Thiago Paiva
* vif-plugging + switch
150 34 Thiago Paiva
* vif-plugging deve ser mantido tão simples quanto o possível para evitar complicações do nova com detalhes da rede. (e.g., não se deve passar VLAN ID para o nova; deve-se apenas deixar que o nova crie o dispositivo básico e fazer com que o agente do plugin do neutron cuide de configurar a conexão para aquela vlan.
151 34 Thiago Paiva
* data-forward node tipicamente tem uma interface de rede com um endereço IP para "management network" e outro para "data network”.
152 1 Thiago Paiva
153 1 Thiago Paiva
154 34 Thiago Paiva
h2. Esquemas e relações 
155 1 Thiago Paiva
156 1 Thiago Paiva
* nova-compute <> VIF driver <> AMPQ <> nova-network <> Neutron manager <> API client <> Neutron API <> Neutron plugin
157 1 Thiago Paiva
* Neutron common:
158 1 Thiago Paiva
*# API e API Extension
159 32 Thiago Paiva
*# AuthN e AuthZ
160 32 Thiago Paiva
*# Backend
161 32 Thiago Paiva
*# Hypervisor(n)
162 32 Thiago Paiva
*#* VM (n) + eth(n) <> hypervisor's Network stack
163 32 Thiago Paiva
*#* Quantum plugin agent <> hypervisor's Network stack
164 32 Thiago Paiva
* Neutron Plugin <> Neutron common
165 1 Thiago Paiva
* Neutron Plugin <> Hypervisor(n) (quantum plugin agent)
166 32 Thiago Paiva
* Neutron Plugin <> Network switch (quantum plugin agent)
167 32 Thiago Paiva
168 32 Thiago Paiva
169 32 Thiago Paiva
h2. Quantum Plugin BaseClass
170 32 Thiago Paiva
171 32 Thiago Paiva
* get_all_networks(self, tenant_id, **kwargs): returns a dictionary containing all <network_uuid, network_name> for the specified tenant.
172 1 Thiago Paiva
* create_network(self, tenant_id, net_name, **kwargs): creates a new Virtual Network, and assigns it a symbolic name.
173 21 Thiago Paiva
* delete_network(self, tenant_id, net_id): deletes the network with the specified network identifier belonging to the specified tenant.
174 21 Thiago Paiva
* get_network_details(self, tenant_id, net_id): retrieves a list of all the remote vifs that are attached to the network.
175 27 Thiago Paiva
* update_network(self, tenant_id, net_id, **kwargs): updates the attributes of a particular Virtual Network.
176 1 Thiago Paiva
* get_all_ports(self, tenant_id, net_id, **kwargs): retrieves all port identifiers belonging to the specified Virtual Network.
177 1 Thiago Paiva
* create_port(self, tenant_id, net_id, port_state=None, **kwargs): creates a port on the specified Virtual Network.
178 1 Thiago Paiva
* update_port(self, tenant_id, net_id, port_id, **kwargs): updates the attributes of a specific port on the specified Virtual Network.
179 1 Thiago Paiva
* delete_port(self, tenant_id, net_id, port_id): deletes a port on a specified Virtual Network, if the port contains a remote interface attachment, the remote interface is first un-plugged and then the port is deleted
180 1 Thiago Paiva
* get_port_details(self, tenant_id, net_id, port_id): this method allows the user to retrieve a remote interface that is attached to this particular port
181 1 Thiago Paiva
* plug_interface(self, tenant_id, net_id, port_id, remote_interface_id): attaches a remote interface to the specified port on the specified Virtual Network.
182 1 Thiago Paiva
* unplug_interface(self, tenant_id, net_id, port_id): detaches a remote interface from the specified port on the specified Virtual Network.
183 1 Thiago Paiva
* __subclasshook__(cls, klass): the __subclasshook__ method is a class method that will be called (Already Implemented) everytime a class is tested using issubclass(klass, Plugin). In that case, it will check that every method marked with the abstractmethod decorator is provided by the plugin class
184 1 Thiago Paiva
185 27 Thiago Paiva
186 31 Thiago Paiva
h2. Dúvidas ou perguntas para orientação
187 31 Thiago Paiva
188 21 Thiago Paiva
* O que é e o que faz o Neutron Backend?
189 21 Thiago Paiva
* Como é feita a autenticação?
190 27 Thiago Paiva
* Quais são as funções da API?
191 1 Thiago Paiva
* Como definir quais máquinas físicas fazem parte da núvem?
192 21 Thiago Paiva
193 21 Thiago Paiva
194 34 Thiago Paiva
h2. Definições
195 21 Thiago Paiva
196 34 Thiago Paiva
* AuthN: authentication
197 34 Thiago Paiva
* AuthZ: authorization
198 34 Thiago Paiva
* Backend: tecnologia que está por trás do plugin.
199 34 Thiago Paiva
* Quantum API core: conjunto mínimo de operações
200 34 Thiago Paiva
* driver: código que é capaz de conversar com um modelo particular ou uma família de switches.
201 27 Thiago Paiva
202 21 Thiago Paiva
203 27 Thiago Paiva
h2. Referências
204 32 Thiago Paiva
205 39 Thiago Paiva
206 27 Thiago Paiva
h3. Visitadas
207 27 Thiago Paiva
208 38 Thiago Paiva
* http://docs.openstack.org/api/openstack-network/2.0/
209 38 Thiago Paiva
* http://www.slideshare.net/danwent/openstack-quantum-intro-os-meetup-32612
210 38 Thiago Paiva
* "OpenStack Quantum Networking update":https://www.youtube.com/watch?v=_I1SrO2QBpg
211 38 Thiago Paiva
* https://wiki.openstack.org/wiki/NeutronDevelopment
212 38 Thiago Paiva
* http://docs.openstack.org/havana/config-reference/content/
213 38 Thiago Paiva
* "Networking plug-ins":http://docs.openstack.org/havana/config-reference/content/networking-options-plugins.html
214 38 Thiago Paiva
* "OpenStack Admin Guide - Networking":http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html
215 38 Thiago Paiva
* "OpenStack Networking API v2.0 Reference":http://docs.openstack.org/api/openstack-network/2.0/content/index.html
216 21 Thiago Paiva
217 39 Thiago Paiva
218 1 Thiago Paiva
h3. Não visitadas
219 1 Thiago Paiva
220 38 Thiago Paiva
* http://www.ovirt.org/images/b/b3/Quantum_Ovirt_discussion-20111103.pdf
221 38 Thiago Paiva
* http://events.csdn.net/OpenStack/Takashi Torii-OpenStack and OpenFlowSDN.pdf
222 38 Thiago Paiva
* http://www.openstack.org/assets/presentation-media/HK-Openstack-Namespaces1-.pdf
223 38 Thiago Paiva
* http://www.iaas.uni-stuttgart.de/lehre/vorlesung/aktuell/vorlesungen/smcc/materialien/SoftwareDefinedNetwork_20131024_v04.pdf
224 38 Thiago Paiva
* http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps11541/data_sheet_c78-727737.pdf
225 38 Thiago Paiva
* http://www.linux-kvm.org/wiki/images/7/7b/Kvm-forum-2013-openstack.pdf
226 38 Thiago Paiva
* https://wiki.openstack.org/wiki/NeutronDevstack
227 38 Thiago Paiva
* http://www.openstack.org/assets/presentation-media/HK-Openstack-Namespaces1-.pdf
228 38 Thiago Paiva
* http://www.iaas.uni-stuttgart.de/lehre/vorlesung/aktuell/vorlesungen/smcc/materialien/SoftwareDefinedNetwork_20131024_v04.pdf
229 38 Thiago Paiva
* http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps11541/data_sheet_c78-727737.pdf
230 39 Thiago Paiva
* "Quantum Plugins and Networking":http://www.xlcloud.org/bin/download/Download/Presentations/XLCloud-Networking_Needs_Quantum.pdf
231 21 Thiago Paiva
232 38 Thiago Paiva
233 39 Thiago Paiva
h2. Planejamento para o terceiro entregável
234 39 Thiago Paiva
235 39 Thiago Paiva
!plan.png!
236 39 Thiago Paiva
237 39 Thiago Paiva
238 38 Thiago Paiva
-----------------------------
239 34 Thiago Paiva
240 1 Thiago Paiva
h2. Neutron e SDN (Em esboço ainda)
241 1 Thiago Paiva
242 12 Raphael Cóbe
* Neutron:
243 1 Thiago Paiva
*# presentation: operational APIs
244 12 Raphael Cóbe
*# virtual network application: L2 switch
245 1 Thiago Paiva
*# controller; Neutron pode fazer interface  ou implementar essa camada.
246 7 Thiago Paiva
*# management: Neutron pode fazer interface  ou implementar essa camada.
247 7 Thiago Paiva
*# devices: Neutron pode fazer interface  ou implementar essa camada.
248 7 Thiago Paiva
249 11 Raphael Cóbe
250 37 Thiago Paiva
----------------------------------------------------------------
251 11 Raphael Cóbe
252 10 Raphael Cóbe
h2. Neutron Server
253 10 Raphael Cóbe
254 10 Raphael Cóbe
quantum-server: processo principal do Netron. Expõe Netron API e encaminha as requisições de usuário para o plugin.
255 10 Raphael Cóbe
256 1 Thiago Paiva
257 7 Thiago Paiva
h2. Agentes
258 10 Raphael Cóbe
259 1 Thiago Paiva
Agentes enviam mensagens para o Quantum-Server via RPC (rabbitmq ou qpid) ou Netron API padrão (REST).
260 1 Thiago Paiva
261 12 Raphael Cóbe
* plugin agent (quantum-*-agent): roda em cada hypervisor para realizar configuração local do vswitch. Dependente do plugin escolhido.
262 1 Thiago Paiva
* dhcp agent (quantum-dhcp-agent). serviço de DHCP para redes dos tentents. Usado quando as VMs devem receber IP de forma automatizada. Endereços via DHCP. Requer no mínimo dnsmasq 2.59. Configurado especificamente para o plugin utilizado.
263 1 Thiago Paiva
* L3 agent (quantum-l3-agent). Encaminhamento L3/NAT para oferecer acessos as redes externas. Roteador que conecta as redes L2. Fica no Network Node. Usa: Linux IP Stack e IP tables.
264 1 Thiago Paiva
** Deve-se garantir que existam rotas entre o serviço de metadata do host e cada rede privada.
265 2 Thiago Paiva
** Nós que rodem quantum-l3-agent não devem ter endereços IP especificados manualmente para a NIC conectada a rede externa e sim uma faixa de IPs que poderá ser usada para roteamento.
266 7 Thiago Paiva
267 1 Thiago Paiva
<pre>
268 1 Thiago Paiva
$ sudo ovs-vsctrl add-br br-ext
269 1 Thiago Paiva
$ sudo ovs-vsctrl add-port br-ext eth1
270 3 Thiago Paiva
</pre>
271 3 Thiago Paiva
272 1 Thiago Paiva
* não é possível executar ping para IPs fixos. Ao invés disso, usar: router network namespace (qrouter-<UUID>)
273 1 Thiago Paiva
<pre> $ ip netns exec qrouter-<UUID> ping <fixed ip> </pre>
274 1 Thiago Paiva
275 1 Thiago Paiva
276 1 Thiago Paiva
h2. Netron API
277 1 Thiago Paiva
278 1 Thiago Paiva
Serviço de redes virtual. Define conexões e endereços para os outros serviços.
279 12 Raphael Cóbe
280 1 Thiago Paiva
* Network: segmento L2 isolado (análogo a uma VLAN).
281 7 Thiago Paiva
* Subnet: bloco de endereços de IP (V4 ou V6) e estados de configuração   associados.
282 7 Thiago Paiva
* Port: ponto para conexção de dispositivos.
283 1 Thiago Paiva
<pre>
284 1 Thiago Paiva
    network <-- port
285 8 Thiago Paiva
       |          |
286 1 Thiago Paiva
        -------------- subnet
287 1 Thiago Paiva
</pre>
288 15 Raphael Cóbe
289 1 Thiago Paiva
> fixed_ips é atributo do port
290 15 Raphael Cóbe
> port.fixed_ips = {<IP1>:<subnet1>, <IP2>:<subnet2>, ...}
291 1 Thiago Paiva
292 12 Raphael Cóbe
293 1 Thiago Paiva
h2. Netron Plugins
294 1 Thiago Paiva
295 12 Raphael Cóbe
Projeto original assume um modelo muito básico para realizar isolamento através de Linux VLANs e tabelas IP. Netron introduz o conceito de plugin, que é a
296 1 Thiago Paiva
implementação de requisições lógicas de API em forma de um back-end acoplável. Padrão: Open vSwitch e Linux Bridge. Plugin deve estar em cada nó que usa
297 1 Thiago Paiva
pacotes de dados.
298 1 Thiago Paiva
299 1 Thiago Paiva
Os plugins devem processar chamadas de API e gerenciar vSwitches.
300 15 Raphael Cóbe
301 1 Thiago Paiva
OpenVSwitch: open vswitch, quantum-plugin-openvswitch-agent
302 12 Raphael Cóbe
303 1 Thiago Paiva
<pre>
304 1 Thiago Paiva
$ sudo ovs-vsctrl add-br br-int
305 1 Thiago Paiva
</pre>
306 1 Thiago Paiva
307 1 Thiago Paiva
* br-int: integration bridge, nome padrão e fixo.
308 1 Thiago Paiva
309 1 Thiago Paiva
310 1 Thiago Paiva
h2. Netron Command Line Application
311 1 Thiago Paiva
312 1 Thiago Paiva
Requer: python-pyparsing, python-cliff, python-quantumclient
313 1 Thiago Paiva
314 1 Thiago Paiva
315 1 Thiago Paiva
h2. OpenStack Compute
316 1 Thiago Paiva
317 1 Thiago Paiva
Interagem com Netron através da API. Comunica com Netron API para connectar cada vNIC da VM em uma rede em particular.
318 1 Thiago Paiva
319 1 Thiago Paiva
h2. Neutron Client
320 1 Thiago Paiva
321 1 Thiago Paiva
agent-*
322 1 Thiago Paiva
323 1 Thiago Paiva
dhcp-agent-*
324 1 Thiago Paiva
325 1 Thiago Paiva
ext-* (extensões)
326 1 Thiago Paiva
327 1 Thiago Paiva
floatingip-*
328 1 Thiago Paiva
329 1 Thiago Paiva
l3-agent-*
330 1 Thiago Paiva
331 1 Thiago Paiva
lb-* (loading balance)
332 1 Thiago Paiva
    lb-pool-*
333 1 Thiago Paiva
    lb-healthmonitor-*
334 1 Thiago Paiva
    lb-member-*
335 1 Thiago Paiva
    lb-vip-*
336 12 Raphael Cóbe
337 16 Raphael Cóbe
net-*
338 15 Raphael Cóbe
339 1 Thiago Paiva
queue-*
340 1 Thiago Paiva
341 1 Thiago Paiva
router-*
342 1 Thiago Paiva
343 1 Thiago Paiva
security-*
344 1 Thiago Paiva
345 1 Thiago Paiva
subnet-*
346 1 Thiago Paiva
347 1 Thiago Paiva
quota-*
348 1 Thiago Paiva
349 1 Thiago Paiva
security-group-*
350 1 Thiago Paiva
351 15 Raphael Cóbe
h2. Exemplos - Netron API
352 15 Raphael Cóbe
353 1 Thiago Paiva
<pre>
354 15 Raphael Cóbe
$ quantum net-create net1
355 1 Thiago Paiva
$ quantum net-create net2 --provider:network_type local
356 15 Raphael Cóbe
$ quantum net-create --tenant-id=<id> net1
357 1 Thiago Paiva
358 15 Raphael Cóbe
$ quantum subnet-create net1 192.168.0.2/22 --name subnet1
359 1 Thiago Paiva
360 15 Raphael Cóbe
$ quantum port-create net1 --fixed-ip ip_addr=192.168.2.40
361 1 Thiago Paiva
$ quantum port-create net1
362 12 Raphael Cóbe
$ quantum port-list --fixed-ips
363 1 Thiago Paiva
$ quantum port-list --tenant-id=<tenant id>
364 1 Thiago Paiva
$ quantum port-list --device-id=<vm id>
365 1 Thiago Paiva
366 7 Thiago Paiva
</pre>
367 1 Thiago Paiva
368 1 Thiago Paiva
* as redes já devem estar criadas para serem adicionadas na instanciação das VMs
369 1 Thiago Paiva
<pre>
370 1 Thiago Paiva
$ nova boot --image=<img id> --flavor=<fl id> --nic net_id=<net id> <vm name>
371 1 Thiago Paiva
</pre>
372 12 Raphael Cóbe
* para ip fixo (port deve ser criado antes da instanciação)
373 16 Raphael Cóbe
<pre>
374 15 Raphael Cóbe
$ nova boot --image=<img id> --flavor=<fl id> --nic port_id=<net id> <vm name>
375 1 Thiago Paiva
</pre>
376 7 Thiago Paiva
377 15 Raphael Cóbe
h2. Físico -> Virtual
378 19 Raphael Cóbe
379 7 Thiago Paiva
1) eth0 (VM)
380 1 Thiago Paiva
2) TAP VNET0 (hypervisor network interface card, VIF, vNIC)
381 1 Thiago Paiva
3) LINUX BRIDGE qbrXXX (hub, multi NIC, virtual ou físico)
382 17 Raphael Cóbe
4) veth pair {qcbXXX, qvoXXX} (entra de um lado e sai do outro)
383 19 Raphael Cóbe
5) open switch bridge br-int (virtual switch, integration bridge,todos as VM estão conectadas a ele)
384 17 Raphael Cóbe
6) veth pair (int-br-eth1, phy-br-eth1)
385 17 Raphael Cóbe
7) physical network interface card eth1
386 17 Raphael Cóbe
387 17 Raphael Cóbe
h2. Ryu
388 17 Raphael Cóbe
389 17 Raphael Cóbe
<pre>
390 17 Raphael Cóbe
$ sudo pip install ryu
391 17 Raphael Cóbe
$ sudo apt-get install quantum-plugin-ryu-agent openvswitch-switch python-openvswitch openvswitch-datapath-dkms
392 17 Raphael Cóbe
</pre>
393 12 Raphael Cóbe
394 1 Thiago Paiva
* ovs_ryu_plugin.ini e quantum.conf devem ser copiados em cada nó que tenha agente ryu
395 7 Thiago Paiva
396 1 Thiago Paiva
397 1 Thiago Paiva
h2. Floodlight
398 1 Thiago Paiva
399 1 Thiago Paiva
400 1 Thiago Paiva
Floodlight pode ser utilizado como o backend para o OpenStack Network utilizando um Plug-in para Neutron. O Neutron expõe um modelo de networking-as-a-service via API REST implementada no Floodlight. Dois componentes principais são utilizados para essa integração: um aplicativo Virtual Switch do Floodlight que implementa a Neutron API e o o RestProxy plugin que conecta o Neutron com o Floodlight.
401 1 Thiago Paiva
402 1 Thiago Paiva
Conexão entre FloodLight e Neutron em dois passos:
403 1 Thiago Paiva
404 1 Thiago Paiva
# Rodar o REST Proxy Plug-in no neutron-server. Esse plugin foi projetado para rodar como parte do Neutro service. 
405 1 Thiago Paiva
# Habilitar o Virtual Switch no Floodlight (antigo Virtual Network Filter). Esse é o módulo que implementa um isolamento de nível 2 (baseado em MAC) em redes openflow. Esse módulo vem com o Floodlight por padrão e não depende do Neutron ou do Openstack para ser executado.
406 1 Thiago Paiva
407 1 Thiago Paiva
408 1 Thiago Paiva
h2. Not to do
409 1 Thiago Paiva
410 1 Thiago Paiva
* Proxies ainda não implementados então não se deve executar:
411 1 Thiago Paiva
** nova-manage
412 1 Thiago Paiva
** nova para administrar recursos de rede