Aller au contenu principal

NetBox sur GKE Autopilot

NetBox sur GKE Autopilot

NetBox est la « source de vérité » open source de référence pour les équipes d'ingénierie réseau — gestion des adresses IP (IPAM), inventaire des équipements et des baies, câblage et topologie réseau, le tout modélisé sous forme de données structurées derrière une API REST/GraphQL complète. Ce module déploie NetBox sur GKE Autopilot en s'appuyant sur le socle App_GKE, qui provisionne et gère l'infrastructure Google Cloud et Kubernetes partagée.

Ce guide se concentre sur les services cloud qu'utilise NetBox et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toutes les applications GKE — Workload Identity, ingress, autoscaling, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_GKE plutôt que de les répéter ici.


1. Vue d'ensemble​

NetBox s'exécute sous la forme d'un pod Python/Django construit sur mesure sur GKE Autopilot, qui encapsule l'image officielle netboxcommunity/netbox avec un processus d'arrière-plan rqworker --with-scheduler colocalisé. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculGKE AutopilotPods à image construite sur mesure, 2 vCPU / 2 GiB par défaut, autoscaling horizontal
Base de donnéesCloud SQL for PostgreSQL 15Obligatoire — NetBox ne prend en charge ni MySQL ni SQLite en production
Stockage objetCloud Storage (GCS Fuse CSI)Un bucket media monté sur /etc/netbox/media, le véritable MEDIA_ROOT de NetBox
Cache et file d'attenteRedis (obligatoire)File de tâches (REDIS_DATABASE=0) et cache (REDIS_CACHE_DATABASE=1) sur des bases logiques distinctes ; utilise par défaut l'IP du serveur NFS
SecretsSecret ManagerSECRET_KEY et SUPERUSER_PASSWORD générés automatiquement ; mot de passe de la base de données
IngressCloud Load BalancingLoadBalancer externe par défaut ; domaine personnalisé + certificat géré en option

