SoftwareTutoriales

Guía completa para instalar OpenStack All-In-One en Ubuntu 22.04 LTS

¡Hola entusiastas de la nube! ☁️ En este artículo te guiaré paso a paso para desplegar un entorno OpenStack All-In-One (es decir, todos los servicios en un solo servidor) sobre Ubuntu 22.04 LTS. Esta configuración es ideal para laboratorios, entornos de pruebas o para quienes recién comienzan a explorar las capacidades de OpenStack. ¡Así que prepárate una buena taza de café ☕ y empecemos!


1. ¿Qué es OpenStack y por qué un All-In-One?

OpenStack es una plataforma de software libre que nos permite crear y gestionar nubes privadas o públicas, ofreciendo servicios de computación, almacenamiento y redes de manera escalable. La instalación All-In-One significa que todos los componentes (Keystone, Glance, Nova, Neutron, Horizon, etc.) se ejecutarán en la misma máquina.

Ventajas de esta modalidad:

  • Simplicidad para quienes están aprendiendo: no necesitamos desplegar múltiples nodos.
  • Ahorro de recursos: un solo servidor (o VM) lo hace todo.
  • Ideal para pruebas y demos: si algo sale mal, reinstalar es rápido y sin afectar a otros hosts.

2. Requerimientos previos

Antes de poner manos a la obra, asegúrate de contar con:

  1. Sistema Operativo: Ubuntu Server 22.04 LTS actualizado.
  2. Recomendación de recursos (mínimo para pruebas):
    • CPU: 4 vCPUs
    • RAM: 8 GB
    • Disco: 40 GB o más
  3. Conectividad de red funcional.
  4. Usuario con privilegios sudo.

3. Preparación del sistema operativo

¡Manos a la obra! ✨

3.1 Actualiza los paquetes

Lo primero es asegurarnos de que Ubuntu tenga todos los paquetes al día:

sudo apt update
sudo apt upgrade -y
sudo reboot

El reinicio garantizará que estemos usando el kernel y paquetes más recientes.

3.2 Habilita el repositorio de OpenStack (Ubuntu Cloud Archive)

Ubuntu publica las versiones de OpenStack mediante el Ubuntu Cloud Archive. Para 22.04 (Jammy), podemos habilitar el repositorio correspondiente (por ejemplo, la versión “Zed” o alguna más reciente):

sudo apt install -y software-properties-common
sudo add-apt-repository cloud-archive:zed
sudo apt update

4. Instalando servicios base: Base de datos, RabbitMQ y Memcached

OpenStack necesita varios servicios subyacentes que manejan la mensajería, la base de datos y la caché.

4.1 Instala y configura la base de datos (MariaDB)

sudo apt install -y mariadb-server python3-pymysql

Configura MariaDB para que escuche en todas las interfaces (aunque en un All-In-One no es crítico, lo hacemos por buenas prácticas):

sudo nano /etc/mysql/mariadb.conf.d/99-openstack.cnf

Agrega en la sección [mysqld]:

bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
collation-server = utf8_general_ci
character-set-server = utf8

Reinicia el servicio:

sudo systemctl enable mariadb
sudo systemctl restart mariadb

Asegura la instalación (establecer contraseña root, quitar usuarios anónimos, etc.):

sudo mysql_secure_installation

4.2 Instala RabbitMQ

RabbitMQ se encarga de las colas de mensajería que coordinan la comunicación entre los servicios de OpenStack:

sudo apt install -y rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

Crea un usuario para OpenStack (ejemplo: openstack):

sudo rabbitmqctl add_user openstack MI_SUPERCONTRASENA
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"

4.3 Instala Memcached (opcional, pero recomendado)

Sirve para cachear tokens de autenticación y mejorar el rendimiento:

sudo apt install -y memcached python3-memcache

Asegúrate de que sólo escuche en localhost (-l 127.0.0.1), y reinícialo:

