diff --git a/docs/latex/report.pdf b/docs/latex/report.pdf index 70cf1494a84cbdc4c5cd3a28289f9f9f91ef8083..37f05b8cdf676675724aba20544b558ae98d1656 100644 Binary files a/docs/latex/report.pdf and b/docs/latex/report.pdf differ diff --git a/docs/latex/report.tex b/docs/latex/report.tex index 394c99f5a739052f6fa4d896c3af2d0f3e55e893..39867e99db141000c10309cb1956e9ba0dd6de84 100644 --- a/docs/latex/report.tex +++ b/docs/latex/report.tex @@ -3306,9 +3306,131 @@ El procedimiento para la respuesta ICMP echo reply es similar al descrito pero e \section{Open vSwitch} -El mechanism driver Open vSwitch tiene soporte para los siguientes tipos de drivers: local, flat, VLAN, VXLAN y GRE. Dentro de Neutron, OVS opera como un switch implementado por software el cual utiliza bridges virtuales y reglas de flujos (flow rules) para hacer el forwarding entre distintos host. +El mechanism driver Open vSwitch tiene soporte para los siguientes tipos de drivers: local, flat, VLAN, VXLAN y GRE. Dentro de Neutron, OVS opera como un switch implementado por software el cual utiliza bridges virtuales y reglas de flujos (flow rules) para hacer el forwarding entre distintos host. A continuación se describen brevemente los componentes de OVS: +\begin{itemize} + \item \textbf{Kernel module}: el módulo openvswitch es el equivalente a un ASIC en un switch por hardware. Dicho módulo se encarga de procesar todos los paquetes. + + \item \textbf{vSwitch daemon}: el demonio ovs-vswitchd es un proceso de Linux que corre en el espacio del usuario en cada nodo físico y se encarga de indicar como estará programado el kernel module. + + \item \textbf{Database server}: es una base de datos local utilizada en cada nodo físico llamada Open vSwitch Database Server (OVSDB), la cual mantiene la configuración de los switches virtuales. +\end{itemize} + +En la figura \ref{fig:ovs:componentes} se muestra un diagrama en alto nivel de estos componentes. + + \begin{figure}[H] + \centering + \includegraphics[width=0.9\columnwidth]{analisis/ovs/componentes-ovs} + \caption{Diagrama de componentes de Open vSwitch} + \label{fig:ovs:componentes} + \end{figure} + + +El agente que utiliza OVS en Neutron se llama neutron-openvswitch-agent. Es un servicio configurado en los hosts utilizando el mechanism driver Open vSwitch y es responsable de manejar la implementación de redes y sus interfaces relacionadas. El agente conecta interfaces tap con Open vSwitch switches o Linux Bridges y programa flujos utilizando herramientas de OVS como ovs-vsctl y ovs-ofctl basandose en datos que provee el servicio neutron-server.\\ + +En una implementación basada en OVS existen 5 tipos de dispositivos virtuales de red: + +\begin{itemize} + \item Tap interfaces + \item Linux bridges + \item Virtual ethernet cables (veth) + \item OVS bridges + \item OVS patch ports +\end{itemize} + +Open vSwitch tiene un tipo de puerto propio que imita el comportamiento de los veth cables pero optimizado para el uso con OVS bridges. Cuando se conectan dos OVS bridges, un puerto es reservado en cada switch como un patch port. Los patch ports son configurados con un peer name que corresponde al patch port en el otro switch.\\ + +El driver OVS utiliza una serie de bridges para implementar las distintas funcionalidades que ofrece Neutron. A continuación se mencionan los mismos junto a una breve descripción del rol que cumplen: + +\begin{itemize} + \item \textbf{Integration bridge}: el bridge de integración, comúnmente llamado br-int es el switch virtual central al cual se conectan la mayor cantidad de dispositivos, como son las instancias, servidores de DHCP y routers, entre otros. Dependiendo del driver del firewall utilizado las instancias se conectan directamente al bridge en cuestión o utilizan un dispositivo adicional (un Linux bridge) para llegar al br-int. + + \item \textbf{Provider bridge}: el nombre de este bridge dependerá de la configuración del ambiente, en la instalación utilizada se llama br-provider. Se encarga de proveer conectividad con la red física del Datacenter mediante una interfaz física del nodo. Además se conecta con el bridge de integración mediante patch ports. + + \item \textbf{Tunnel bridge}: se trata de un provider bridge particular que se utiliza para conectar los endpoints de las redes de overlay. El nombre por defecto para este bridge es br-tun. +\end{itemize} +Cada nodo de control, cómputo y red del ambiente de Openstack tendrá un bridge de integración, proveedor y túnel. A diferencia de Linux Bridge, el driver OVS no crea nuevos dispositivos virtuales para implementar las redes tenant o provider. En este caso las redes creadas utilizan como infraestructura base los bridges mencionados y reglas de OpenFlow, mediante las cuales se indica, por ejemplo, la etiqueta que se tiene que agregar o quitar a un paquete en función de la interfaz que lo recibe. + +\subsubsection{Archivos de configuración} +Al igual que en el estudio del driver Linux Bridge se detallan brevemente las principales configuraciones de los archivos ubicados en el directorio /etc/neutron/plugins/ml2:\\ + +\noindent \textbf{ml2\_conf.ini} +\begin{lstlisting} +[root@infra1 ~]# cat /etc/neutron/plugins/ml2/ml2_conf.ini +[ml2] +type_drivers = vxlan,vlan,flat +tenant_network_types = vxlan,vlan +mechanism_drivers = openvswitch +extension_drivers = port_security +# ML2 flat networks + +[ml2_type_flat] +flat_networks = +# ML2 VLAN networks + +[ml2_type_vlan] +network_vlan_ranges = vlan:150:200,vlan:300:400 +# ML2 VXLAN networks + +[ml2_type_vxlan] +vxlan_group = 239.1.1.1 +vni_ranges = 1:1000 + +[ml2_type_geneve] +vni_ranges = +max_header_size = 38 +# Security groups + +[securitygroup] +firewall_driver = iptables_hybrid +enable_security_group = True +enable_ipset = True + +\end{lstlisting} + +\begin{itemize} + \item \textbf{[ml2]}: esta sección detalla los tipos de redes soportados (vxlan, vlan y flat) y los tipos de redes soportados para las redes tenants (vxlan y vlan), en donde el orden indica sobre qué tipo de red tendrá preferencia Neutron al crear una nueva red tenant. Luego se indica el driver utilizado. + + \item \textbf{[ml2\_type\_flat]}: en esta sección se encuentran las configuraciones correspondientes a las redes flat, las cuales se encuentra vacías debido a que en la instalación utilizada para OpenvSwitch no se soportan redes flat. + + \item \textbf{[ml2\_type\_vlan]}: en esta sección se encuentran las configuraciones correspondientes a las redes vlan, en donde se indican las redes físicas que pueden ser utilizadas para redes provider y tenant, así como los rangos de VLAN ID disponibles. + + \item \textbf{[ml2\_type\_vxlan]}: en esta sección se encuentran las configuraciones correspondientes a las redes vxlan, en donde se indica la dirección del grupo de multicast y el rango de VNI para ser utilizados por las redes tenant. + + \item \textbf{[securitygroup]}: en esta sección se indica si los grupos de seguridad están habilitados para su uso en Openstack y en caso positivo el driver para implementar el firewall en las instancias. En particular el driver iptables\_hybrid implementa las reglas de firewall usando iptables lo que implica la existencia de un Linux bridge adicional como intermediario entre la interfaz tap de las instancias y el bridge de integración. +\end{itemize} + +\noindent \textbf{openvswitch\_agent.ini} +\begin{lstlisting} +[root@infra1 ~]# cat /etc/neutron/plugins/ml2/openvswitch_agent.ini +[ovs] +local_ip = 10.0.31.11 +bridge_mappings = vlan:br-provider + +[agent] +l2_population = False +tunnel_types = vxlan +enable_distributed_routing = False +extensions = +# Security groups + +[securitygroup] +firewall_driver = iptables_hybrid +enable_security_group = True +enable_ipset = True + +\end{lstlisting} + +En este archivo se encuentran las configuraciones correspondientes al agente openvswitch. + +\begin{itemize} + \item \textbf{[ovs]}: en esta sección se indica en primer lugar la dirección IP del nodo que se utilizará para construir la red de overlay entre los distintos hosts. En la arquitectura presentada, el tráfico de las redes de overlay llega a la infraestructura física mediante una subinterfaz de la eth2 asociada al bridge br-vxlan con la subred 10.0.31.0/24. La configuración bridge\_mappings describe la correspondencia entre una etiqueta artificial como es “vlan” con un switch virtual creado con OVS como es br-provider. En Openstack al crear una red se asocia con alguna de las etiquetas indicadas en esta opción. + + \item \textbf{[agent]}: en esta sección se indica el tipo de las redes de overlay y si se habilita o no l2\_population. + + \item \textbf{[securitygroup]}: es idéntica a la mencionada en el archivo ml2\_conf.ini. +\end{itemize} \subsection{Escenario 1} \begin{figure}[H] diff --git a/docs/latex/report.toc b/docs/latex/report.toc index 4a7cd3b3bda8481896a279a72098fb87b968ddef..2f298218b1b60d1d9c4e9da3a1e5cb51ef7dba1a 100644 --- a/docs/latex/report.toc +++ b/docs/latex/report.toc @@ -161,45 +161,46 @@ \contentsline {subparagraph}{Paso 5}{100}{section*.199} \contentsline {subparagraph}{Paso 6}{100}{section*.201} \contentsline {section}{\numberline {7.3}Open vSwitch}{101}{section.7.3} -\contentsline {subsection}{\numberline {7.3.1}Escenario 1}{101}{subsection.7.3.1} -\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{101}{section*.203} -\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{105}{section*.204} -\contentsline {subparagraph}{Paso 1}{105}{section*.205} -\contentsline {subparagraph}{Paso 2}{105}{section*.206} -\contentsline {subparagraph}{Paso 3}{110}{section*.211} -\contentsline {subparagraph}{Paso 4}{112}{section*.214} -\contentsline {subsection}{\numberline {7.3.2}Escenario 2}{113}{subsection.7.3.2} -\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{113}{section*.216} -\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{116}{section*.217} -\contentsline {subparagraph}{Paso 1}{116}{section*.218} -\contentsline {subparagraph}{Paso 2}{116}{section*.219} -\contentsline {subparagraph}{Paso 3}{116}{section*.220} -\contentsline {subparagraph}{Paso 4}{117}{section*.222} -\contentsline {subparagraph}{Paso 5}{117}{section*.223} -\contentsline {subparagraph}{Paso 6}{117}{section*.224} -\contentsline {subparagraph}{Paso 7}{117}{section*.226} -\contentsline {subsection}{\numberline {7.3.3}Escenario 3}{118}{subsection.7.3.3} -\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{118}{section*.228} -\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{120}{section*.229} -\contentsline {subparagraph}{Paso 1}{120}{section*.230} -\contentsline {subparagraph}{Paso 2}{120}{section*.231} -\contentsline {subparagraph}{Paso 3}{120}{section*.232} -\contentsline {subparagraph}{Paso 4}{121}{section*.234} -\contentsline {subparagraph}{Paso 5}{121}{section*.235} -\contentsline {subparagraph}{Paso 6}{122}{section*.237} -\contentsline {subparagraph}{Paso 7}{123}{section*.239} -\contentsline {subsection}{\numberline {7.3.4}Escenario 4}{123}{subsection.7.3.4} -\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{123}{section*.241} -\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{124}{section*.242} -\contentsline {subparagraph}{Paso 1}{124}{section*.243} -\contentsline {subparagraph}{Paso 2}{124}{section*.244} -\contentsline {subparagraph}{Paso 3}{124}{section*.245} -\contentsline {subparagraph}{Paso 4}{125}{section*.248} -\contentsline {subparagraph}{Paso 5}{125}{section*.249} -\contentsline {subparagraph}{Paso 6}{126}{section*.251} -\contentsline {chapter}{\numberline {8}Trabajo a futuro}{127}{chapter.8} -\contentsline {subsubsection}{Firewall}{127}{section*.252} -\contentsline {subsubsection}{Arquitectura segura}{127}{section*.253} -\contentsline {subsubsection}{Brindar conexi\IeC {\'o}n directa a Internet}{127}{section*.254} -\contentsline {subsubsection}{Gesti\IeC {\'o}n de Openstack en operaci\IeC {\'o}n}{127}{section*.255} -\contentsline {chapter}{\numberline {9}Conclusiones}{128}{chapter.9} +\contentsline {subsubsection}{Archivos de configuraci\IeC {\'o}n}{102}{section*.203} +\contentsline {subsection}{\numberline {7.3.1}Escenario 1}{104}{subsection.7.3.1} +\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{105}{section*.205} +\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{108}{section*.206} +\contentsline {subparagraph}{Paso 1}{108}{section*.207} +\contentsline {subparagraph}{Paso 2}{108}{section*.208} +\contentsline {subparagraph}{Paso 3}{113}{section*.213} +\contentsline {subparagraph}{Paso 4}{115}{section*.216} +\contentsline {subsection}{\numberline {7.3.2}Escenario 2}{116}{subsection.7.3.2} +\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{116}{section*.218} +\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{119}{section*.219} +\contentsline {subparagraph}{Paso 1}{119}{section*.220} +\contentsline {subparagraph}{Paso 2}{119}{section*.221} +\contentsline {subparagraph}{Paso 3}{119}{section*.222} +\contentsline {subparagraph}{Paso 4}{120}{section*.224} +\contentsline {subparagraph}{Paso 5}{120}{section*.225} +\contentsline {subparagraph}{Paso 6}{120}{section*.226} +\contentsline {subparagraph}{Paso 7}{120}{section*.228} +\contentsline {subsection}{\numberline {7.3.3}Escenario 3}{121}{subsection.7.3.3} +\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{121}{section*.230} +\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{123}{section*.231} +\contentsline {subparagraph}{Paso 1}{123}{section*.232} +\contentsline {subparagraph}{Paso 2}{123}{section*.233} +\contentsline {subparagraph}{Paso 3}{123}{section*.234} +\contentsline {subparagraph}{Paso 4}{124}{section*.236} +\contentsline {subparagraph}{Paso 5}{124}{section*.237} +\contentsline {subparagraph}{Paso 6}{125}{section*.239} +\contentsline {subparagraph}{Paso 7}{126}{section*.241} +\contentsline {subsection}{\numberline {7.3.4}Escenario 4}{126}{subsection.7.3.4} +\contentsline {subsubsection}{An\IeC {\'a}lisis de componentes}{126}{section*.243} +\contentsline {subsubsection}{An\IeC {\'a}lisis de tr\IeC {\'a}fico}{127}{section*.244} +\contentsline {subparagraph}{Paso 1}{127}{section*.245} +\contentsline {subparagraph}{Paso 2}{127}{section*.246} +\contentsline {subparagraph}{Paso 3}{127}{section*.247} +\contentsline {subparagraph}{Paso 4}{128}{section*.250} +\contentsline {subparagraph}{Paso 5}{128}{section*.251} +\contentsline {subparagraph}{Paso 6}{129}{section*.253} +\contentsline {chapter}{\numberline {8}Trabajo a futuro}{130}{chapter.8} +\contentsline {subsubsection}{Firewall}{130}{section*.254} +\contentsline {subsubsection}{Arquitectura segura}{130}{section*.255} +\contentsline {subsubsection}{Brindar conexi\IeC {\'o}n directa a Internet}{130}{section*.256} +\contentsline {subsubsection}{Gesti\IeC {\'o}n de Openstack en operaci\IeC {\'o}n}{130}{section*.257} +\contentsline {chapter}{\numberline {9}Conclusiones}{131}{chapter.9} diff --git a/docs/latex/resources/analisis/ovs/componentes-ovs.png b/docs/latex/resources/analisis/ovs/componentes-ovs.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f3c6ffc73e13ecf4cc70748723713d92c4b266 Binary files /dev/null and b/docs/latex/resources/analisis/ovs/componentes-ovs.png differ