Valeurs par défaut judicieuses à connaître d'emblée :

  • PostgreSQL 15 est obligatoire. Le moteur de base de données est fixé par la couche applicative partagée ; NetBox ne prend en charge ni MySQL ni SQLite en production.
  • Redis est obligatoire, pas facultatif. NetBox utilise Redis comme broker pour son système de tâches d'arrière-plan RQ (Redis Queue) — webhooks, scripts personnalisés, rapports et jobs planifiés/système — et comme backend de cache, sur deux bases logiques distinctes (REDIS_DATABASE=0, REDIS_CACHE_DATABASE=1).
  • Un worker d'arrière-plan est colocalisé dans le même pod. manage.py rqworker --with-scheduler s'exécute comme processus en arrière-plan à côté du serveur web Granian. Sans lui, les tâches d'arrière-plan s'accumulent silencieusement en file d'attente et ne s'exécutent jamais.
  • Les téléversements de médias sont montés sur le véritable MEDIA_ROOT de NetBox. /etc/netbox/media, confirmé en conditions réelles via manage.py shell. Voir §3 pour l'histoire complète de la découverte de ce chemin et des raisons pour lesquelles un chemin antérieur, plausible en apparence, était erroné.
  • Les options uid=0/gid=0 du montage GCS Fuse sont déterminantes sur GKE. L'intégration GCS Fuse propre à Cloud Run applique toujours un uid:1000/gid:1000 par défaut quelle que soit la configuration (root peut y écrire de toute façon) ; le pilote CSI GCS Fuse de GKE n'a pas de telle valeur par défaut, c'est donc la fixation explicite uid=0/gid=0 — correspondant au conteneur de NetBox exécuté en root — qui rend réellement le montage accessible en écriture.
  • Pas de mise à l'échelle jusqu'à zéro. GKE Autopilot exécute toujours au moins min_instance_count réplicas (par défaut 1), ce qui maintient le worker RQ actif en permanence.
  • Le conteneur s'exécute en tant que root (uid 0 / gid 0) — l'image officielle netboxcommunity/netbox ne définit aucun USER.
  • SECRET_KEY et SUPERUSER_PASSWORD sont générés automatiquement et stockés dans Secret Manager.
  • Les contrôles d'état utilisent /login/, et non /api/status/. La page de connexion est publique et non authentifiée ; l'API de statut nécessite une authentification et ferait échouer chaque sonde.
  • service_type = "LoadBalancer" et reserve_static_ip = true sont les valeurs par défaut — public par défaut. Passez à service_type = "ClusterIP" et reserve_static_ip = false pour un déploiement interne uniquement, accessible via kubectl port-forward (utile lorsque le quota d'IP statiques du projet est serré).

2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que vous avez exécuté gcloud container clusters get-credentials <cluster> --region <region> --project <project> et que PROJECT, REGION et NAMESPACE sont définis. L'espace de noms et les autres identifiants sont indiqués dans les sorties du déploiement.

A. GKE Autopilot — la charge de travail NetBox​

Les pods NetBox sont planifiés sur Autopilot, qui facture le CPU/la mémoire que les pods demandent effectivement. Le Horizontal Pod Autoscaling dimensionne le déploiement entre les nombres minimal et maximal de réplicas.

  • Console : Kubernetes Engine → Workloads → sélectionnez la charge de travail NetBox pour voir les pods, les révisions et les événements. Kubernetes Engine → Services & Ingress affiche l'IP externe.
  • CLI :
    kubectl get pods,svc,hpa -n "$NAMESPACE"
    kubectl logs -n "$NAMESPACE" deploy/<service-name> --tail=100
    kubectl describe hpa -n "$NAMESPACE" # current vs target utilisation

Consultez App_GKE pour la gestion d'Autopilot, de la mise à l'échelle et du type de charge de travail (Deployment ou StatefulSet).

B. Cloud SQL for PostgreSQL 15​

NetBox stocke toutes les données d'inventaire et d'IPAM (équipements, baies, adresses IP, préfixes, VLAN, circuits, utilisateurs) dans une instance gérée Cloud SQL for PostgreSQL 15. Les pods s'y connectent de manière privée via le sidecar Cloud SQL Auth Proxy sur un socket Unix (exposé au conteneur en tant que boucle locale 127.0.0.1) ; aucune IP publique n'est exposée. Au premier déploiement, un Job d'initialisation crée la base de données et l'utilisateur de l'application.

  • Console : SQL → sélectionnez l'instance pour voir les connexions, les sauvegardes, les flags et les métriques.
  • CLI :
    gcloud sql instances list --project "$PROJECT"
    gcloud sql instances describe <instance-name> --project "$PROJECT"
    gcloud sql connect <instance-name> --user=<db-user> --database=<db-name> --project "$PROJECT"

Le nom de l'instance, le nom de la base de données, l'utilisateur et le secret Secret Manager contenant le mot de passe figurent tous dans les sorties. Pour le modèle de connexion, les sauvegardes automatiques et la rotation des mots de passe, consultez App_GKE.

C. Cloud Storage (stockage des médias GCS Fuse)​

Un bucket media dédié est provisionné automatiquement et monté via le pilote CSI GCS Fuse sur /etc/netbox/media — le véritable MEDIA_ROOT de NetBox — pour les images d'équipements/de baies téléversées et les pièces jointes. Le montage est fixé à uid=0/gid=0 pour correspondre à l'utilisateur root du conteneur ; sans cela, la propriété par défaut du montage du pilote CSI de GKE bloque les écritures.

  • Console : Cloud Storage → Buckets.
  • CLI :
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<media-bucket>/ # bucket name is in the Outputs
    # Verify a real upload landed in GCS (not just the pod's local filesystem):
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- ls -la /etc/netbox/media

Consultez App_GKE pour les options CMEK et le réglage des montages GCS Fuse.

D. Redis (file de tâches et cache)​

Redis est obligatoire (enable_redis = true par défaut). Lorsque redis_host est laissé vide et que enable_nfs vaut true, l'IP de la VM du serveur NFS est utilisée comme point de terminaison Redis. NetBox répartit son usage entre deux bases logiques — REDIS_DATABASE=0 pour la file de tâches RQ, REDIS_CACHE_DATABASE=1 pour le cache.

  • Console : Memorystore → Redis (si vous utilisez une instance gérée).
  • CLI :
    redis-cli -h <redis-host> ping
    redis-cli -h <redis-host> -n 0 llen rq:queue:default # inspect the RQ default queue depth
    # Confirm the resolved Redis host injected into the running pod:
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- env | grep REDIS_

E. Secret Manager​

Deux secrets cryptographiques sont générés automatiquement et stockés dans Secret Manager : SECRET_KEY (secret cryptographique Django utilisé pour les sessions, la protection CSRF et les cookies signés) et SUPERUSER_PASSWORD (le mot de passe du compte administrateur initial). Le mot de passe de la base de données est géré séparément par le socle.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"

Le nom du secret du mot de passe de la base de données figure dans les sorties. Consultez App_GKE pour l'intégration Secret Store CSI et la rotation.

F. Réseau et entrée​

Par défaut, la charge de travail est exposée via une IP Cloud Load Balancing externe. Un domaine personnalisé avec un certificat géré par Google peut être activé, et une IP statique peut être réservée afin que l'adresse survive aux redéploiements. Pour un déploiement interne uniquement (par exemple lorsque le quota d'IP statiques est contraint), passez à service_type = "ClusterIP" et reserve_static_ip = false, puis accédez au service avec kubectl port-forward.

  • Console : Network services → Load balancing ; VPC network → IP addresses.
  • CLI :
    kubectl get svc,ingress -n "$NAMESPACE"
    gcloud compute addresses list --project "$PROJECT"
    # Internal-only access:
    kubectl port-forward -n "$NAMESPACE" svc/<service-name> 18080:8080