sudo systemctl enable memcached
sudo systemctl restart memcached

5. Keystone: El servicio de identidad

Keystone es el guardián de la autenticación y autorización en OpenStack.

5.1 Instala Keystone

sudo apt install -y keystone

5.2 Prepara la base de datos para Keystone

sudo mysql -u root -p

Dentro de la consola de MySQL:

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'MI_PASS_KEYSTONE';
FLUSH PRIVILEGES;
EXIT;

5.3 Configura Keystone

Edita /etc/keystone/keystone.conf y en la sección [database]:

nginxCopiarEditarconnection = mysql+pymysql://keystone:MI_PASS_KEYSTONE@localhost/keystone

En [token], configura fernet:

provider = fernet

Aplica la migración de la base de datos:

sudo su -s /bin/sh -c "keystone-manage db_sync" keystone

Genera claves de fernet:

sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

Haz el “bootstrap” para inicializar los roles y el usuario admin:

sudo keystone-manage bootstrap --bootstrap-password adminpass \
--bootstrap-admin-url http://localhost:5000/v3/ \
--bootstrap-internal-url http://localhost:5000/v3/ \
--bootstrap-public-url http://localhost:5000/v3/ \
--bootstrap-region-id RegionOne

5.4 Integra Keystone con Apache

Keystone utiliza Apache para manejar las peticiones:

sudo systemctl enable apache2
sudo systemctl restart apache2

5.5 Crea las variables de entorno de administrador

Para no escribir credenciales a cada rato, creamos un archivo:

nano ~/admin-openrc.sh

Y pegamos:

export OS_USERNAME=admin
export OS_PASSWORD=adminpass
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://localhost:5000/v3
export OS_IDENTITY_API_VERSION=3

Cerramos y luego cargamos:

source ~/admin-openrc.sh

¡Pruébalo!:

openstack token issue

Si ves un token, Keystone funciona correctamente.


6. Glance: Administración de imágenes

Glance gestiona las imágenes que usaremos para instanciar máquinas virtuales.

6.1 Crea la base de datos y usuario de Glance

sudo mysql -u root -p
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'MI_PASS_GLANCE';
FLUSH PRIVILEGES;
EXIT;

6.2 Crea el usuario y servicio Glance en Keystone

Recuerda tener source ~/admin-openrc.sh activo:

openstack user create --domain default --password MI_PASS_GLANCE glance
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image Service" image

Crea los endpoints:

openstack endpoint create --region RegionOne image public http://localhost:9292
openstack endpoint create --region RegionOne image internal http://localhost:9292
openstack endpoint create --region RegionOne image admin http://localhost:9292

6.3 Instala y configura Glance

sudo apt install -y glance

Edita /etc/glance/glance-api.conf:

[database]
connection = mysql+pymysql://glance:MI_PASS_GLANCE@localhost/glance

[keystone_authtoken]
www_authenticate_uri = http://localhost:5000
auth_url = http://localhost:5000
memcached_servers = localhost:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = MI_PASS_GLANCE

[paste_deploy]
flavor = keystone

[glance_store]
stores = file
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

Sincroniza la base de datos:

sudo su -s /bin/sh -c "glance-manage db_sync" glance

Reinicia Glance:

sudo systemctl enable glance-api
sudo systemctl restart glance-api

7. Nova: El servicio de cómputo

Nova se encarga de orquestar y gestionar las instancias (máquinas virtuales).

7.1 Prepara las bases de datos de Nova y Placement

sudo mysql -u root -p
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
CREATE DATABASE placement;

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'MI_PASS_NOVA';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'MI_PASS_NOVA';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'MI_PASS_NOVA';

GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'MI_PASS_PLACEMENT';
FLUSH PRIVILEGES;
EXIT;

7.2 Crea los usuarios y servicios en Keystone

Para Nova:

openstack user create --domain default --password MI_PASS_NOVA nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute

Endpoints de Nova:

