OpenStack Networking » History » Version 20

Thiago Paiva, 21 Jan 2014 17:08

1 12 Raphael Cóbe
h1. OpenStack Networking - Netron
2 1 Thiago Paiva
3 1 Thiago Paiva
4 20 Thiago Paiva
5 20 Thiago Paiva
6 20 Thiago Paiva
7 20 Thiago Paiva
8 20 Thiago Paiva
9 20 Thiago Paiva
10 20 Thiago Paiva
11 20 Thiago Paiva
12 20 Thiago Paiva
13 20 Thiago Paiva
14 20 Thiago Paiva
15 20 Thiago Paiva
16 20 Thiago Paiva
17 20 Thiago Paiva
18 20 Thiago Paiva
19 20 Thiago Paiva
20 20 Thiago Paiva
21 20 Thiago Paiva
22 20 Thiago Paiva
23 20 Thiago Paiva
24 20 Thiago Paiva
25 20 Thiago Paiva
26 20 Thiago Paiva
27 20 Thiago Paiva
28 20 Thiago Paiva
29 20 Thiago Paiva
30 20 Thiago Paiva
31 20 Thiago Paiva
32 20 Thiago Paiva
33 20 Thiago Paiva
34 13 Raphael Cóbe
h2. Netron Standard Architecture
35 13 Raphael Cóbe
36 14 Raphael Cóbe
37 14 Raphael Cóbe
!http://docs.openstack.org/trunk/openstack-network/admin/content/figures/1/figures/Quantum-PhysNet-Diagram.png!
38 14 Raphael Cóbe
Imagem retirada da Documentação Openstack Network Admin: http://docs.openstack.org/trunk/openstack-network/admin/
39 14 Raphael Cóbe
40 13 Raphael Cóbe
* cloud controller host (Cloud Controller Node): quantum-server, nova-api, nova-scheduler, keystone, RabbitMQ, MySQL.
41 13 Raphael Cóbe
* network gateway host (Network Node): quantum-metadata-agent, quantum-dhcp-agent, quantum-l3-agent, quantum-*-plugin-agent
42 13 Raphael Cóbe
* conjunto de hypervisors para rodar VMs. Compute node: nova-compute, quantum-*-plugin-agent
43 13 Raphael Cóbe
44 13 Raphael Cóbe
> 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.
45 13 Raphael Cóbe
46 13 Raphael Cóbe
* DataNetwork: comunicação de dados dentro da implementação de nuvem.
47 13 Raphael Cóbe
* Management Network: comunicações entre componentes OS.
48 13 Raphael Cóbe
* External Network: oferece acesso à internet à implementação OS.
49 13 Raphael Cóbe
* 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.
50 13 Raphael Cóbe
51 13 Raphael Cóbe
52 13 Raphael Cóbe
53 13 Raphael Cóbe
54 13 Raphael Cóbe
55 12 Raphael Cóbe
h2. Neutron Server
56 1 Thiago Paiva
57 12 Raphael Cóbe
quantum-server: processo principal do Netron. Expõe Netron API e encaminha as requisições de usuário para o plugin.
58 1 Thiago Paiva
59 1 Thiago Paiva
60 12 Raphael Cóbe
h2. Agentes
61 1 Thiago Paiva
62 12 Raphael Cóbe
Agentes enviam mensagens para o Quantum-Server via RPC (rabbitmq ou qpid) ou Netron API padrão (REST).
63 1 Thiago Paiva
64 7 Thiago Paiva
* plugin agent (quantum-*-agent): roda em cada hypervisor para realizar configuração local do vswitch. Dependente do plugin escolhido.
65 7 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.
66 7 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.
67 11 Raphael Cóbe
** Deve-se garantir que existam rotas entre o serviço de metadata do host e cada rede privada.
68 11 Raphael Cóbe
** 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.
69 11 Raphael Cóbe
70 10 Raphael Cóbe
<pre>
71 10 Raphael Cóbe
$ sudo ovs-vsctrl add-br br-ext
72 10 Raphael Cóbe
$ sudo ovs-vsctrl add-port br-ext eth1
73 10 Raphael Cóbe
</pre>
74 1 Thiago Paiva
75 7 Thiago Paiva
* não é possível executar ping para IPs fixos. Ao invés disso, usar: router network namespace (qrouter-<UUID>)
76 10 Raphael Cóbe
<pre> $ ip netns exec qrouter-<UUID> ping <fixed ip> </pre>
77 1 Thiago Paiva
78 1 Thiago Paiva
79 12 Raphael Cóbe
h2. Netron API
80 1 Thiago Paiva
81 1 Thiago Paiva
Serviço de redes virtual. Define conexões e endereços para os outros serviços.
82 1 Thiago Paiva
83 2 Thiago Paiva
* Network: segmento L2 isolado (análogo a uma VLAN).
84 7 Thiago Paiva
* Subnet: bloco de endereços de IP (V4 ou V6) e estados de configuração   associados.
85 1 Thiago Paiva
* Port: ponto para conexção de dispositivos.
86 1 Thiago Paiva
<pre>
87 1 Thiago Paiva
    network <-- port