Consultez App_GKE pour les domaines personnalisés, Cloud CDN et les détails sur l'IP statique.

G. Cloud Logging et Monitoring​

Les flux stdout/stderr des pods sont envoyés vers Cloud Logging ; les métriques de GKE et de Cloud SQL vers Cloud Monitoring. Des tests de disponibilité et des règles d'alerte facultatifs sont disponibles (les tests de disponibilité nécessitent un point de terminaison accessible publiquement).

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud logging read 'resource.type="k8s_container" AND resource.labels.namespace_name="'"$NAMESPACE"'"' \
    --project "$PROJECT" --limit 50

3. Comportement de l'application NetBox​

  • Configuration de la base de données au premier déploiement. Un Job d'initialisation exécute db-init.sh avec postgres:15-alpine. Il se connecte via le Cloud SQL Auth Proxy et crée de manière idempotente la base de données et l'utilisateur de l'application, puis accorde les privilèges. Le job peut être relancé sans risque.
  • Migrations de la base de données au démarrage. docker-entrypoint.sh true exécute de manière synchrone la séquence de premier démarrage propre à NetBox à chaque démarrage du conteneur — attente de la disponibilité de la base, migrate --no-input, nettoyage des contenttypes obsolètes, nettoyage des sessions et réindexation paresseuse de l'index de recherche — avant le démarrage du serveur web et du worker RQ.
  • L'amorçage du superutilisateur est idempotent. Le compte administrateur initial est créé à partir des variables d'environnement SUPERUSER_* au premier démarrage ; la création est ignorée — sans erreur — si un utilisateur portant ce nom existe déjà.
  • Les téléversements de médias sont persistés dans le véritable MEDIA_ROOT — et c'est là que kubectl exec a prouvé son utilité. Le MEDIA_ROOT réel de NetBox est /etc/netbox/media (confirmé via manage.py shell sur un pod en production), et c'est là qu'est monté le volume GCS Fuse media. Avant que ce problème ne soit tracé, les téléversements semblaient fonctionner sur les deux plateformes — un 201, et le fichier était même relisible immédiatement via l'application — mais gcloud storage ls sur le bucket sous-jacent affichait zéro objet, même plus de 50 minutes après le téléversement. Un test de contrôle a écarté la latence d'écriture de gcsfuse et la contention entre plusieurs workers. C'est l'obtention d'un véritable accès shell dans le pod en cours d'exécution (kubectl exec ... manage.py shell pour afficher le paramètre MEDIA_ROOT résolu par NetBox lui-même) qui a réellement permis de résoudre le problème : le module montait le bucket GCS sur un chemin différent, plausible en apparence (/opt/netbox/netbox/media), de celui dans lequel le configuration.py de NetBox écrit réellement. Chaque téléversement atterrissait silencieusement sur le système de fichiers local éphémère du pod — relisible immédiatement car le lecteur et l'écrivain partageaient le même disque local, mais jamais durable, et perdu au redémarrage suivant. Corrigé en rectifiant le chemin de montage ; revérifié en conditions réelles avec gcloud storage ls affichant le fichier de test téléversé avec la bonne taille en octets, le bon type de contenu et un horodatage dans les 5 secondes. Ce n'est pas une lacune de la plateforme Cloud Run/GKE — le même bug existait sur les deux plateformes, et Cloud Run n'offre aucun accès shell permettant de le diagnostiquer comme le fait kubectl exec sur GKE ; si cela n'avait été testé que sur Cloud Run, cela aurait ressemblé exactement à une limitation de plateforme impossible à corriger.
    kubectl exec -n "$NAMESPACE" deploy/<service-name> -- \
    /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py shell \
    -c "from django.conf import settings; print(settings.MEDIA_ROOT)"
  • Le worker RQ traite les tâches d'arrière-plan. Les webhooks, scripts personnalisés, rapports et jobs planifiés/système sont exécutés par manage.py rqworker --with-scheduler, colocalisé dans le même pod que le serveur web. Contrairement à Cloud Run, GKE maintient en permanence au moins min_instance_count pods en cours d'exécution (pas de mise à l'échelle jusqu'à zéro) ; le worker est donc toujours actif par défaut.
  • Chemin de contrôle d'état. Les sondes de démarrage et de vivacité ciblent /login/ — la page de connexion publique et non authentifiée de NetBox. /api/status/ nécessite une authentification et ferait échouer chaque sonde.

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à NetBox ou notables pour lui sont listés ; toutes les autres entrées sont héritées d'App_GKE avec leur comportement et leurs valeurs par défaut standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)Projet Google Cloud cible.
regionus-central1Région de la charge de travail et des ressources régionales.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail recevant l'accès au projet et les alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namenetboxNom de base des ressources. Ne le modifiez pas après le premier déploiement.
display_nameNetBox - Network Documentation & IPAMNom lisible affiché dans la console.
application_versionlatestTag de version de l'image de conteneur, transmis à l'ARG de build APPLICATION_VERSION du Dockerfile.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit2000mCPU par pod ; partagé par le serveur web et le worker RQ.
memory_limit2GiMémoire par pod.
container_port8080Le serveur Granian (WSGI) de NetBox écoute sur le port 8080.
min_instance_count1Nombre minimal de réplicas ; GKE n'a pas de mise à l'échelle jusqu'à zéro.
max_instance_count3Nombre maximal de réplicas.
enable_vertical_pod_autoscalingfalseDésactive le HPA lorsqu'il est activé, pour éviter les conflits.
enable_pod_disruption_budget / pdb_min_availablefalse / 1Protection de la disponibilité pendant la maintenance des nœuds.
enable_cloudsql_volumetrueSidecar Cloud SQL Auth Proxy.
enable_image_mirroringtrueMet en miroir l'image construite dans Artifact Registry.

