Safent · guía para partners

Despliegue con Safent

Así llegan a producción las apps que Safent desarrolla para tus clientes. Safent no entra nunca en el clúster: quien lo administra ejecuta un comando, una vez, y desde entonces el clúster descarga él mismo cada versión firmada, comprueba la firma, la instala y avisa a Safent de cómo ha ido.

Descargar esta guía en PDF

Versión al día: docs.lab.safentmcp.com/despliegue

Lo que hay que hacer, de principio a fin

  1. Tener KubernetesSi el clúster ya existe y tiene Kubernetes 1.34 o posterior, no hay nada que hacer. Si no, se crea en Azure, AWS, Google Cloud, HPE Private Cloud AI o un servidor Linux con los comandos del paso 0. En un servidor tarda un minuto.
    una vez
  2. Conectarlo con Safent: pegar un comandoDas de alta el entorno en Safent y te da el comando. Se pega en el ordenador desde el que se administra el clúster (el que tiene kubectl) y en medio minuto queda conectado. Si la red corta la salida a Internet, antes se abre HTTPS hacia dos direcciones. Está en los pasos 1 a 3; la prueba de despliegue deja verlo funcionar.
    una vez
  3. Dar a cada app nueva su configuraciónSon los datos que la app necesita de los sistemas del cliente: la dirección de su base de datos, las claves de sus APIs… Safent enseña qué variables pide y el comando para cargarlas. Si la app no pide nada, ni esto. Ver Configuración de cada app.
    una vez por app

Y ya está. Cada versión nueva llega sola al clúster y se instala sola. Si no arranca, vuelve sola a la anterior. Safent no necesita accesos, ni SSH, ni VPN.

Se pone

Un clúster de Kubernetes 1.34 o posterior y, una vez, el comando de conexión.

Safent necesita

Nada: ni accesos, ni SSH, ni VPN. Solo la salida HTTPS (443) a dos direcciones.

Se queda en el clúster

La configuración de cada app (bases de datos, claves…). Safent nunca ve esos valores.

Safent ve

El inventario técnico, el estado de cada despliegue y la salud de las apps que instala.

Cómo llega una versión al clúster

Es un modelo de recogida (GitOps): Safent publica la versión firmada y el clúster va a buscarla. Quien instala es Flux, la herramienta estándar de la CNCF para esto, que corre dentro del clúster. Si el clúster ya usa Flux, se aprovecha el suyo.

SAFENT EL CLÚSTER Azure · AWS · Google · HPE PCAI · k3s CORTAFUEGOS solo salida HTTPS 443 Desarrollo y QA cada entrega pasa el QA antes de publicarse publica firmada Registro de versiones forgejo.lab.safentmcp.com solo descarga: imagen, chart y firmas Panel de Safent equipo.lab.safentmcp.com · estado de cada despliegue · salud de las apps · versiones e incidencias · inventario del entorno guarda la telemetría Maple · observabilidad autoalojada Comando de conexión una vez, con kubectl instala Flux y el agente Flux 1. descarga la versión nueva 2. verifica la firma 3. la instala con Helm 4. si no arranca, vuelve atrás instala La app su namespace, imagen fijada por sha256 Configuración la pones tú Agente de entorno cada 5 min, solo lectura descarga versión y firma solo lectura avisa de cada paso telemetría (OTLP) inventario técnico Safent nunca entra
Cada flecha azul es una conexión que abre el clúster hacia Safent, por HTTPS (443). En sentido contrario no hay ninguna: sin SSH, sin VPN y sin puertos abiertos de entrada.
Lo hemos probado así

Un servidor Ubuntu 24.04 recién instalado, siguiendo esta guía al pie de la letra

1 mininstalar Kubernetes (k3s)
22 sel comando de conexión, con sus 5 pasos en verde
26 sde publicar la prueba a tenerla descargada y con la firma verificada
≈30 sde poner su configuración a verla instalada

