Instalación y configuración de OpenStack Mitaka sobre LXC en Ubuntu 14.04
Creamos la base de datos de "keystone" y otorgamos los permisos necesarios.
root@nova-controller:~# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
Generamos de forma aleatoria un token para realizar la configuración inicial.
root@nova-controller:~# openssl rand -hex 10
Deshabilitamos keystone para que no se inicie automáticamente tras la instalación.
root@nova-controller:~# echo "manual" > /etc/init/keystone.override
Instalamos los paquetes necesarios.
root@keystone:~# apt install keystone apache2 libapache2-mod-wsgi
Editamos el fichero /etc/keystone/keystone.conf y añadimos las siguientes líneas.
root@keystone:~# emacs /etc/keystone/keystone.conf
[DEFAULT]
admin_token=ADMIN_TOKEN
...
[database]
...
connection=mysql+pymysql://keystone:KEYSTONE_DBPASS@NOVA_CONTROLLER_INTERNAL_IP/keystone
...
[token]
...
provider=fernet
ADMIN_TOKEN es el token generado anteriormente de forma aleatoria.Poblamos la base de datos de Keystone.
root@keystone:~# su -s /bin/sh -c "keystone-manage db_sync" keystone
Creamos la primera Fernet key.
root@keystone:~# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
Editamos el fichero de configuración de apache para que el ServerName haga referencia a la dirección IP de la interfaz "eth1" del lxc KEYSTONE.
root@keystone:~# emacs /etc/apache2/apache2.conf
ServerName KEYSTONE_INTERNAL_IP
Creamos un nuevo sitio web para keystone.
root@keystone:~# emacs /etc/apache2/sites-available/wsgi-keystone.conf
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
Habilitamos el nuevo sitio web.
root@keystone:~# a2ensite wsgi-keystone.conf
Reiniciamos Apache.
root@keystone:~# service apache2 restart
Eliminamos la base de datos SQLite.
root@keystone:~# rm -f /var/lib/keystone/keystone.db
Declaramos las variables de entorno necesarias para crear las entidades de los servicios de nuestro OpenStack.
root@keystone:~# export OS_TOKEN=1783cf34785391bfdf33
root@keystone:~# export OS_URL=http://KEYSTONE_IP:35357/v3
root@keystone:~# export OS_IDENTITY_API_VERSION=3
Creamos la entidad del servicio de identidad (Keystone).
root@keystone:~# openstack service create --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 7f1f794e61fe4443999b4a426c85381d |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
Creamos los endpoints de Keystone.
root@keystone:~# openstack endpoint create --region RegionOne identity public http://KEYSTONE_INTERNAL_IP:5000/v3
root@keystone:~# openstack endpoint create --region RegionOne identity internal http://KEYSTONE_INTERNAL_IP:5000/v3
root@keystone:~# openstack endpoint create --region RegionOne identity admin http://KEYSTONE_INTERNAL_IP:35357/v3
Creamos un nuevo dominio en OpenStack.
root@keystone:~# openstack domain create --description "Default Domain" default
Creamos el proyecto, el usuario y el rol para el usuario "admin".
root@keystone:~# openstack project create --domain default --description "Admin Project" admin
root@keystone:~# openstack user create --domain default --password-prompt admin
root@keystone:~# openstack role create admin
Añadimos el rol admin a su correspondiente usuario y proyecto.
root@keystone:~# openstack role add --project admin --user admin admin
Creamos el proyecto "service" que alojará los usuarios creados para cada servicio añadido a OpenStack.
root@keystone:~# openstack project create --domain default --description "Service Project" service
Creamos también un usuario sin permisos de administración.
root@keystone:~# openstack project create --domain default --description "Diego Project" diego
root@keystone:~# openstack user create --domain default --password-prompt diego
Creamos un rol "user".
root@keystone:~# openstack role create user
root@keystone:~# openstack role add --project diego --user diego user
Deshabilitamos el mecanismo de token de autenticación temporal. Editamos el fichero /etc/keystone/keystone-paste.ini y eliminamos el admin_token_auth en las secciones "[pipeline:public_api]", "[pipeline:admin_api]" y "[pipeline:api_v3]".
Borramos de memoria las variables OS_TOKEN y OS_URL.
root@keystone:~# unset OS_TOKEN OS_URL
Solicitamos un token de autenticación como usuario "admin".
root@keystone:~# openstack --os-auth-url http://KEYSTONE_INTERNAL_IP:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
Solicitamos un token de autenticación como usuario "diego".
root@keystone:~# openstack --os-auth-url http://KEYSTONE_INTERNAL_IP:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name diego --os-username diego token issue
Creamos los "OpenStack client scripts".
root@CLIENT:~$ emacs admin-openrc
#!/bin/bash
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_PASS
export OS_AUTH_URL=http://KEYSTONE_INTERNAL_IP:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
root@CLIENT:~$ emacs diego-openrc
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=diego
export OS_USERNAME=diego
export OS_PASSWORD=USER_PASS
export OS_AUTH_URL=http://KEYSTONE_IP:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2