88 3 Thiago Paiva
       |          |
89 3 Thiago Paiva
        -------------- subnet
90 1 Thiago Paiva
</pre>
91 1 Thiago Paiva
92 1 Thiago Paiva
> fixed_ips é atributo do port
93 1 Thiago Paiva
> port.fixed_ips = {<IP1>:<subnet1>, <IP2>:<subnet2>, ...}
94 1 Thiago Paiva
95 1 Thiago Paiva
96 1 Thiago Paiva
h2. Netron Plugins
97 12 Raphael Cóbe
98 1 Thiago Paiva
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
99 7 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
100 7 Thiago Paiva
pacotes de dados.
101 1 Thiago Paiva
102 1 Thiago Paiva
Os plugins devem processar chamadas de API e gerenciar vSwitches.
103 8 Thiago Paiva
104 1 Thiago Paiva
OpenVSwitch: open vswitch, quantum-plugin-openvswitch-agent
105 1 Thiago Paiva
106 15 Raphael Cóbe
<pre>
107 1 Thiago Paiva
$ sudo ovs-vsctrl add-br br-int
108 15 Raphael Cóbe
</pre>
109 1 Thiago Paiva
110 12 Raphael Cóbe
* br-int: integration bridge, nome padrão e fixo.
111 1 Thiago Paiva
112 1 Thiago Paiva
113 12 Raphael Cóbe
h2. Netron Command Line Application
114 1 Thiago Paiva
115 1 Thiago Paiva
Requer: python-pyparsing, python-cliff, python-quantumclient
116 1 Thiago Paiva
117 1 Thiago Paiva
118 15 Raphael Cóbe
h2. OpenStack Compute
119 1 Thiago Paiva
120 12 Raphael Cóbe
Interagem com Netron através da API. Comunica com Netron API para connectar cada vNIC da VM em uma rede em particular.
121 1 Thiago Paiva
122 1 Thiago Paiva
h2. Neutron Client
123 1 Thiago Paiva
124 1 Thiago Paiva
agent-*
125 1 Thiago Paiva
126 1 Thiago Paiva
dhcp-agent-*
127 1 Thiago Paiva
128 1 Thiago Paiva
ext-* (extensões)
129 1 Thiago Paiva
130 1 Thiago Paiva
floatingip-*
131 1 Thiago Paiva
132 1 Thiago Paiva
l3-agent-*
133 1 Thiago Paiva
134 1 Thiago Paiva
lb-* (loading balance)
135 1 Thiago Paiva
    lb-pool-*
136 1 Thiago Paiva
    lb-healthmonitor-*
137 1 Thiago Paiva
    lb-member-*
138 1 Thiago Paiva
    lb-vip-*
