Installer la Navin Platform sur un site déconnecté
Cette page installe la Navin Platform sur un site sans accès Internet. Tout vient de sources internes : le bundle de
version signé, les dépôts de paquets signés (apt, dnf, pacman) ou les archives hors ligne de navin-install, un
registre Harbor en miroir des images et des charts, et les poids des modèles copiés sur un volume. Elle est réalisée
par le responsable de version (côté connecté) et l'ingénieur plateforme (côté isolé).
Avant de commencer
- Une machine connectée pour construire et signer le bundle, avec les outils de
tools/release/fetch-tools.sh,tools/oci/fetch.shettools/components/fetch-syft.sh(versions épinglées, sha256 vérifiés). - Un support amovible ou une zone de transfert approuvée par l'équipe sécurité.
- Sur le site isolé : un registre Harbor, un serveur de dépôts de paquets interne (HTTPS), et la méthode d'installation choisie (paquets OS ou Kubernetes avec Helm).
Étapes
-
Construire, contrôler et signer le bundle (côté connecté). Le bundle contient le chart empaqueté, les manifestes rendus, les migrations SQL, la documentation hors ligne, les wheels Python, les paquets des SDK, les packs, les SBOM et les notices de licence.
bash tools/release/build.shbash tools/release/verify-reproducible.shbash tools/release/sign.shRésultat attendu :
verify-reproducible.shaffichecompared <n> artefacts, 0 differences;sign.shécrit les SBOM, les signatures Cosign et le verdict Trivyscans/gate.json.En cas d'échec :
sign.shs'arrête sur un résultat Trivy HIGH ou CRITICAL quetools/release/trivy-exceptions.yamlne justifie pas ; corrigez l'image ou justifiez le résultat (id,justification,owner).attentionsign.shcrée une paire de clés de test sous/tmp/eai-release-keys(EAI_SIGN_KEY_DIR). En production, signez avec la clé du client, conservée dans un HSM ou dans OpenBao. -
Préparer les dépôts de paquets (côté connecté, paquets OS). Téléchargez la version, contrôlez-la et publiez les dépôts signés ; construisez les archives hors ligne de
navin-installpar famille.python3 os/release.py file navin-<version>os/repo.sh --sign <id-de-cle> --url https://<hote-du-depot>os/build.sh install-archive<id-de-cle>: clé GPG du responsable de version (RSA 4096, conservée hors ligne ou dans un HSM ; le script n'en crée jamais).os/release.py fileretire deos/<paquet>/<famille>/les paquets d'une autre version (construction ou version précédente) : les dépôts signés ne contiennent que la version téléchargée.Résultat attendu :
os/repo/contientapt/,rhel/etarch/avec les fichiers clientsnavin.sources,navin.repoetnavin.conf;os/dist/contientnavin-install-<version>-<famille>.tar.gzet son.sha256. -
Mettre en miroir les images et les charts (côté connecté, Kubernetes). Listez les images des manifestes rendus et des opérateurs, copiez-les dans Harbor, vérifiez les signatures amont et signez-les à nouveau avec la clé interne.
helm template eai deploy/helm/enterprise-ai -f deploy/helm/enterprise-ai/values-prod.yaml | grep 'image:' | sort -uskopeo copy --all docker://<image>:<tag> docker://<harbor-host>/mirror/<image>:<tag>helm pull <chart> --version <version>helm push <chart>-<version>.tgz oci://<harbor-host>/chartsFixez ensuite
global.imageRegistry(Helm),helm_repository_mirror(Terraform) et remplacezrepodansdeploy/argocd/applicationset.yamlpar le projet de charts Harbor (déjà autorisé par l'AppProject).Résultat attendu : chaque image des manifestes rendus est sous
<harbor-host>/eai/ou<harbor-host>/mirror/.En cas d'échec : la politique Kyverno
eai-image-provenancerefuse toute image hors de ces projets qui n'est pas référencée par empreinte. -
Copier les poids des modèles. Les pods vLLM tournent avec
HF_HUB_OFFLINE=1: ils ne téléchargent jamais. Copiez les poids sur le volume de cache des modèles (vllm.modelCache), ou restaurez le magasin d'Ollama depuis un volume validé (ollama.preloadModelsvide,ollama.registryCIDRsvide). -
Transférer, puis vérifier sur le site isolé.
bash tools/release/verify.sh <dossier-du-bundle>bash tools/release/verify.sh --integrity-only <dossier-du-bundle>La première commande contrôle les sha256, les signatures, les SBOM et le verdict Trivy ; la seconde seulement l'intégrité. Passez en second argument la clé publique reçue par un autre canal pour un contrôle indépendant.
Résultat attendu : le script se termine sans erreur.
En cas d'échec : n'installez pas ; une signature ou une somme qui diffère signifie que le bundle a changé pendant le transfert.
-
Fermer tout flux sortant. Laissez
networkSecurity.providerFQDNsvide, ou metteznetworkSecurity.providerEgress.controlPlaneet.litellmàfalse, et n'activez aucun labeleai.io/provider-*: seuls les modèles locaux restent disponibles. -
Installer. Suivez la page de votre méthode avec les sources internes : paquets OS (fichiers de dépôt de l'étape 2, ou
navin-installdepuis l'archive hors ligne) ou Kubernetes avec Helm (Harbor de l'étape 3, chart du bundlecharts/enterprise-ai-<version>.tgz).
Vérifier
La preuve d'une installation sans réseau s'exécute dans un espace de noms réseau vide :
bash tools/release/airgap-check.sh /tmp/eai-release/<version> /tmp/eai-airgap/bundle.tar release/airgap/<date>.json
Elle vérifie qu'une connexion TCP vers Internet et une résolution DNS échouent, puis contrôle le bundle et le miroir
du Navin Manager, installe les wheels avec pip --no-index, rend le chart et extrait les migrations. Suivez ensuite
Vérifier l'installation.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
apt update signale NO_PUBKEY | Trousseau non installé | Copiez navin-archive-keyring.gpg dans /usr/share/keyrings/ |
dnf signale un échec de contrôle GPG | RPM-GPG-KEY-navin injoignable à l'adresse gpgkey | Publiez la clé à côté de repodata/ |
| Un pod vLLM redémarre pendant le chargement | Poids absents du cache | Copiez les poids sur le volume ; augmentez vllm.startupFailureThreshold pour les grands modèles |
| Kyverno refuse une image en miroir | Image non signée avec la clé interne | Signez-la à nouveau dans Harbor |
Plus de détails : Manuel d'installation client.