OpenStack desde cero - KeyStone

Publicado el 08 abril 2015 por Dbigcloud @dbigcloud

¿Creéis que Administrar un entorno de OpenStack puede ser sencillo? Pues sí, siempre y cuando que no haya problemas, ahora bien imaginemos un entorno de producción con miles de máquinas virtuales, ¿Dejarías la administración de dicho entorno a cualquier administrador de sistemas? Desde mi punto de vista, para administrar OpenStack de forma correcta, hay que conocer el funcionamiento de cada uno de los servicios que componen el entorno, no basta con realizar la instalación con un asistente. Por lo que poco a poco os voy a ir hablando de cada uno de los servicios que permiten a OpenStack su funcionamiento, esta semana os voy a hablar de KeyStone.


KeyStone es el servicio de identidad que utiliza OpenStack para la autenticación, dicho sistema puede ser integrado con ldap, además puede ser usado a través de nombre de usuario y contraseña estándar, sistemas basados ​​en tokens e inicios de sesión… dispone de una API de identidad (actualmente la versión 3.0) la cual puede ser usada por herramientas de terceros para determinar la accesibilidad de los recursos.

En resumidas cuentas KeyStone nos va a permitir la autenticación y autorización entre los servicios, siendo instalado en el nodo Controlador, el cual suele usar como motor de base de datos tanto MySQL como MariaDB. En la siguiente imagen se puede observar la arquitectura de los servicios de OpenStack.

Para entender cómo funciona KeyStone o Servicio de identidad debemos tener en cuenta los siguientes componentes:

  • Usuario: Pueden ser personas, sistemas o servicios que usen la nube de OpenStack, KeyStone será el encargado de validar las peticiones de éste. Los usuarios disponen de un login.
  • Credenciales: Es el dato que va a usar el usuario para su autenticación, puede ser un login y contraseña, un token, una clave de la API…
  • Autenticación: Es el acto de confirmar la identidad del usuario usando las credenciales provistas. Una vez validada la autenticación se provee de un token pasar ser usado en las peticiones del usuario, de esta forma no necesita autenticarse de nuevo.
  • Token: Es un bit de texto usado para acceder a los recursos, es generado cuando se valida la autenticación, cada toquen tiene un alcance el cual nos permite saber a que recursos puede acceder un usuario.
  • Tenant: Es el contenedor usado para agrupar y aislar los recursos. Los tentant pueden ser clientes, organizaciones, cuentas o proyectos.
  • Servicio: Es cada uno de los servicios que conforman OpenStack, como pueden ser Computo (Nova), Almacenamiento (Swift) o Servicio de imágenes (Glance), nos va a proveer de los endpoints o URL para que los usuarios puedan acceder a los recursos.
  • Endpoint: Es el direccionamiento IP o URL para acceder a los servicios.
  • Roles: Para especificar o limitar las operaciones de usuarios KeyStone usa roles, los cuales contienen un grupo de privilegios para determinar el alcance del usuario.

En la siguiente imagen podéis comprobar cómo interactúan cada componente:

Cómo instalar KeyStone

La instalación de KeyStone podemos realizarla a través del repositorio git:

git clone http://github.com/openstack/keystone.git

O bien si usamos el repositorio de Ubuntu Cloud:

apt-get install keystone

El archivo de configuración de keystone se encuentra en la ruta:

/etc/keystone/keystone.conf

En él, podremos configurar los datos de conexión de nuestra base de datos, el Token del super usuario entre otras opciones.

Tal y cómo hemos comentado al principio el nodo controlador suele usar como motor de base de datos MariaDB o MySQL, por lo que es necesario crear la base de datos de keystone y su usuario: 

mysql -u root -p
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

Ahora lo siguiente es crear las tablas de la base de datos:

keystone-manage db_sync

De esta forma ya disponemos de KeyStone instalado.

KeyStone a través de la linea de comandos

Os voy a mostrar como funcionan los comandos más usados por keystone, a través de consola, para crear y configurar cada uno de los componentes que hemos hablado anteriormente:

Para crear tenants usaremos:

keystone tenant-create \
    --name DBigCloud \
    --description “Creación del tenant DBigCloud” \
    --enabled true

Para listar los tenants usaremos:

keystone tenant-list

Para crear roles:

keystone role-create \
    --name rol_DBigCloud

Debemos de tener en cuenta que la configuración del rol de administrador se encuentra en el fichero /etc/keystone/policy.json

Para listar los roles:

keystone role-list

Para crear usuarios, debemos tener primero creado un tenant y conocer su ID, usaremos el comando:

keystone user-create \
    --name dbcAdmin \
    --tenant TenantID \
    --pass Password \
    --email  \
    --enable true

Para listar los usuarios usaremos:

keystone user-list

Ahora que ya sabemos crear usuarios podemos asignar algún rol, lo haremos de la siguiente forma:

keystone user-role-add \
    --user UserID \
    --role Role_ID \
    --tenant Tenant_ID

Para definir los servicios de OpenStack usaremos:

keystone service-create \
    --name nova \
    --type compute \
    --description "Servicio de computo de OpenStack"

Si queremos sacar el listado de todos nuestros servicios:

keystone service-list

Por último para crear los endpoint debemos tener en cuenta el tipo de URL, siendo publicas, internas o de administración:

keystone endpoint-create \
    --region RegionDBC \
    --service_id SERVICE_ID \
    --publicurl http://172.15.0.200:8744/v2/$(tenant_id)s \
    --adminurl http://172.15.0.200:8744/v2/$(tenant_id)s \
    --internalurl http://172.15.0.200:8744/v2/$(tenant_id)s \

Como podéis observar el funcionamiento y la configuración de keystone no es muy compleja, hay que tener bien claro los conceptos, ahora que ya conoceis algo más del servicio de identidades de OpenStack, ¿Os atravéis a instalarlo y configurarlo?