From eae346684f5d7093d55ee3785076eb08b6057e4b Mon Sep 17 00:00:00 2001 From: ilopez Date: Mon, 25 May 2026 09:46:35 -0500 Subject: [PATCH] fix(chart): InitContainer curl+REST API en lugar de bitnami/kubectl:1.30 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bitnami retiro los tags semanticos minor (1.30/1.29/etc.) de Docker Hub 2026-05; solo quedan latest + digests. El InitContainer fallaba con ImagePullBackOff en el smoke E2E DO (run 1511/1512 del tenant 91c93c9c060a48febb7874c87c1ce993). Cambio: - image: bitnami/kubectl:1.30 -> curlimages/curl:8.20.0 (Docker Official, tag estable). - comando: kubectl get secret -> curl REST API kubernetes.default.svc con SA token + CA cert montados en /var/run/secrets/kubernetes.io/serviceaccount. - Misma logica: 48 iteraciones x 5s = 240s busy-wait. - El Role/RoleBinding (role-db-secret-reader.yaml) ya da el permiso get secrets al SA — sin cambios RBAC necesarios. Co-Authored-By: Claude Opus 4.7 --- helm/APP_NAME/templates/job-alembic-upgrade.yaml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/helm/APP_NAME/templates/job-alembic-upgrade.yaml b/helm/APP_NAME/templates/job-alembic-upgrade.yaml index 1ceefdf..b8b3c54 100644 --- a/helm/APP_NAME/templates/job-alembic-upgrade.yaml +++ b/helm/APP_NAME/templates/job-alembic-upgrade.yaml @@ -39,7 +39,10 @@ spec: runAsUser: 1001 initContainers: - name: wait-for-secret - image: bitnami/kubectl:1.30 + # curl + REST API K8s con SA token. Evita dependencia de un binario + # kubectl con tags que cambian (bitnami/kubectl retiro los tags + # semanticos minor 2026-05). curlimages/curl es Docker Official. + image: curlimages/curl:8.20.0 command: - sh - -c @@ -48,13 +51,19 @@ spec: # Espera hasta que addon-provisioner publique el Secret tras # reconciliar el AddonClaim (hook weight -10). 48 x 5s = 240s. SECRET="{{ .Values.database.secretName }}" + TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) + CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt i=1 while [ "$i" -le 48 ]; do - if kubectl get secret "$SECRET" -n "$NAMESPACE" >/dev/null 2>&1; then + HTTP=$(curl -s -o /dev/null -w '%{http_code}' \ + --cacert "$CACERT" \ + -H "Authorization: Bearer $TOKEN" \ + "https://kubernetes.default.svc/api/v1/namespaces/$NAMESPACE/secrets/$SECRET") + if [ "$HTTP" = "200" ]; then echo "Secret $SECRET encontrado en intento $i" exit 0 fi - echo "[$i/48] Secret $SECRET aun no publicado, esperando 5s..." + echo "[$i/48] Secret $SECRET aun no publicado (HTTP=$HTTP), esperando 5s..." sleep 5 i=$((i + 1)) done