Post-Image

Aislando proyectos en Openstack

En Openstack tenemos diferentes formas de crear una arquitectura en la cual tengamos a nuestros clientes aislados (en cuanto a red se refiere), por un lado podemos preparar nuestros equipos de red para utilizar VLANs o VXLANs y taguear una diferente a cada uno de nuestros clientes de formas que cada red esté completamente aislada al mismo tiempo que tagueamos nuestra red pública para que puedan disponer de la asignación de IPs públicas.

Por otro lado es posible que nuestra arquitectura no este utilizando ninguno de los sistemas anteriores y aun así queramos aislarlos pero que continúen con salida a internet y la asignación de IPs públicas, y esta es la parte en la que nos encontramos, vamos a realizar toda la arquitectura de red desde los propios componentes de Openstack sin la necesidad de configurar en nuestros equipos de hardware de red redes de tipo VLAN o VXLAN y para ello vamos a ayudarnos de Neutron.

Neutron es el componente de red de Openstack que nos permite crear, modificar y gestionar todas nuestra plataforma de red, para lo que queremos hacer tendremos que crear un proyecto maestro con una subnet (en este caso /16) y luego un router que va a ser el que conecte todas las subredes de los proyectos anidados. Nuestro proyecto maestro va a tener una máscara de red /16 y cada uno de nuestros clientes va a disponer de un /24 perteneciente a la subred anterior, esto significa que el número máximo de clientes en este proyecto maestro va a ser de 254 (podríamos disponer de más cambiando las mascaras del proyecto maestro y cada uno de los proyecto anidados), para nuestra plataforma consideramos que es un número aceptable. A continuación podéis ver un ejemplo de que deberíamos ejecutar para esta primera parte:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
CUSTOMER="Alefnode"

openstack project create --description Admin_Project_${CUSTOMER} ${CUSTOMER}-admin
openstack quota set --routers 2 --rbac-policies 100 --networks 100 --subnets 100 --subnetpools 2 ${CUSTOMER}-admin

OS_PROJECT_ID=$(openstack project show ${CUSTOMER}-admin -c id --format value)
OS_PROJECT_NAME=${CUSTOMER}-admin

openstack subnet pool create --default-prefix-length 24 --pool-prefix 10.10.0.0/16 ${CUSTOMER}-subnetpool
openstack router create ${CUSTOMER}-router
neutron router-gateway-set ${CUSTOMER}-router External
neutron router-gateway-set --disable_snat ${CUSTOMER}-router External

En segundo lugar tendremos que crear la cuenta y las redes para nuestros clientes, cada uno de ellos tendrá conexión con el router que hemos creado en el paso anterior pero no tendrá permisos para llegar a la subred de otro cliente. También vamos a limitar las cuotas de nuestros clientes, pero se pueden modificar los parámetros más tarde si queremos ampliarlas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
CUSTOMER="Alefnode"
PROJECT="PruebaCliente"
PROJECT_USER="pruebauser"
PROJECT_USER_PASSWD="pruebapass"

openstack project create --description New_Project_${PROJECT} ${PROJECT}
openstack user create --project ${PROJECT} --password ${PROJECT_USER_PASSWD} --description Default_Admin_User_for_${PROJECT} ${PROJECT_USER}
openstack role add --project ${PROJECT} --user ${PROJECT_USER} heat_stack_owner
openstack quota set --routers 0 --networks 0 --subnets 0 --subnetpools 0 ${PROJECT}
openstack network create --enable --internal --no-share ${PROJECT}-net
neutron subnet-create --enable-dhcp --subnetpool ${CUSTOMER}-subnetpool --name ${PROJECT}-subnet ${PROJECT}-net
openstack network rbac create --type network --target-project ${PROJECT} --action access_as_shared ${PROJECT}-net
GWIP=$(openstack subnet show -c gateway_ip ${PROJECT}-subnet | grep gateway_ip | awk '{ print $4 }')
openstack port create --disable --fixed-ip subnet=${PROJECT}-subnet,ip-address=${GWIP} --network ${PROJECT}-net ${CUSTOMER}-router-port-${PROJECT}
openstack port set --enable ${CUSTOMER}-router-port-${PROJECT}
neutron router-interface-add ${CUSTOMER}-router port=${CUSTOMER}-router-port-${PROJECT}

Algo que debemos tener en cuenta que en todo momento estamos hablando de redes internas, la red pública la crearemos y daremos acceso a nuestros clientes permitiendo un número limitado de IPs para utilizar mediante el uso de cuotas.

Espero que os haya servido el manual para crear una red que anide diferentes subredes con el objetivo de tener proyectos aislados.