La página de la prueba mostró la configuración tal cual se escribió (con comillas, &, = y un teléfono). Cambiar un valor y repetir el comando reinició la app con el valor nuevo en unos 30 s. Su telemetría llegó a Salud, y «Quitar la prueba» dejó el clúster limpio. Al final, «Dar de baja» y sus comandos de limpieza (6 s) quitaron en un minuto todo lo de Safent, app incluida: solo quedaron Flux y la configuración.

Detrás de un proxy: el mismo servidor sin otra salida a Internet que un proxy. Con el proxy puesto en Safent y en los nodos (paso 2), el comando dio sus 5 pasos en verde en 12 s, la prueba se descargó firmada y quedó instalada 16 s después de poner su configuración. Al reiniciar k3s para el proxy, las apps que ya corrían no se pararon.

Paso 0 · antes de empezar

Ten un clúster de Kubernetes 1.34 o posterior

Quién
Quien administra la infraestructura.
Dónde
Fuera de Safent. En un terminal, con la herramienta de la nube, o en el propio servidor si es k3s.
Ha ido bien si
kubectl version muestra «Server Version» v1.34 o posterior.

Si el clúster ya existe y cumple esto, salta al paso 1. Lo que tiene que tener:

  • Kubernetes 1.34 o posterior, en nodos x86 (amd64) o ARM (arm64). Es lo que soporta Flux, que es quien instala las versiones.
  • kubectl con un usuario administrador del clúster. Solo hace falta para conectar.
  • Almacenamiento persistente: una StorageClass marcada por defecto (k3s, AKS y GKE ya la traen; en EKS Auto Mode se crea con el comando de su pestaña).
  • Solo si las apps se publican con su propia URL: un dominio (del estilo apps.cliente.com), un ingress y certificados (cert-manager o el balanceador del clúster).

Si no existe, elige el caso y ejecuta sus comandos en orden, en un terminal:

Servidor Linux (k3s)

Probado por Safent
  1. Entra en el servidor, por ejemplo con ssh tu-usuario@tu-servidor. Tiene que ser Linux (Ubuntu, Debian o RHEL), x86 o ARM, con al menos 2 CPU, 4 GB de memoria y salida a Internet por HTTPS.
  2. Instala Kubernetes (k3s) como root. Tarda un minuto y trae kubectl:
    curl -sfL https://get.k3s.io | sh -
  3. Hazte root para el resto de pasos:
    sudo -i
  4. Comprueba que el nodo está listo (STATUS Ready y VERSION v1.34 o posterior):
    kubectl get nodes

Para borrarlo todo al terminar las pruebas: /usr/local/bin/k3s-uninstall.sh

Paso 1

Da de alta el entorno en Safent

Quién
Tu administrador o jefe de proyecto (o Safent, si se lo pides).
Dónde
En Safent, en https://equipo.lab.safentmcp.com, con tu usuario.
Ha ido bien si
Safent enseña el panel «Conecta … con Safent» con el comando del paso 3.
  1. Entra en https://equipo.lab.safentmcp.com con tu usuario y ve a Cartera.
  2. Abre el sitio donde va el entorno:
    • Infraestructura del partner, si es tuya y sirve para todos tus clientes: el botón Infraestructura del partner, arriba en la cartera.
    • Infraestructura de un cliente tuyo, para un proyecto suyo: abre el cliente, el proyecto y su pestaña Entornos › Entornos del proyecto.
  3. Pulsa Añadir un entorno y rellena el formulario (los opcionales, solo si aplican):