openstack endpoint create --region RegionOne compute public http://localhost:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://localhost:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://localhost:8774/v2.1

Para Placement:

openstack user create --domain default --password MI_PASS_PLACEMENT placement
openstack role add --project service --user placement admin
openstack service create --name placement --description "OpenStack Placement" placement

Endpoints de Placement:

openstack endpoint create --region RegionOne placement public http://localhost:8778
openstack endpoint create --region RegionOne placement internal http://localhost:8778
openstack endpoint create --region RegionOne placement admin http://localhost:8778

7.3 Instala los servicios Nova y Placement

sudo apt install -y nova-api nova-conductor nova-scheduler nova-novncproxy placement-api

7.4 Configura Nova

Edita /etc/nova/nova.conf. Asegúrate de incluir:

[api_database]
connection = mysql+pymysql://nova:MI_PASS_NOVA@localhost/nova_api

[database]
connection = mysql+pymysql://nova:MI_PASS_NOVA@localhost/nova

[DEFAULT]
transport_url = rabbit://openstack:MI_SUPERCONTRASENA@localhost
my_ip = 192.168.1.10 # Ajusta a tu IP local
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]
auth_strategy = keystone

[glance]
api_servers = http://localhost:9292

[keystone_authtoken]
www_authenticate_uri = http://localhost:5000
auth_url = http://localhost:5000
memcached_servers = localhost:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = MI_PASS_NOVA