Groupe 5 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres supplémentaires non secrets. Ne définissez pas SECRET_KEY, SUPERUSER_PASSWORD ni DB_* ici.
secret_environment_variables{}Table variable d'environnement → nom du secret Secret Manager.
secret_propagation_delay30Secondes d'attente après la création d'un secret avant de poursuivre.
secret_rotation_period2592000sFréquence des notifications de rotation de Secret Manager.

Groupe 6 — Backend GKE et cluster​

VariableValeur par défautDescription
service_typeLoadBalancerMode d'exposition du Service Kubernetes. Utilisez ClusterIP pour un accès interne uniquement.
workload_typeDeployment (auto)Deployment (sans état, par défaut) ou StatefulSet.
session_affinityClientIPRoutage persistant pour les sessions de l'interface.
network_tags["nfsserver"]Obligatoire lorsque enable_nfs = true.
termination_grace_period_seconds60Secondes d'attente après SIGTERM avant SIGKILL.
enable_network_segmentationfalseCrée des ressources NetworkPolicy Kubernetes.
gke_cluster_name / namespace_namedécouverte automatiqueLaissez vide pour une découverte / génération automatique.
deployment_timeout1800Nombre maximal de secondes pendant lesquelles Terraform attend le déploiement.

Groupe 7 — StatefulSet​