CampoQué poner
NombreCorto, en minúsculas y sin espacios: planta-norte, aks-produccion.
TipoDónde está: HPE ProLiant DL145, HPE Private Cloud AI, AWS, Azure, Google Cloud, Kubernetes (k3s) o servidor propio.
EtapaPreproducción recibe cada versión publicada. Producción la recibe cuando se acepta la UAT.
ConectividadCon Internet, lo normal. «Aislado» solo si el clúster no puede salir a Internet de ninguna forma (Sin Internet).
ArquitecturaLa de los nodos: x86 (amd64) o ARM (arm64). La ves con kubectl get nodes -L kubernetes.io/arch.
Dominio de las appsOpcional. Solo si las apps se publican con URL propia, por ejemplo apps.cliente.com. Entonces pide también los certificados (cert-manager, el balanceador del clúster o sin TLS) y, si quieres, la clase de ingress.
Proxy de salidaOpcional. Solo si el clúster sale a Internet por un proxy (paso 2).
Servidores de modelosOpcional. Si el entorno sirve modelos de IA compatibles con OpenAI (NIM, vLLM…), sus direcciones.
  1. Pulsa Dar de alta. Aparece el panel «Conecta «nombre» con Safent» con el comando del paso 3. Cópialo ahora: lleva dentro el token del entorno y solo se enseña una vez.
  2. Si lo pierdes, o si lo va a ejecutar otra persona, en la ficha del entorno pulsa Cómo conectarlo (o Volver a conectar): genera un comando nuevo y el anterior deja de valer.
Paso 2

Comprueba que el clúster sale a Internet (y ábrelo solo si no)

Quién
Quien administra el clúster y, si hay que abrir algo, quien lleva su red.
Dónde
Fuera de Safent. En la red del clúster: su cortafuegos, su proxy de salida o las reglas de salida de su nube.
Ha ido bien si
Las dos comprobaciones responden 200 y 401, y en el paso 3 sale «✓ llega a Safent y a su registro».

Lo normal es no tener que hacer nada. Un clúster creado como en el paso 0 (en Azure, AWS, Google Cloud o un servidor con Internet) ya sale a Internet por HTTPS. Solo hay que tocar algo si la red filtra lo que sale.

  1. Compruébalo desde donde vayas a ejecutar el paso 3 (en k3s, en el propio servidor). La primera tiene que responder 200:
    curl -sS -o /dev/null -w '%{http_code}\n' https://equipo.lab.safentmcp.com/salud
    y la segunda, 401. El 401 es lo correcto: el registro responde y pide una credencial, que pone el paso 3.
    curl -sS -o /dev/null -w '%{http_code}\n' https://forgejo.lab.safentmcp.com/v2/
  2. Si alguna no responde, o la red del clúster filtra la salida, pide a quien la lleve esta regla. En Azure Firewall es una regla de aplicación; en AWS Network Firewall, una lista de dominios permitidos; en un proxy, su lista de sitios permitidos.
    ReglaValor
    OrigenLos nodos del clúster (y sus pods).
    Destinoforgejo.lab.safentmcp.com y equipo.lab.safentmcp.com, por nombre de dominio.
    PuertoTCP 443 (HTTPS).
    SentidoSolo de salida. No se abre nada de entrada.
  3. Si el clúster sale a Internet por un proxy, sigue Si el clúster sale a Internet por un proxy, aquí debajo.

Si el clúster sale a Internet por un proxy

Antes del paso 3, estas cuatro cosas. Lo demás lo hace el comando de conexión: pone a Flux y al agente a salir por el proxy.

  1. En Safent: ficha del entorno › Editar › Proxy de salida: la dirección del proxy, por ejemplo http://proxy.empresa.local:3128 › Guardar. Al dar de alta, es el mismo campo del formulario. Si el proxy pide usuario y contraseña, van en la dirección (http://usuario:clave@proxy.empresa.local:3128); Safent no vuelve a enseñar la clave.
  2. En el proxy: permite la salida a forgejo.lab.safentmcp.com y equipo.lab.safentmcp.com, puerto 443. Compruébalo desde un nodo; tiene que responder 401:
    curl -sS -x http://proxy.empresa.local:3128 -o /dev/null -w '%{http_code}\n' https://forgejo.lab.safentmcp.com/v2/
  3. En los nodos: que descarguen las imágenes por el proxy. Si el clúster ya descarga imágenes de Internet, ya lo hace y no hay que tocar nada. Si no:

    k3s

    Probado por Safent
    1. En el servidor, como root, añade el proxy al entorno de k3s (en los nodos agente, el fichero es /etc/systemd/system/k3s-agent.service.env):
      cat >> /etc/systemd/system/k3s.service.env <<'EOF'
      CONTAINERD_HTTP_PROXY=http://proxy.empresa.local:3128
      CONTAINERD_HTTPS_PROXY=http://proxy.empresa.local:3128
      CONTAINERD_NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
      EOF
    2. Reinicia k3s (en los agentes, systemctl restart k3s-agent). Las apps que ya corren no se paran:
      systemctl restart k3s
  4. En el terminal del paso 3, si ese ordenador tampoco sale directo a Internet (en k3s, el propio servidor), pon el proxy antes de pegar el comando. NO_PROXY deja fuera la API del clúster, para que kubectl siga llegando a ella:
    export HTTPS_PROXY=http://proxy.empresa.local:3128 NO_PROXY="localhost,127.0.0.1,$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}' | sed 's#^[a-z]*://##; s#[:/].*##')"
Paso 3 · una sola vez

Ejecuta el comando de conexión

Quién
Quien administra el clúster.
Dónde
Fuera de Safent. En un terminal del ordenador donde kubectl llega al clúster (el del paso 0). En k3s, en el servidor, como root. Safent solo da el comando.
Ha ido bien si
Termina con «Listo» y, en Safent, el entorno sale Conectado y Apto para instalar.
  1. Abre el terminal y comprueba que kubectl apunta al clúster bueno: tiene que salir su nombre (en k3s no hace falta).
    kubectl config current-context
  2. Pega el comando que copiaste en el paso 1 y pulsa Intro. Tiene esta forma:
    curl -fsSL 'https://equipo.lab.safentmcp.com/entornos/<dueño>/<entorno>/conectar.sh?t=<token>' | sh
  3. Tarda entre medio minuto y un par de minutos. Verás esto:
    1/5 Clúster
       ✓ Kubernetes 1.34, 1 nodo(s)
    2/5 Salida a Safent (HTTPS)
       ✓ llega a Safent y a su registro
    3/5 Flux
       ✓ Flux instalado
    4/5 Conexión con Safent
       ✓ repo de entregas, firma, avisos y agente de entorno
       ✓ Flux descarga de forgejo.lab.safentmcp.com
    5/5 Primer aviso a Safent
       ✓ Safent ha recibido el aviso de <dueño>/<entorno>: 0 GPU, 1 nodo(s)
    
    Listo: «<dueño>/<entorno>» aparece como Conectado en Safent, con su lista de requisitos.
  4. En Safent, en la ficha del entorno: Conectado y Apto para instalar. Si sale «No apto», pulsa esa etiqueta: dice qué falta.
  5. Si se para con un mensaje, arregla lo que dice y vuelve a ejecutarlo: repetirlo no rompe nada (ver Si algo falla).
PasoQué hace
1/5 ClústerComprueba kubectl, que llega al clúster, que el usuario es administrador y la versión de Kubernetes.
2/5 SalidaComprueba que se llega a las dos direcciones por HTTPS.
3/5 FluxInstala la credencial de solo lectura del registro. Instala Flux solo si el clúster no lo tiene; si ya lo tiene, usa el suyo.
4/5 ConexiónInstala el repo de despliegue de este entorno, la clave pública que verifica las firmas, los avisos a Safent y el agente de entorno, y comprueba que Flux descarga.
5/5 Primer avisoLanza el agente una vez desde dentro del clúster y espera a que Safent confirme que lo ha recibido.
Paso 4 · recomendado

Haz la prueba de despliegue

Quién
Quien administra el clúster.
Dónde
El botón, en Safent. La configuración y la comprobación, en el mismo terminal del paso 3.
Ha ido bien si
La prueba llega a Instalada y su página dice «Despliegue correcto» con tu mensaje.

