Public visé : équipes plateforme qui exécutent Helm 3 contre des registries OCI (Harbor, ECR, ACR, Artifact Registry, distribution) depuis des runners Mac distants avec liaison WAN ou politique transfrontalière. Ce que vous emportez : une nomenclature d’erreurs, un tableau de paramètres, des commandes copiables et des repères pour la rotation des jetons. Pour le contexte images Docker et caches, croisez avec le blog technique, la matrice GHCR & registry privé, le guide Nix flake & substituters, et l’accueil MacPull — pages publiques sans connexion obligatoire.

Scénarios et risques : types d’échec des tirages Helm / OCI en CI

Contrairement à l’ancien modèle helm repo add + index YAML, le chemin oci:// suit le protocole OCI : résolution de tag ou digest, téléchargement du manifeste, puis des blobs du chart (et parfois de la provenance). Un pipeline transfrontalier casse donc selon quelques familles stables ; les mélanger dans un seul « retry aveugle » empile des correctifs incompatibles (par exemple augmenter la concurrence pendant une tempête de 429).

Authentification et dérive de jeton. Le HTTP 401 indique souvent un robot expiré, un PAT révoqué hors bande, ou un chart référencé dans un projet où le compte n’a pas le scope pull. Sur Mac partagé, un HELM_CONFIG_HOME persistant peut conserver un login valide « hier » et masquer une régression jusqu’à ce qu’un worker froid révèle l’erreur.

Débit et hotspots. Le HTTP 429 survient lorsque plusieurs jobs lancent helm pull ou helm upgrade --install vers le même frontal registry, ou lorsque des reprises automatiques ignorent Retry-After. Sans jitter, les pipelines se resynchronisent et aggravent la limitation.

TLS, inspection et noms. Les autorités internes, MITM d’entreprise ou enregistrements DNS qui ne correspondent pas au SAN du certificat produisent des erreurs x509 ou des coupures au milieu d’un blob. Mélanger IP et FQDN dans oci:// est une cause fréquente d’échecs intermittents.

Concurrence Helm / cluster. Des helm upgrade parallèles sur la même release, ou une tempête de résolutions de dépendances, peuvent saturer le cache local et les quotas API du plan de contrôle — ce qui ressemble à un registry défaillant alors que le goulot est côté cluster. Traitez le backoff registry et le throttle Kubernetes comme deux budgets distincts.

1
Manifeste contre blob : journalisez si l’échec survient à la résolution de tag ou pendant le transfert ; l’équipe réseau et l’équipe registry n’interviennent pas au même endroit.
2
Rafales transfrontalières : cadencez les branches de matrice pour ne pas épingle le même digest de chart dans la même fenêtre de cinq minutes sans cache chaud amont.
3
Disque APFS : le cache Helm grossit vite ; alignez-vous sur la même discipline d’espace libre que pour les couches Docker (voir FAQ concurrence de pulls & disque).

Matrice décisionnelle : install concurrent, --plain-http, authentification registry, retrait sur erreur

Le tableau ci-dessous est un point de départ pour Helm 3 sur Mac CI en 2026. Mesurez deux semaines le taux de 429, le p95 des helm pull et la part d’échecs avant de glisser vers une colonne plus agressive.

Profil de runner Opérations chart parallèles Politique --plain-http Auth registry & rotation Backoff HTTP 429 (s, + jitter) 401 / 5xx / connect (s, plafond)
Prudent (pool partagé, WAN fragile) 2 helm pull / install par hôte ; mutex CI par release Désactivé en prod ; lab uniquement avec exception signée Jeton robot 30–60 j ; re-login chaque job ; pas de secret unique multi-produits Respecter Retry-After ; sinon 4 → 8 → 16 → 32 → 64 (max 120) 1 → 3 → 9 → 27 → 60 (max 300)
Équilibré (egress stable, NVMe) 3–4 pulls ; bornez les branches de matrice (resource_group, étiquettes de pool) Désactivé ; importez plutôt une CA privée Rotation à 50 % du TTL ; jetons lecture vs écriture ; contrôle hebdo 2 → 4 → 8 → 16 → 32 (max 90) 1 → 2 → 6 → 18 → 45 (max 180)
Agressif (Mac dédié, registry même région) Jusqu’à 6 pulls si API serveur et files disque restent plates Désactivé ; si HTTP imposé (air gap), segmentez le réseau Jetons courts 12–24 h + rafraîchissement planifié ; OIDC si disponible 1 → 2 → 4 → 8 → 16 (max 60) — surtout derrière votre cache 0,5 → 1 → 3 → 9 (max 60)

Note de politique : --plain-http désactive la confidentialité et l’intégrité TLS vers le registry. Réservez-le à un segment déjà isolé par votre équipe sécurité. Pour le trafic transfrontalier, préférez TLS avec CA correctement distribuée plutôt que d’ouvrir HTTP.

Lorsque le chart déclenche en plus des pulls d’images, croisez cette matrice avec les réglages couches du guide GHCR & registry privé pour unifier backoff images et charts.

Liste exécutable : helm registry login, helm pull oci://, isolation et délais

Remplacez les placeholders en MAJUSCULES. Exécutez sous le même utilisateur que la CI pour que HELM_CONFIG_HOME reflète la production.

  1. Isoler la configuration par job (recommandé sur Mac partagés) :
export HELM_CONFIG_HOME="${WORKSPACE}/.helm-config"
export HELM_CACHE_HOME="${WORKSPACE}/.helm-cache"
mkdir -p "$HELM_CONFIG_HOME" "$HELM_CACHE_HOME"
  1. S’authentifier au registry OCI (non interactif) :
echo "${REGISTRY_TOKEN}" | helm registry login "${REGISTRY_HOST}" \
  --username "${REGISTRY_USER}" --password-stdin
  1. Tirer un chart avec version figée (échec rapide si le tag bouge) :
helm pull "oci://${REGISTRY_HOST}/${CHART_PATH}" \
  --version "${CHART_VERSION}" \
  --destination "${WORKSPACE}/charts"
  1. Installer depuis l’OCI avec attentes explicites (ajustez au SLA cluster) :
helm upgrade --install "${RELEASE_NAME}" "oci://${REGISTRY_HOST}/${CHART_PATH}" \
  --version "${CHART_VERSION}" --namespace "${NAMESPACE}" --create-namespace \
  --wait --timeout 20m --atomic

Registry HTTP de labo : n’ajoutez --plain-http à helm pull / helm install que sur hôtes approuvés. Ne croisez jamais ces identifiants avec des namespaces de production.

Esquisse de retry (bash) : entourez helm pull d’une boucle ; appliquez l’échelon 429 de la matrice ; parsez Retry-After lorsque le registry l’expose. Ajoutez du jitter (par ex. $((RANDOM % 5)) secondes) pour éviter que N jobs ne se réalignent à la même seconde.

Variables d’environnement utiles : HELM_CONFIG_HOME, HELM_CACHE_HOME, et si besoin SSL_CERT_FILE pointant vers une PEM de CA interne livrée avec le runner. Gardez HTTPS_PROXY / NO_PROXY cohérents entre helm registry login et helm pull pour éviter le scénario « une fois OK, ensuite 401 » derrière proxy d’entreprise.

Exemple minimal de timeouts et concurrence dans le shell du job (à adapter à votre orchestrateur) :

export HELM_CACHE_HOME="${WORKSPACE}/.helm-cache"
export HELM_CONFIG_HOME="${WORKSPACE}/.helm-config"
export CURL_CONNECT_TIMEOUT="15"
export CURL_MAX_TIME="120"
# Si plusieurs sous-jobs helm sur un même hôte, exportez un verrou ou une variable de sémaphore maison, ex. :
# export HELM_CI_MAX_PARALLEL="${HELM_CI_MAX_PARALLEL:-2}"

FAQ : HTTP 429, HTTP 401, erreurs de certificat

429 Too Many Requests. Vérifiez si la limite vient du registry, d’un CDN amont ou de votre NAT de sortie. Réduisez les jobs Helm parallèles par hôte, respectez les en-têtes de backoff, espacez les branches de matrice et envisagez un cache pull-through régional si la même version de chart est tirée des dizaines de fois par heure.

401 Unauthorized. Contrôlez le périmètre du robot, la visibilité du projet chart et la cohérence entre l’hôte utilisé dans helm registry login et la référence oci://. Sur runners partagés, effacez ou isolez HELM_CONFIG_HOME par job ou injectez systématiquement des identifiants neufs.

Erreurs de certificat ou poignée TLS. Importez la CA du registry dans le magasin de confiance utilisé par Helm, alignez le nom DNS sur les SAN, testez avec openssl s_client -connect hôte:443 -servername hôte depuis le Mac. Évitez --insecure-skip-tls-verify hors environnements jetables.

Encore bloqué ? Croisez avec la FAQ stabilité des pulls pour les motifs génériques de retry, et le guide accélération Git & Docker pull lorsque le chart déclenche de grosses images à l’installation.

Synthèse : choisir un nœud pour le tirage transfrontalier, puis acheter de la capacité prévisible

Une CI Helm OCI efficace sur Mac distant repose sur trois leviers : auth par job avec rotation avant que des identifiants partagés ne pourrissent, une ligne de matrice alignée sur votre WAN (pas sur votre poste portable), et des reprises bornées qui honorent la sémantique 429 au lieu de l’amplifier. Ajoutez des plafonds sur disque et install parallèles pour que la croissance du cache Helm et les quotas API ne simulent pas une panne registry.

Choisir un nœud MacPull pour des pulls transfrontaliers : privilégiez une capacité Apple Silicon dédiée dans la région la plus proche de votre registry ou miroir afin que TLS et caches chauds amortissent la latence ; n’utilisez le pool partagé qu’après avoir imposé un HELM_CONFIG_HOME par job et la ligne « Prudent » du tableau. Comparez les offres publiquement, puis augmentez le parc lorsque le p95 des pulls cesse de s’améliorer malgré le backoff.

Consultez les pages tarifs et achat, le centre d’aide, le blog technique et l’accueil — accessibles sans connexion.

CI Mac distant pensée pour les pipelines lourds en registry

Nœuds type Mac mini, accès SSH/VNC, marge pour régler Helm et Docker ensemble. Parcourez tarifs, achat et guides sans compte.