VariableValeur par défautDescription
stateful_pvc_enablednullActive les modèles de PVC par pod. Non défini, la logique de résolution propre à App_GKE s'applique donc — l'état persistant de NetBox est Cloud SQL + GCS, aucun PVC n'est donc nécessaire.
stateful_pvc_size / stateful_pvc_mount_path / stateful_pvc_storage_class(valeurs par défaut)Taille du PVC, chemin de montage, StorageClass.
stateful_headless_servicenullNoms DNS de pods stables. Non défini, la logique de résolution propre à App_GKE s'applique donc ; n'a de sens qu'avec un StatefulSet.
stateful_pod_management_policynull (effectif : OrderedReady)OrderedReady ou Parallel.
stateful_update_strategynull (effectif : RollingUpdate)RollingUpdate ou OnDelete.

Groupe 8 — Scripts SQL personnalisés​

enable_custom_sql_scripts, custom_sql_scripts_bucket, custom_sql_scripts_path, custom_sql_scripts_use_root — exécutent du SQL depuis un bucket GCS après le provisionnement. Voir App_GKE.

Groupe 11 — Jobs et services​

VariableValeur par défautDescription
initialization_jobs[]Laissez vide pour utiliser le job db-init intégré.
cron_jobs[]CronJobs Kubernetes planifiés.
additional_services[]Services Kubernetes supplémentaires déployés aux côtés de NetBox.

Groupe 12 — CI/CD et intégration GitHub​

Intégration Cloud Build / Cloud Deploy standard d'App_GKE — voir App_GKE. Entrées principales : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy.

Groupe 13 — Système de fichiers (NFS)​

VariableValeur par défautDescription
enable_nfstrueProvisionne Filestore ; utilisé comme hôte Redis lorsque redis_host est vide.
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.
nfs_volume_namenfs-data-volumeNom du volume Kubernetes pour le montage NFS.

Groupe 14 — Cloud Storage et Artifact Registry​

VariableValeur par défautDescription
create_cloud_storagetrueCrée des buckets GCS supplémentaires en plus du bucket de médias provisionné automatiquement.
storage_buckets[]Buckets supplémentaires à provisionner.
gcs_volumes[]Montages GCS Fuse CSI. Lorsqu'il est vide, un volume de médias par défaut est monté automatiquement sur /etc/netbox/media avec des options explicites uid=0/gid=0 — déterminantes sur GKE, contrairement à Cloud Run.
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.
max_images_to_retain / delete_untagged_images / image_retention_days7 / true / 30Politique de nettoyage d'Artifact Registry.

Groupe 15 — Paramètres de l'application NetBox​

VariableValeur par défautDescription
time_zoneUTCFuseau horaire des horodatages et des tâches planifiées de NetBox.
admin_useradminNom d'utilisateur du superutilisateur créé automatiquement. La création est idempotente.
admin_emailadmin@example.comAdresse e-mail du superutilisateur créé automatiquement.

Groupe 16 — Backend de base de données​

VariableValeur par défautDescription
db_namenetboxNom de la base de données PostgreSQL. Immuable après le premier déploiement.
db_usernetboxUtilisateur de la base de données de l'application.
database_password_length32Longueur du mot de passe généré (16–64).
enable_auto_password_rotation / rotation_propagation_delay_secdésactivé / 90Rotation du mot de passe de la base de données sans interruption de service.
enable_mysql_plugins / mysql_pluginsfalse / []Sans objet — NetBox utilise PostgreSQL.

Groupe 17 — Sauvegarde et maintenance​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron de sauvegarde automatique (UTC).
backup_retention_days7Durée de conservation ; portez-la à 30–90 pour la production/la conformité.
enable_backup_import / backup_source / backup_uri / backup_formatoptions de restaurationRestaure à partir d'une sauvegarde lors du déploiement.

Groupe 19 — Domaine personnalisé, IP statique et réseau​

VariableValeur par défautDescription
enable_custom_domaintrueRoutage Gateway API + certificat SSL géré pour les noms d'hôte personnalisés.
application_domains[]Noms d'hôte à servir.
reserve_static_iptrueIP externe stable d'un redéploiement à l'autre. Définissez false (avec service_type = "ClusterIP") pour un déploiement interne uniquement, sans IP externe.
static_ip_name""Laissez vide pour une génération automatique.

Groupe 20 — Identity-Aware Proxy (IAP)​

VariableValeur par défautDescription
enable_iapfalseExige une connexion Google devant NetBox. Nécessite enable_custom_domain = true.
iap_authorized_users / iap_authorized_groups[]Qui peut accéder.
iap_oauth_client_id / iap_oauth_client_secret""Obligatoires lorsque IAP est activé (sensibles).

Groupe 21 — Cloud Armor et cache Redis​

VariableValeur par défautDescription
enable_cloud_armorfalseAssocie une règle Cloud Armor (WAF) au backend de l'Ingress.
admin_ip_ranges[]CIDR autorisés pour l'accès privilégié.
cloud_armor_policy_namedefault-waf-policyNom de la règle.
enable_cdnfalseActive Cloud CDN sur le backend de l'Ingress GKE.
enable_redistrueObligatoire. Sert de support à la file de tâches RQ et à la couche de cache de NetBox.
redis_host""Point de terminaison Redis. Laissez vide pour utiliser l'IP du serveur NFS (nécessite enable_nfs = true).
redis_port6379Port Redis.
redis_auth""Mot de passe d'authentification Redis facultatif (sensible).

Groupe 22 — VPC Service Controls et journalisation d'audit​

VariableValeur par défautDescription
enable_vpc_scfalseImpose un périmètre VPC-SC (nécessite organization_id).
vpc_cidr_ranges / vpc_sc_dry_run(défini)CIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseJournaux Cloud Audit Logs détaillés.