Safent instala una app de ejemplo suya, firmada, por el mismo camino que cada versión real. Pide una variable de configuración, MENSAJE, para que veas también cómo se pone la configuración.

  1. En Safent, en la ficha del entorno, pulsa Prueba de despliegue y después Hacer la prueba.
  2. Sigue la línea de tiempo. En medio minuto se para en Falta la configuración:
    1. Versión publicada para el entornoSafent la deja en el repo de despliegue del entorno.
    2. El entorno ha recogido el cambioFlux, desde el clúster, ve que hay una versión nueva.
    3. Chart descargado y firma verificadaSi la firma no cuadra, no se instala.
    4. Falta la configuraciónSolo si la app pide variables y aún no existen. Safent enseña la plantilla y el comando; en cuanto los pones, sigue sola.
    5. InstaladaLa app arranca con su configuración.
    6. Si una versión no arrancaFlux vuelve sola a la anterior y Safent la marca como fallida, con el motivo.
  3. En el terminal, crea el fichero de su configuración con el texto que quieras:
    echo "MENSAJE=Hola desde el clúster" > safent-ejemplos-prueba-despliegue.env
  4. En el mismo terminal, cárgalo en el clúster. Es el comando que enseña Safent en «Configuración de la app», el mismo para cualquier app:
    echo "_huella=$(date +%s)" | kubectl -n flux-system create secret generic safent-ejemplos-prueba-despliegue-config --from-env-file=safent-ejemplos-prueba-despliegue.env --from-env-file=/dev/stdin --dry-run=client -o yaml | kubectl label --local -f - reconcile.fluxcd.io/watch=Enabled -o yaml | kubectl apply -f -
  5. En Safent, la prueba pasa a Instalada en unos 30 segundos.
  6. Ábrela. En el terminal (se queda abierto; lo cierras con Ctrl+C):
    kubectl -n safent-ejemplos-prueba-despliegue port-forward svc/app 8080:8080
    y en el navegador del mismo ordenador entra en http://localhost:8080: dice «Despliegue correcto» y enseña el MENSAJE tal cual. Si estás en el servidor por SSH, abre otra sesión en él y mira la página con curl -s http://localhost:8080.
  7. Para quitarla, en Safent pulsa Quitar la prueba: se desinstala con su namespace. Su configuración se borra en el terminal:
    kubectl -n flux-system delete secret safent-ejemplos-prueba-despliegue-config
Paso 5

Las apps llegan solas

Quién
Tú (o Safent) eliges el destino de cada repositorio. Quien administra el clúster solo pone la configuración de cada app nueva.
Dónde
En Safent, en el Despliegue de cada repositorio.
Ha ido bien si
Cada destino llega a Instalada en su línea de tiempo.
  1. Abre el repositorio: Cartera › el cliente › el proyecto › pestaña Repositorios › el repositorio › pestaña Despliegue.
  2. Pulsa Elegir dónde se despliega (o «Añadir o cambiar destino»), elige de quién es el entorno (de Safent, tuyo o de tu cliente), su tipo y el entorno, y pulsa Fijar destino (o «Desplegar … aquí», si ya hay versión).
  3. Desde ahí, cada versión llega sola:
    • a preproducción, cada versión publicada, es decir, firmada tras pasar el QA;
    • a producción, cuando se acepta la UAT del proyecto y desde entonces cada versión;
    • un sistema que ya estaba en producción y se trae para mantenerlo, sin UAT, va directo.
  4. Si la app pide configuración, la línea de tiempo se para en Falta la configuración: sigue La configuración de cada app.
Después de desplegar

La configuración de cada app

Quién
Quien administra el clúster.
Dónde
La plantilla, en Safent. El fichero y el comando, en el terminal con kubectl.
Ha ido bien si
En Safent, la versión pasa de «Falta la configuración» a Instalada en menos de un minuto.

Cada app declara en su .env.example lo que necesita de su entorno: la URL de la base de datos, las claves de las APIs… Al desplegarla, la versión queda en Falta la configuración hasta que se ponga.

  1. En Safent, en el Despliegue del repositorio, pulsa Configuración de la app junto a su destino: enseña la plantilla y el comando, ya con el nombre de la app.
  2. En el terminal, crea el fichero <app>.env a partir de la plantilla, con los valores reales: una línea por variable, NOMBRE=valor. El valor llega tal cual, con comas, espacios o cualquier símbolo; por eso va sin comillas.
  3. Cárgalo en el clúster con el comando (aquí con <app>; el de Safent ya lleva el nombre):
    echo "_huella=$(date +%s)" | kubectl -n flux-system create secret generic <app>-config --from-env-file=<app>.env --from-env-file=/dev/stdin --dry-run=client -o yaml | kubectl label --local -f - reconcile.fluxcd.io/watch=Enabled -o yaml | kubectl apply -f -