139 1 Thiago Paiva
140 1 Thiago Paiva
net-*
141 1 Thiago Paiva
142 1 Thiago Paiva
queue-*
143 1 Thiago Paiva
144 1 Thiago Paiva
router-*
145 1 Thiago Paiva
146 1 Thiago Paiva
security-*
147 1 Thiago Paiva
148 1 Thiago Paiva
subnet-*
149 1 Thiago Paiva
150 1 Thiago Paiva
quota-*
151 1 Thiago Paiva
152 1 Thiago Paiva
security-group-*
153 1 Thiago Paiva
154 12 Raphael Cóbe
h2. Exemplos - Netron API
155 16 Raphael Cóbe
156 15 Raphael Cóbe
<pre>
157 1 Thiago Paiva
$ quantum net-create net1
158 1 Thiago Paiva
$ quantum net-create net2 --provider:network_type local
159 1 Thiago Paiva
$ quantum net-create --tenant-id=<id> net1
160 1 Thiago Paiva
161 1 Thiago Paiva
$ quantum subnet-create net1 192.168.0.2/22 --name subnet1
162 1 Thiago Paiva
163 1 Thiago Paiva
$ quantum port-create net1 --fixed-ip ip_addr=192.168.2.40
164 1 Thiago Paiva
$ quantum port-create net1
165 1 Thiago Paiva
$ quantum port-list --fixed-ips
166 1 Thiago Paiva
$ quantum port-list --tenant-id=<tenant id>
167 1 Thiago Paiva
$ quantum port-list --device-id=<vm id>
168 1 Thiago Paiva
169 15 Raphael Cóbe
</pre>
170 15 Raphael Cóbe
171 1 Thiago Paiva
* as redes já devem estar criadas para serem adicionadas na instanciação das VMs
172 15 Raphael Cóbe
<pre>
173 1 Thiago Paiva
$ nova boot --image=<img id> --flavor=<fl id> --nic net_id=<net id> <vm name>
174 15 Raphael Cóbe
</pre>
175 1 Thiago Paiva
* para ip fixo (port deve ser criado antes da instanciação)
176 15 Raphael Cóbe
<pre>
177 1 Thiago Paiva
$ nova boot --image=<img id> --flavor=<fl id> --nic port_id=<net id> <vm name>
178 15 Raphael Cóbe
</pre>
179 1 Thiago Paiva
180 12 Raphael Cóbe
h2. Físico -> Virtual
181 1 Thiago Paiva
182 1 Thiago Paiva
1) eth0 (VM)
183 1 Thiago Paiva
2) TAP VNET0 (hypervisor network interface card, VIF, vNIC)
184 7 Thiago Paiva
3) LINUX BRIDGE qbrXXX (hub, multi NIC, virtual ou físico)
185 1 Thiago Paiva
4) veth pair {qcbXXX, qvoXXX} (entra de um lado e sai do outro)
186 1 Thiago Paiva
5) open switch bridge br-int (virtual switch, integration bridge,todos as VM estão conectadas a ele)
187 1 Thiago Paiva
6) veth pair (int-br-eth1, phy-br-eth1)
188 1 Thiago Paiva
7) physical network interface card eth1
189 1 Thiago Paiva
190 12 Raphael Cóbe
h2. Ryu
191 16 Raphael Cóbe
192 15 Raphael Cóbe
<pre>
193 1 Thiago Paiva
$ sudo pip install ryu
194 7 Thiago Paiva
$ sudo apt-get install quantum-plugin-ryu-agent openvswitch-switch python-openvswitch openvswitch-datapath-dkms
195 15 Raphael Cóbe
</pre>
196 19 Raphael Cóbe
197 7 Thiago Paiva
* ovs_ryu_plugin.ini e quantum.conf devem ser copiados em cada nó que tenha agente ryu
198 1 Thiago Paiva
199 1 Thiago Paiva
200 17 Raphael Cóbe
h2. Floodlight
201 19 Raphael Cóbe
202 17 Raphael Cóbe
203 17 Raphael Cóbe
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.
204 17 Raphael Cóbe
205 17 Raphael Cóbe
Conexão entre FloodLight e Neutron em dois passos:
206 17 Raphael Cóbe
207 17 Raphael Cóbe
# Rodar o REST Proxy Plug-in no neutron-server. Esse plugin foi projetado para rodar como parte do Neutro service. 
208 17 Raphael Cóbe
# 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.
209 17 Raphael Cóbe
210 17 Raphael Cóbe
211 12 Raphael Cóbe
h2. Not to do
212 1 Thiago Paiva
213 7 Thiago Paiva
* Proxies ainda não implementados então não se deve executar:
214 1 Thiago Paiva
** nova-manage
215 1 Thiago Paiva
** nova para administrar recursos de rede