Guía de operación de la nube
Esta guía es para quien opera una nube StrongLinux ya desplegada con strongctl (edición Servidor). La instalación está en la guía de instalación, y la actualización de versiones, en la guía de actualización.
Todos los comandos se ejecutan como root en el equipo donde se inicializó strongctl (el primer controller). La configuración de la nube está en /etc/strongctl/.
1. Comandos del día a día
| Comando | Para qué |
|---|---|
strongctl status | Lista los grupos del inventario y los nodos de cada uno |
strongctl verify | Comprueba la salud de toda la nube (véase la sección 2) |
strongctl deploy | Aplica la configuración en todos los nodos; idempotente |
strongctl deploy --role <rol> | Solo los nodos de un rol: controller, compute, network o storage |
strongctl secrets show <nombre> | Muestra un secreto del almacén (p. ej.: keystone_admin) |
strongctl tempest | Pruebas oficiales de OpenStack contra la nube (smoke; --suite full para todas) |
strongctl upgrade | Actualización escalonada de correcciones |
strongctl <comando> --check | Simula, sin modificar nada |
Para usar el cliente openstack como administrador:
source /root/admin-openrc.sh
openstack server list --all-projects
2. Salud de la nube
strongctl verify comprueba, nodo a nodo:
- las units de systemd de cada rol;
- los puertos de las APIs y el certificado TLS de cada una;
- la emisión de tokens y el catálogo;
- los servicios de cómputo, los agentes de red y los servicios de volumen y orquestación;
- un ciclo de secreto en Barbican (guardar, leer, borrar);
- con alta disponibilidad, Galera (
Synced), los nodos de RabbitMQ, los servidores RAFT de OVN y la VIP en exactamente un controller.
Ejecute verify después de cualquier cambio y antes de un upgrade (que exige el verify en verde).
APIs publicadas
HAProxy publica las APIs con TLS en la dirección del controller (o en la VIP, con HA):
| Servicio | Puerto |
|---|---|
| Keystone (identidad) | 5000 |
| Glance (imágenes) | 9292 |
| Placement | 8778 |
| Nova (cómputo) | 8774 |
| Neutron (red) | 9696 |
| Cinder (volúmenes) | 8776 |
| Heat (orquestación) | 8004 y 8000 (CloudFormation) |
| Barbican (secretos) | 9311 |
| StrongStack API Server | 9999 |
| Horizon (panel) | 443, en /dashboard (el puerto 80 redirige) |
Detrás de HAProxy, cada API escucha solo en la dirección interna (127.0.0.1 en el all-in-one). El metadata de Nova (8775) y la consola noVNC (6080) son internos.
Registros
| Dónde | Qué |
|---|---|
/var/log/<servicio>/ | Registro de cada servicio OpenStack (keystone, nova, neutron, cinder…) |
journalctl -u <unit> | Inicio, parada y errores de las units de systemd |
/var/log/strongstack/ | StrongStack API Server |
/var/log/haproxy.log | Accesos a las APIs |
journalctl -k | grep apparmor | Denegaciones de AppArmor (sección 8) |
/var/log/sudo.log | Uso de sudo |
3. Credenciales y secretos
- El almacén
/etc/strongctl/passwords.ymlestá cifrado conansible-vault. Su contraseña está en/etc/strongctl/.vault-pass(modo 0600). strongctl secrets show <nombre>muestra un secreto. Si el nombre no existe, el comando lista los nombres válidos.- Secretos importantes:
keystone_admin(usuarioadmin),barbican_kek(clave maestra de los secretos de Barbican),strongstack_secret_key. - Guarde una copia de
/etc/strongctl/fuera de la nube (sección 5). Sin labarbican_kek, los secretos guardados en Barbican no se pueden recuperar.
4. Añadir y mantener nodos
Añadir un nodo de cómputo o de almacenamiento
- Instale el nodo con la ISO (opción Compute o Storage) o con la imagen
stronglinux-1.0-openstack-cloud-amd64.qcow2. - Autorice la clave SSH de root del controller en el nodo nuevo (
/root/.ssh/authorized_keys). - Añada el nodo a
/etc/strongctl/inventory.yml: la dirección enall.hostsy el nombre en el grupo del rol.all: hosts: cmp3: {ansible_host: 10.0.0.23, mgmt_ip: 10.0.0.23} children: compute: hosts: cmp3: - Prepare la base y despliegue:
strongctl bootstrap strongctl deploy strongctl verify
Use el deploy completo, sin --role: solo cambia el nodo nuevo, pero también ejecuta el registro del nodo de cómputo en Nova (nova-manage cell_v2 discover_hosts), que está en el primer controller y no se ejecuta con --role compute.
Sacar un nodo de cómputo de servicio para mantenimiento
openstack compute service set --disable --disable-reason "mantenimiento" <host> nova-compute
openstack server list --all-projects --host <host>
openstack server migrate --live-migration <vm> # o apague las VM del equipo
Después del mantenimiento: openstack compute service set --enable <host> nova-compute.
Reiniciar un controller con alta disponibilidad
Reinicie un controller a la vez y compruebe con strongctl verify antes de pasar al siguiente. Galera, RabbitMQ y OVN vuelven al clúster por sí solos. Si los tres cayeron al mismo tiempo, siga la recuperación de Galera en la guía de alta disponibilidad.
5. Copias de seguridad
strongctl no hace copias de seguridad automáticas. Guarde, fuera de la nube:
| Qué | Cómo |
|---|---|
| Configuración y almacén | tar czf strongctl-$(date +%F).tgz -C /etc strongctl (incluye la CA en tls/) |
| Bases de datos | mariadb-dump --all-databases --single-transaction --routines --events | gzip > bases-$(date +%F).sql.gz (con Galera, en un solo controller) |
| Claves de Keystone | tar czf keystone-claves-$(date +%F).tgz -C /etc/keystone fernet-keys credential-keys |
| Imágenes de Glance | /var/lib/glance/images/ (almacenamiento local) |
| Volúmenes | openstack volume backup create <volumen> (backend posix en /var/lib/cinder/backup) |
Los archivos de configuración de los servicios (/etc/<servicio>/) no necesitan copia: strongctl deploy los vuelve a generar todos a partir de /etc/strongctl/.
Para restaurar en un controller nuevo: instale el sistema, restaure /etc/strongctl/ y las claves de Keystone, ejecute strongctl bootstrap, importe las bases de datos (zcat bases.sql.gz | mariadb) y ejecute strongctl deploy y strongctl verify.
6. Rotación de las claves de token (fernet)
Los tokens de Keystone se cifran con claves fernet en /etc/keystone/fernet-keys/. Rote las claves periódicamente, por ejemplo una vez por semana. En el primer controller:
runuser -u keystone -- keystone-manage fernet_rotate --keystone-user keystone --keystone-group keystone
strongctl deploy --role controller # con HA: copia las claves nuevas a los demás controllers
Keystone mantiene 3 claves activas, así que los tokens ya emitidos siguen siendo válidos. Con un solo controller, basta el primer comando.
7. Certificados TLS
- El certificado de las APIs es válido 825 días y la CA interna, 10 años. Para ver la caducidad:
openssl x509 -enddate -noout -in /etc/strongctl/tls/api.crt - Renovar el certificado interno: borre
/etc/strongctl/tls/api.crty ejecutestrongctl deploy. - Usar un certificado propio: coloque
api.crt(cadena completa),api.keyyca.crten/etc/strongctl/tls/, sinca.key, y ejecutestrongctl deploy. - Nombres adicionales en el certificado (por ejemplo un nombre DNS público):
api_tls_namesenglobals.yml.
8. Seguridad en el día a día
- Actualizaciones:
unattended-upgradesaplica las correcciones de seguridad de Ubuntu. Las de StrongLinux llegan por el canalstronglinux-1.0-security; en una nube, aplíquelas constrongctl upgrade. - AppArmor: los servicios de OpenStack se ejecutan confinados (modo
enforce). Para ver qué se denegó:journalctl -k | grep 'apparmor="DENIED"'Los ajustes locales van en
/etc/apparmor.d/local/stronglinux.<unit>, seguidos deapparmor_parser -r /etc/apparmor.d/stronglinux.<unit>. Para diagnosticar, pongaapparmor_mode: complainenglobals.ymly ejecutestrongctl deploy(solo registra, no bloquea). - Integridad (AIDE): compara los archivos cada día; la base se renueva en cada
strongctl deploy. Para comprobar al momento:aide --check -c /etc/aide/aide.conf. - Cuenta bloqueada tras 5 contraseñas incorrectas (15 min):
faillock --user <nombre> --reset. - SSH: después de instalar las claves, deje
PasswordAuthentication no.
9. Problemas comunes
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
strongctl verify falla en un puerto | Servicio detenido o certificado caducado | journalctl -u <unit>; caducidad del certificado (sección 7) |
| HTTP 401 entre servicios (p. ej.: Nova → Neutron) | Usuario de servicio sin el rol service, o contraseña cambiada a mano | strongctl deploy (restaura los roles y las contraseñas desde el almacén) |
| VM sin IP o sin metadata | Agente OVN detenido en el nodo de cómputo, o chassis con nombre distinto al host de Nova | systemctl status neutron-ovn-agent; ovs-vsctl get open . external-ids:hostname debe coincidir con host en nova.conf |
La VM queda en ERROR al crearla | No hay cómputo disponible, o un nodo nuevo no está registrado | openstack compute service list; ejecute strongctl deploy (hace el discover_hosts) |
| El volumen no se conecta | iSCSI no disponible (p. ej.: en un contenedor) o tgt detenido | systemctl status tgt iscsid en los nodos de almacenamiento y cómputo |
Too many connections en la base de datos | Demasiados workers o max_connections bajo | strongctl bootstrap vuelve a aplicar el max_connections de MariaDB (mariadb_max_connections en globals.yml) |
| Galera no arranca tras una caída total | Se detuvieron los tres controllers | Recuperación en la guía de alta disponibilidad |
| Un servicio no arranca justo después de una actualización | Denegación de AppArmor | journalctl -k | grep DENIED (sección 8) |
Si el problema continúa, abra un issue con la salida de strongctl verify y los registros del servicio (sin contraseñas). Consulte la página de soporte.