Safent solo conoce los nombres de las variables, nunca los valores. En menos de un minuto la versión se instala sola. Para cambiar un valor, edita el fichero y repite el comando: la app se reinicia con la configuración nueva.

El comando añade al secreto la clave _huella, que cambia en cada ejecución y hace que la app se reinicie, y la etiqueta reconcile.fluxcd.io/watch=Enabled, que hace que Flux vea el cambio al momento. Si el secreto lo crea otra herramienta (un gestor de secretos, por ejemplo), que ponga las dos.

Versiones y vuelta atrás

Cada versión sale de una entrega que ha pasado el QA, se publica firmada y se guarda. Su número sigue el versionado semántico:

  • la primera de cada proyecto es la 1.0.0;
  • una entrega nueva sube el número del medio: 1.1.0 → 1.2.0;
  • el arreglo de una incidencia sube el último: 1.1.0 → 1.1.1.
PREPRODUCCIÓN PRODUCCIÓN 1.0.0 la primera 1.1.0 entrega nueva 1.1.1 arreglo de incidencia 1.2.0 entrega nueva se acepta la UAT desde entonces, va sola 1.0.0 1.1.0 1.1.1 1.2.0 volver a 1.1.1: un botón
Todas las versiones siguen firmadas y guardadas. Volver a una anterior no toca el entorno: es la misma recogida de siempre, con otro número.
  • Si una versión no arranca, el entorno vuelve solo a la anterior (Flux deshace la actualización) y Safent lo marca como fallido con el motivo.
  • Volver a una versión anterior es un botón, en Safent: en el Despliegue del repositorio, abre Versiones · volver a una anterior y pulsa «Instalar en preproducción» o «Instalar en producción» junto a la que quieras. Se instala en un minuto, sin tocar nada en el clúster.
  • Cada versión sabe de qué entrega y de qué commit sale, y si fue el arreglo de una incidencia.

Monitorización

Al instalar cada app, Safent le pone las variables estándar de OpenTelemetry. Cualquier app que use OpenTelemetry (hay SDK para todos los lenguajes habituales; las de Safent ya lo traen) envía sus trazas, métricas y logs sin configurar nada más:

  • Van a equipo.lab.safentmcp.com con un token propio de ese despliegue, que solo sirve para enviar su telemetría.
  • Safent las etiqueta con el cliente, la app y el entorno, y las guarda en Maple, una plataforma de observabilidad de código abierto que Safent aloja en su propia infraestructura. La telemetría no sale a ningún tercero.
  • Se guardan 30 días de trazas y logs y 90 de métricas.
QuiénQué ve
Tú y tu clienteEn la pestaña Salud de cada proyecto: peticiones, porcentaje de errores, tiempos de respuesta (p50 y p95) y los errores más repetidos. Cada uno, solo de sus proyectos.
Equipo SafentEl panel completo de Maple, con cada traza, para diagnosticar.
Agente de soporteLa salud y los errores de producción de la app de la incidencia, y nada de otros clientes.

Antes de entregar, mientras se desarrolla, Safent vigila cada 5 minutos la versión de prueba de cada entrega: si sube el porcentaje de errores, si va lenta o si aparece un error nuevo, el agente que la desarrolla lo arregla antes de entregarla.

Incidencias

