En este post corregiremos el problema "Invalid master key" con los nodos con Salt minion (minions) qué ocurre al tener diferentes versiones de salt.
Introducción
Desde hace varias semanas note que un conjunto de minions marcaban errores "Invalid master key", lo cual era extraño por que la misma configuración funcionaba sin problemas con otros minions.
Después de revisar logs en /var/log/salt/minion y usar algunos workarounds, se identificó el problema al tener diferentes versiones de Salt entre el salt-master y los salt-minions.
El ambiente es el siguiente:
salt-master: Rocky Linux 8.9 con Salt 3005.x
salt-minions: Rockly Linux 9.3 con Salt 3007.0
Aunque la diferencia entre versiones de Salt es mínima, en la documentación de Salt claramente dice que ejecutar minions con versiones más recientes que el master no esta garantizado puesto que el minion puede incluir cambios no soportados por el master.
Actualización del Salt master
Una vez identificado el problema, veamos el proceso de actualización:
Para actualizar el servidor salt-master
# Borrar la version vieja de salt y el repo anterior en caso de existir
dnf erase salt
rm -f /etc/yum.repos.d/salt.repo
# Actualizar el sistema en general para reducir problemas de dependencias
dnf update -y
# Configurar el nuevo repo de Salt
rpm --import https://repo.saltproject.io/salt/py3/redhat/8/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub
curl -fsSL https://repo.saltproject.io/salt/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
# Instalar la nueva version de salt-master y salt-minion en el mismo host, para este ejemplo utilizaré el script de bootstraping de Salt
# -i específica el hostname del minion
# -A es el hostname del salt master
# -M installa el master y el minion, en este caso, el master también es minion
# -r Desactiva cualquier configuración, reutiliza la configuración previa
# stable 3007.0 es la última versión estable
curl -o bootstrap-salt.sh -L https://bootstrap.saltproject.io && chmod +x bootstrap-salt.sh
./bootstrap-salt.sh -i salt-minion -A salt-master -M -r stable 3007.0
rm -f bootstrap-salt.sh
Algunas cosas a destacar sobre la actualización:
- En el caso de Rocky Linux hay que utilizar el repo de RHEL, CentOS Stream no es compatible
Puesto que el salt-minion ya cuenta con la última versión de Salt, solo hay que verificar que funcione correctamente. Esto se puede hacer de 2 formas:
# Probar que responsa el nodo indicando que ya no hay problema con las llaves
salt salt-minion test.ping
# Simular la sincronización de la configuración
salt salt-minion state.highstate test=TRUE
# Sincronizar la configuración
salt salt-minion state.highstate
Una vez que todo funciona correctamente, podemos regresar a administrar los minions de forma habitual!