Aller au contenu principal

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.sh et tools/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​

  1. 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.sh
    bash tools/release/verify-reproducible.sh
    bash tools/release/sign.sh

    Résultat attendu : verify-reproducible.sh affiche compared <n> artefacts, 0 differences ; sign.sh écrit les SBOM, les signatures Cosign et le verdict Trivy scans/gate.json.

    En cas d'échec : sign.sh s'arrête sur un résultat Trivy HIGH ou CRITICAL que tools/release/trivy-exceptions.yaml ne justifie pas ; corrigez l'image ou justifiez le résultat (id, justification, owner).

    attention

    sign.sh cré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.

  2. 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-install par 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 file retire de os/<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/ contient apt/, rhel/ et arch/ avec les fichiers clients navin.sources, navin.repo et navin.conf ; os/dist/ contient navin-install-<version>-<famille>.tar.gz et son .sha256.

  3. 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 -u
    skopeo copy --all docker://<image>:<tag> docker://<harbor-host>/mirror/<image>:<tag>
    helm pull <chart> --version <version>
    helm push <chart>-<version>.tgz oci://<harbor-host>/charts

    Fixez ensuite global.imageRegistry (Helm), helm_repository_mirror (Terraform) et remplacez repo dans deploy/argocd/applicationset.yaml par 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-provenance refuse toute image hors de ces projets qui n'est pas référencée par empreinte.

  4. 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.preloadModels vide, ollama.registryCIDRs vide).

  5. 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.

  6. Fermer tout flux sortant. Laissez networkSecurity.providerFQDNs vide, ou mettez networkSecurity.providerEgress.controlPlane et .litellm à false, et n'activez aucun label eai.io/provider-* : seuls les modèles locaux restent disponibles.

  7. 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-install depuis l'archive hors ligne) ou Kubernetes avec Helm (Harbor de l'étape 3, chart du bundle charts/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ômeCauseCorrection
apt update signale NO_PUBKEYTrousseau non installéCopiez navin-archive-keyring.gpg dans /usr/share/keyrings/
dnf signale un échec de contrôle GPGRPM-GPG-KEY-navin injoignable à l'adresse gpgkeyPubliez la clé à côté de repodata/
Un pod vLLM redémarre pendant le chargementPoids absents du cacheCopiez les poids sur le volume ; augmentez vllm.startupFailureThreshold pour les grands modèles
Kyverno refuse une image en miroirImage non signée avec la clé interneSignez-la à nouveau dans Harbor

Plus de détails : Manuel d'installation client.