Con el versionado, resolver una incidencia es el mismo camino que una entrega, y siempre hay una versión buena a la que volver.

  1. La reportas en Safent, en el menú Reportar incidencia: cliente, proyecto, qué pasa y su gravedad. Las del proyecto se ven en su pestaña Incidencias.
  2. El agente de soporte la diagnostica. Mira la salud y los errores de producción de esa app, revisa el código y te pregunta por el chat lo que necesite. Te deja un diagnóstico: qué pasa, la causa, a quién afecta, cómo esquivarlo mientras tanto y qué hay que cambiar.
  3. «Arreglar» convierte ese diagnóstico en una entrega: rama, QA y PR, como cualquier otra.
  4. Sale una versión de parche firmada (1.1.0 → 1.1.1) que llega a preproducción y, si el proyecto ya está aceptado, a producción, sola.
  5. Al instalarse, la incidencia queda «Resuelta». Tú la confirmas o la reabres.

Si urge, mientras se arregla: en el Despliegue del repositorio, Versiones · volver a una anterior › «Instalar en producción» en la versión anterior. Un minuto, sin tocar el entorno.

Seguridad

  • Nadie entra. Safent no tiene accesos, SSH ni VPN a ningún clúster. Todas las conexiones las abre el clúster.
  • Firmas. Cada versión (imagen y chart) se firma con cosign al publicarse. El clúster la verifica con la clave pública que instaló el comando de conexión; si no cuadra, no se instala.
  • Imágenes fijadas. Cada imagen va por su huella sha256: nadie puede cambiarla por otra con el mismo nombre.
  • Credencial de solo lectura. La del registro solo descarga, y solo los paquetes de ese entorno.
  • La configuración se queda en el clúster. Vive en un Secret. Safent solo sabe cómo se llaman las variables.
  • Tokens acotados. El del entorno se muestra una vez y «Volver a conectar» lo anula; el de telemetría solo sirve para enviar la de su despliegue.
  • El agente de entorno solo cuenta la versión, los nodos, las GPU, los modelos y el almacenamiento, cada 5 minutos. Nunca datos.
Qué queda en el clústerQué es
flux-systemFlux (si no lo tenía), la credencial de solo lectura (safent-registro), la clave pública (safent-cosign) y los objetos safent-<dueño>-<entorno>.
safent-entornoEl agente de entorno: un CronJob con permisos de solo lectura.
<cliente>-<app>Un namespace por app, con lo que instale cada versión.
Casos especiales

Sin Internet (planta aislada)

  1. Alta con «Aislado (sin Internet)». Safent da un fichero de conexión; llévalo al servidor. Con Docker: sudo sh conectar-aislado.sh; con Kubernetes: kubectl apply -f conectar-aislado.yaml. Instala solo el agente de entorno.
  2. Cada versión se descarga en Versiones › Paquete offline: un único fichero con la imagen, el chart, sus firmas y las herramientas. En el servidor:
    tar xzf paquete-*.tar.gz && cd paquete-*/ && cp app.env.example app.env
    Pon los valores en app.env (solo si la app pide configuración) y después:
    ./instalar-offline.sh
    Comprueba las firmas sin conexión e instala con Helm si hay Kubernetes, o con Docker Compose si no.
  3. El estado lo deja el agente en un fichero firmado; súbelo en Safent con «Subir estado». Si alguien lo modifica, Safent lo rechaza.

Si algo falla, el comando dice qué falta

