OpenStack Mitaka - LXC

Instalación y configuración de OpenStack Mitaka sobre LXC en Ubuntu 14.04

Keystone

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