Observabilité et état (propres à NetBox, remplaçant les sondes génériques d'App_GKE)​

VariableValeur par défautDescription
startup_probeHTTP /login/, délai de 60s, seuil d'échec de 60Sonde de démarrage propre à NetBox.
liveness_probeHTTP /login/, fenêtre d'échec de 30sSonde de vivacité propre à NetBox.
uptime_check_config(défini)Test de disponibilité Cloud Monitoring facultatif — n'a de sens que lorsque le service est accessible publiquement.
alert_policies[]Règles d'alerte facultatives sur les métriques.

5. Sorties​

Ces valeurs sont renvoyées lors d'un déploiement réussi et constituent le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du Service Kubernetes.
namespaceEspace de noms dans lequel s'exécute la charge de travail.
service_cluster_ipClusterIP interne au cluster.
service_external_ipIP externe du LoadBalancer (lorsqu'une IP statique est réservée).
database_instance_nameNom de l'instance Cloud SQL.
database_name / database_userNom / utilisateur de la base de données de l'application.
database_password_secretSecret Secret Manager contenant le mot de passe de la base de données.
database_host / database_portPoint de terminaison de la base (127.0.0.1 via l'Auth Proxy) / port.
storage_bucketsBuckets Cloud Storage créés.
network_name / network_exists / regionsRéseau VPC, présence, régions disponibles.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channelsÉtat de la surveillance et canaux.
initialization_jobs / db_import_jobNoms des jobs de configuration et d'import (facultatif).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / cicd_configurationÉtat et détails de la CI/CD (dépôt, déclencheur, registre).
github_repository_url / github_repository_owner / github_repository_nameDétails GitHub de la CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
kubernetes_readyIndique si le cluster/la charge de travail est prêt.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation héritée au moment du plan. Ce module fait passer sa configuration par le moteur du socle App_GKE, qui valide les valeurs et leurs combinaisons au moment du plan — un réplica en lecture sans son instance principale, IAP sans identité autorisée, un redis_port/backup_retention_days hors plage, des valeurs quota_memory_* données sous forme d'entiers nus. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'application ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
Chemin de montage gcs_volumes (défini automatiquement sur /etc/netbox/media)Ne jamais le remplacer par un autre chemin sans avoir confirmé le véritable MEDIA_ROOT de NetBoxCritiqueUn mauvais chemin de montage laisse les téléversements sur le système de fichiers éphémère du pod — relisibles immédiatement, mais silencieusement perdus à chaque redémarrage. Confirmé et corrigé sur ce module précis.
uid/gid du montage GCS Fuse (définis automatiquement à 0/0)Faire correspondre à l'UID d'exécution réel du conteneurCritiqueSur GKE (contrairement à Cloud Run), un montage non fixé appartient par défaut à root ; un processus non root obtiendrait EACCES à chaque écriture. Le conteneur de NetBox s'exécute déjà en root ; cette fixation est donc appliquée par précaution.
SECRET_KEY (généré automatiquement)Ne jamais le renouveler après le premier démarrageCritiqueInvalide toutes les sessions actives et les cookies signés ; NetBox impose également une longueur minimale de 50 caractères.
db_name / db_userÀ définir une seule foisCritiqueImmuables après le premier déploiement ; les renommer recrée la base/l'utilisateur et détruit toutes les données.
enable_backup_importfalse sauf pour une restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'import.
enable_redistrue (obligatoire)CritiqueLe système de tâches d'arrière-plan et la couche de cache de NetBox ne fonctionnent pas sans Redis.
redis_host"" (NFS) ou expliciteÉlevéLorsque Redis est activé mais NFS désactivé et qu'aucun hôte n'est défini, le traitement en arrière-plan ne s'exécute jamais, sans signalement.
REDIS_DATABASE / REDIS_CACHE_DATABASELes garder distincts (0 / 1)ÉlevéPartager une même base Redis logique risque de faire perdre des tâches d'arrière-plan en file lors d'un vidage du cache.
memory_limit2GiÉlevéDes valeurs inférieures à 1Gi risquent des arrêts pour OOM, surtout avec le worker RQ colocalisé dans le même pod.
min_instance_count1ÉlevéGKE exige un minimum ≥ 1 ; le maintenir à 1 garantit que NetBox et le worker RQ sont toujours disponibles.
enable_cloudsql_volumetrueÉlevéLe sidecar Auth Proxy est nécessaire pour la connectivité PostgreSQL.
service_type / reserve_static_ipPublic par défaut ; ClusterIP/false pour un accès interne uniquementMoyenPasser en interne uniquement échange l'accessibilité publique contre une moindre consommation du quota d'IP statiques — vérifiez ce qui est réellement nécessaire avant le déploiement.
session_affinityClientIPMoyenSans persistance, les sessions d'interface en cours peuvent être routées vers un autre pod en pleine requête.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour une conservation conforme.
enable_pod_disruption_budgettrue en productionMoyenDésactivé par défaut ; sans lui, GKE peut évincer tous les pods simultanément pendant la maintenance des nœuds.

Pour le comportement du socle évoqué tout au long de ce guide — IAM et Workload Identity, autoscaling, ingress et certificats, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et mise en miroir des images — consultez App_GKE. La configuration applicative propre à NetBox partagée avec la variante Cloud Run est décrite dans Netbox_Common.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.