MensajeQué hacer
curl: (6) o curl: (7) nada más pegar el comandoEl terminal no llega a equipo.lab.safentmcp.com: paso 2. Si sale por un proxy, ponlo en el terminal (proxy, punto 4) y vuelve a pegar el comando.
Falta kubectl…Instala Kubernetes (o k3s) y kubectl.
kubectl no llega al clústerRevisa KUBECONFIG (en k3s, entra como root con sudo -i).
Hace falta un usuario administradorEjecútalo con un usuario cluster-admin.
⚠ Flux se soporta desde Kubernetes 1.34El entorno se conecta, pero no está apto para instalar hasta que se actualice el clúster.
Este equipo no llega a … / No se llega al registro de SafentEl ordenador donde ejecutas el comando no sale a esa dirección: paso 2. Si sale por un proxy, ponlo en el terminal (proxy, punto 4).
Flux no arrancaSi sus pods están en ImagePullBackOff (kubectl -n flux-system get pods), los nodos no salen a forgejo.lab.safentmcp.com aunque el ordenador desde el que se ejecuta sí: paso 2, desde los nodos. Con proxy, «En los nodos».
El agente no arrancaLo mismo, con kubectl -n safent-entorno describe job/…: los nodos no descargan su imagen de forgejo.lab.safentmcp.com.
El agente no pudo avisar a SafentLos pods no salen a equipo.lab.safentmcp.com aunque el ordenador desde el que se ejecuta sí: paso 2, desde el clúster. Con proxy, que deje salir a esa dirección.
Flux no descarga de forgejo.lab.safentmcp.comFlux no llega al registro. Si el clúster sale por un proxy, ponlo en Safent (proxy, punto 1) y repite el comando.
⚠ su Flux no tiene proxyEl clúster ya tenía Flux y no sale por el proxy: ponle HTTPS_PROXY y NO_PROXY como indica Flux.
Falta la configuración (en Safent)No es un fallo: crea el secreto con el comando de Configuración de la app.

Pausar o dar de baja

Pausar las actualizaciones

Quién
Quien administra el clúster.
Dónde
Fuera de Safent. En el terminal con kubectl.
Ha ido bien si
Lo instalado sigue funcionando y no llegan versiones nuevas hasta que reanudes.

Cambia <dueño>-<entorno> por los del entorno (el entorno planta-norte del cliente talleres sería safent-talleres-planta-norte). Para reanudar, el mismo comando con false:

kubectl -n flux-system patch kustomization safent-<dueño>-<entorno> --type merge -p '{"spec":{"suspend":true}}'

Dar de baja el entorno

Quién
Tú, en Safent; para limpiar, quien administra el clúster.
Dónde
Primero en Safent; después, en el terminal con kubectl (o en el servidor, si es un DL145 sin Internet).
Ha ido bien si
El entorno desaparece de Safent y, tras la limpieza, en el clúster no queda nada de Safent.
  1. En Safent, en la ficha del entorno, pulsa Dar de baja y confírmalo. Safent deja de entregarle versiones, su token deja de valer y los proyectos que lo tenían de destino se quedan sin él (te dice cuáles, para que elijas otro). En el clúster todavía no cambia nada.
  2. Safent enseña los comandos de limpieza, ya con el nombre del entorno. En un entorno con Internet son estos; desinstalan también las apps que Safent instaló, con sus namespaces:
    kubectl -n flux-system delete alerts.notification.toolkit.fluxcd.io,providers.notification.toolkit.fluxcd.io safent-<dueño>-<entorno> --ignore-not-found
    kubectl -n flux-system delete kustomizations.kustomize.toolkit.fluxcd.io safent-<dueño>-<entorno> --ignore-not-found --wait
    kubectl -n flux-system delete gitrepositories.source.toolkit.fluxcd.io safent-<dueño>-<entorno> --ignore-not-found
    kubectl -n flux-system delete secret safent-<dueño>-<entorno>-git safent-registro safent-registro-valores safent-cosign --ignore-not-found
    kubectl -n flux-system delete role,rolebinding safent-agente-entorno --ignore-not-found
    kubectl delete namespace safent-entorno --ignore-not-found
    kubectl delete clusterrole,clusterrolebinding safent-agente-entorno --ignore-not-found
  3. Se ejecutan en el terminal. Compruébalo: kubectl get ns ya no muestra safent-entorno ni los namespaces de las apps.
  4. Quedan Flux (lo usa quien quiera) y la configuración de cada app (los secretos <app>-config de flux-system), que se borra si ya no hace falta. Si el clúster ya no existe, no hay nada que limpiar.

Sin Internet, la limpieza solo quita el agente de entorno; las apps instaladas con los paquetes offline se quedan como están. Para volver a conectarlo más adelante, se da de alta otra vez, con el mismo nombre si quieres.

Safent Developer Team · octubre de 2026. Probado de principio a fin en un servidor Linux con k3s; Azure, AWS, Google Cloud y HPE PCAI siguen la documentación oficial de cada proveedor.