[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip

[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://localhost:5000/v3
username = placement
password = MI_PASS_PLACEMENT

[wsgi]
api_paste_config = /etc/nova/api-paste.ini

7.5 Configura Placement

Algunos parámetros ya vienen en /etc/placement/placement.conf o se comparten en nova.conf. Verifica que aparezca:

[placement_database]
connection = mysql+pymysql://placement:MI_PASS_PLACEMENT@localhost/placement

[api]
auth_strategy = keystone

[keystone_authtoken]
www_authenticate_uri = http://localhost:5000
auth_url = http://localhost:5000
memcached_servers = localhost:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = MI_PASS_PLACEMENT

7.6 Sincroniza las bases de datos

sudo su -s /bin/sh -c "nova-manage api_db sync" nova
sudo su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
sudo su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1" nova
sudo su -s /bin/sh -c "nova-manage db sync" nova

Verifica:

nova-manage cell_v2 list_cells

Debe mostrar cell0 y cell1.

7.7 Inicia los servicios de Nova

sudo systemctl enable nova-api nova-conductor nova-scheduler nova-novncproxy
sudo systemctl restart nova-api nova-conductor nova-scheduler nova-novncproxy

8. Neutron: El servicio de red

Neutron administra redes, subredes y asigna direcciones IP a las instancias.

8.1 Base de datos y usuario de Neutron

sudo mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'MI_PASS_NEUTRON';
FLUSH PRIVILEGES;
EXIT;

8.2 Crea usuario y servicio de Neutron en Keystone

openstack user create --domain default --password MI_PASS_NEUTRON neutron
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network

Endpoints:

openstack endpoint create --region RegionOne network public http://localhost:9696
openstack endpoint create --region RegionOne network internal http://localhost:9696
openstack endpoint create --region RegionOne network admin http://localhost:9696

8.3 Instala Neutron

sudo apt install -y neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

8.4 Configura Neutron

8.4.1 Edita el archivo de configuración: /etc/neutron/neutron.conf

[database]
connection = mysql+pymysql://neutron:MI_PASS_NEUTRON@localhost/neutron

[DEFAULT]
transport_url = rabbit://openstack:MI_SUPERCONTRASENA@localhost
auth_strategy = keystone
core_plugin = ml2
service_plugins = router

[keystone_authtoken]
www_authenticate_uri = http://localhost:5000
auth_url = http://localhost:5000
memcached_servers = localhost:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = MI_PASS_NEUTRON

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

8.4.2 Edita la configuración del Plugin ML2: /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population

[ml2_type_flat]
flat_networks = external

[ml2_type_vxlan]
vni_ranges = 1:1000

[securitygroup]
enable_ipset = True

8.4.3 Edita la configuración del Agente Linux Bridge: /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
physical_interface_mappings = external:INTERFAZ_EXTERNA # Cambia a tu interfaz real, ej. eth0

[vxlan]
enable_vxlan = true
local_ip = 192.168.1.10 # La misma IP que Nova my_ip
l2_population = true

[securitygroup]
enable_security_group = true
firewall_driver = neutron.privileged.agent.linux.iptables_firewall.IptablesFirewallDriver

8.4.4 Edita la configuración del Agente DHCP: /etc/neutron/dhcp_agent.ini

[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

8.4.5 Edita la configuración del Agente de Metadata: /etc/neutron/metadata_agent.ini

[DEFAULT]
nova_metadata_host = localhost
metadata_proxy_shared_secret = METADATA_SECRET

Edita /etc/nova/nova.conf otra vez para enlazar con Neutron:

[neutron]
url = http://localhost:9696
auth_url = http://localhost:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = MI_PASS_NEUTRON
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

8.5 Migra la base de datos de Neutron

sudo neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

8.6 Inicia los servicios de Neutron

sudo systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
sudo systemctl restart neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

sudo systemctl restart nova-api nova-scheduler nova-conductor

9. Horizon: Panel web de OpenStack

¡Vamos a darle una interfaz bonita y amigable a todo esto! 🖥️

sudo apt install -y openstack-dashboard

9.1 Ajusta la configuración de Horizon

Edita /etc/openstack-dashboard/local_settings.py:

ALLOWED_HOSTS = ['*']  # Permitir acceso desde cualquier IP (o especifícalas)
OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v3"
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

Opcionalmente, revisa la configuración de sesiones y caché. Luego reinicia Apache:

sudo systemctl restart apache2

Ahora, si accedes con tu navegador a http://<IP_del_servidor>/horizon, deberías ver la pantalla de login de OpenStack.

  • Usuario: admin
  • Contraseña: adminpass (o la que hayas configurado en el bootstrap de Keystone).

10. ¡Verifiquemos que todo funciona!

Un par de comprobaciones rápidas:

  1. Carga las credenciales:bashCopiarEditarsource ~/admin-openrc.sh
  2. Lista los servicios:bashCopiarEditaropenstack service list Debes ver “compute”, “image”, “network”, etc.
  3. Sube una imagen de prueba (ejemplo: cirros):bashCopiarEditarwget http://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img openstack image create "cirros" \ --file cirros-0.6.1-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public openstack image list Verás la imagen “cirros” en la lista.
  4. Desde Horizon, podrás crear proyectos, redes y lanzar instancias para probar.

11. Conclusiones y próximos pasos

¡Enhorabuena! 🥳 Ya tienes un entorno OpenStack All-In-One corriendo en Ubuntu 22.04 LTS. Aunque este despliegue es perfecto para aprendizaje y pruebas, si quieres llevarlo a producción necesitarás:

  • Alta disponibilidad: Distribuir servicios en varios nodos y usar balanceadores.
  • Seguridad reforzada: Usar SSL/TLS en los endpoints, restringir accesos de red, etc.
  • Almacenamiento adicional: Incorporar Cinder (bloques) y/o Swift (objetos) si requieres mayores capacidades.
  • Monitoreo y métricas: Podrías usar herramientas como Ceilometer, Gnocchi o Prometheus+Grafana.

¡Y mucho más! OpenStack es un universo increíble de posibilidades.


12. Recursos de referencia


¡Listo!

Con esto, tu nube privada está en marcha. No olvides compartir tus experiencias y desafíos en la sección de comentarios o en redes sociales. ¡Suerte con tus experimentos en la nube! ☁️✨

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *