Preparación de la Base de Datos para Keystone
El primer paso fundamental es configurar el motor de base de datos para almacenar la información de identidad. Accedemos a MariaDB/MySQL como superusuario:
mysql -u root -p
Una vez dentro de la consola de la base de datos, procedemos a crear el esquema y asignar los permisos necesarios para el usuario encargado de gestionar Keystone:
CREATE DATABASE keystone_store;
GRANT ALL PRIVILEGES ON keystone_store.* TO 'keystone_admin'@'localhost' \
IDENTIFIED BY 'SECURE_DB_PASS';
GRANT ALL PRIVILEGES ON keystone_store.* TO 'keystone_admin'@'%' \
IDENTIFIED BY 'SECURE_DB_PASS';
FLUSH PRIVILEGES;
exit;
Instalación de Paquetes y Componentes WSGI
Keystone se ejecuta comúnmente detrás de un servidor web Apache utilizando el módulo WSGI. Instalamos los paquetes necesarios desde los repositorios de OpenStack:
yum install openstack-keystone httpd mod_wsgi -y
Configuración del Servicio de Identidad
Para mantener una configuración limpia, es recomendable respaldar el archivo original y generar uno nuevo sin comentarios ni líneas en blanco:
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.org
grep -Ev "^$|#" /etc/keystone/keystone.conf.org > /etc/keystone/keystone.conf
Utilizaremos la herramienta openstack-utils para definir la cadena de conexión a la base de datos y el proveedor de tokens (Fernet):
yum install -y openstack-utils
# Configurar la conexión a MariaDB (reemplazar IP_CONTROLLER por la IP real)
openstack-config --set /etc/keystone/keystone.conf database connection \
mysql+pymysql://keystone_admin:SECURE_DB_PASS@192.168.1.100/keystone_store
# Definir el proveedor de tokens
openstack-config --set /etc/keystone/keystone.conf token provider fernet
Sincronización de Base de Datos y Gestión de Claves
Debemos inicializar el esquema de la base de datos ejecutando el comando de sincronización bajo el contexto del usuario keystone:
su -s /bin/sh -c "keystone-manage db_sync" keystone
Posteriormente, inicializamos los repositorios de llaves Fernet para la firma de tokens y las credneciales del sistema:
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
Integración con el Servidor Web Apache
Configuramos el nombre del servidor en Apache para evitar advertencias de resolución y creamos un enlace simbólico al archivo de configuración de Keystone para WSGI:
echo "ServerName controller_node" >> /etc/httpd/conf/httpd.conf
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
Iniciamos y habilitamos el servicio HTTP para que arranque automáticamente:
systemctl enable httpd
systemctl start httpd
Bootstrap del Servicio de Identidad
El proceso de "bootstrap" automatiza la creación inicial de servicios, endpoints y el usuario administrador. Es vital usar la dirección IP correcta del controlador:
keystone-manage bootstrap --bootstrap-password ADMIN_SECRET_PWD \
--bootstrap-admin-url http://192.168.1.100:5000/v3/ \
--bootstrap-internal-url http://192.168.1.100:5000/v3/ \
--bootstrap-public-url http://192.168.1.100:5000/v3/ \
--bootstrap-region-id RegionOne
Configuración del Entorno de Administración
Para interactuar con la API de OpenStack sin introducir credenciales constantemente, definimos variables de entorno en el perfil del usuario:
cat >> ~/.bashrc << EOF
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_SECRET_PWD
export OS_AUTH_URL=http://192.168.1.100:5000/v3
export OS_IDENTITY_API_VERSION=3
EOF
source ~/.bashrc
Creación de Proyectos y Usuarios de Prueba
Es una buena práctica crear un proyecto y un usuario no administrativo para validar el funcionamiento del sistema:
# Crear proyecto de demostración
openstack project create --domain default --description "Proyecto de Pruebas" demo_project
# Crear usuario estándar
openstack user create --domain default --password-prompt demo_user
# Crear rol de usuario
openstack role create standard_user
# Vincular proyecto, usuario y rol
openstack role add --project demo_project --user demo_user standard_user
Proyecto para Servicios del Sistema
Cada componente de OpenStack (Glance, Nova, etc.) requiere una identidad para comunicarse. Creamos un proyecto dedicado llamado service:
openstack project create --domain default --description "Servicios de Infraestructura" service
Verificación de la Emisión de Tokens
Para confirmar que Keystone está operando correctamente, solicitamos un token de acceso para el usuario administrador:
openstack token issue
Si el sistema devuelve una tabla con el ID del token y la fecha de expiración, el servicio de idantidad está correctamente configurado y listo para soportar los demás componentes de la nube.