Fix: pal-e-docs-app pod ImagePullBackOff from Harbor #234
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/pal-e-platform#234
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Bug
Lineage
Repo
forgejo_admin/pal-e-services(Harbor config at k3s.tfvars lines 137-144) +forgejo_admin/pal-e-deployments(kustomize overlay)What Broke
pal-e-docs-app pod is in ImagePullBackOff. Image
harbor.tail5b443a.ts.net/pal-e-docs-app/app:e23a1d8c...cannot be pulled from Harbor.Repro Steps
kubectl get pods -n pal-e-docs-app— shows ImagePullBackOffkubectl describe pod -n pal-e-docs-app— shows Back-off pulling imageExpected Behavior
Pod should pull image from Harbor and reach Running state. Site should respond at pal-e-docs-app.tail5b443a.ts.net.
Environment
Context
Likely root cause: the repo was renamed from pal-e-app to pal-e-docs-app. The Harbor project may still be under the old name, or the image may never have been built under the new name. The kustomize overlay and Woodpecker pipeline need to reference the correct Harbor project.
Harbor config is managed by pal-e-services terraform, NOT pal-e-platform.
Investigation Steps
pal-e-docs-appproject:curl Harbor APIpal-e-app: sameAcceptance Criteria
curl -sI https://pal-e-docs-app.tail5b443a.ts.netreturns 200Test Expectations
kubectl get pods -n pal-e-docs-app— Running 1/1Constraints
Checklist
Related
forgejo_admin/pal-e-platform#184— Harbor connectivity incidentScope Review: NEEDS_REFINEMENT
Review note:
review-613-2026-03-28Ticket has good operational context and testable AC, but repo placement is wrong and issue type is misclassified.
pal-e-platform (Harbor config)but pal-e-platform has zero references to pal-e-docs-app. Harbor config lives inpal-e-services/terraform/k3s.tfvars(lines 137-144). Correct repo isforgejo_admin/pal-e-services.### Type: Featurebut board item labels saytype:bug. ImagePullBackOff is broken behavior — should be Bug.Investigation Complete
Findings
pal-e-docs-apppal-e-app(old name)harbor-credsin nspal-e-docs-app/appimage_repo)Root Cause
The
.woodpecker.yamlclone step usedwoodpeckerci/plugin-gitwhich starts cloning immediately on pod start. There is a race condition where k3s iptables rules for ClusterIP services are not yet propagated to newly scheduled pods.curl/libcurl(used by git) gets "Connection refused" whilewget(different socket impl) succeeds from the same pod at the same time. Addingsleep 2before git commands resolves it -- this is the pattern already used by every other working repo.Fix
PR submitted on pal-e-docs-app: forgejo_admin/pal-e-docs-app#93
After merge, the pipeline should:
pal-e-docs-app/appInvestigation Complete
Root cause: NOT an infrastructure problem. The pal-e-docs-app CI pipeline has never successfully built an image. All 110 pipelines failed at
check/lintbefore reaching the Kaniko build step.Findings
pal-e-docs-appexists but has zero imagese23a1d8c...) was set manually — no image was ever pushed for itFix Path
Single repo fix in
forgejo_admin/pal-e-docs-app:anyon event params in board page)No changes needed in pal-e-platform, pal-e-services, or pal-e-deployments.
Dispatching fix agent.
Update: Harbor 401 resolved
Root cause: Stale Woodpecker CI secrets. Robot account
robot$pal-e-docs-app+pal-e-docs-app-ciwas created by terraform but Woodpecker secrets contained old credentials.Fix applied:
harbor_usernameandharbor_passwordsecrets on pal-e-docs-app repo in Woodpecker["push", "pull_request", "tag", "manual", "cron"]Status: Pipeline triggered to validate. Waiting for build-and-push step to confirm Harbor auth works.
Systemic gap discovered: Woodpecker secrets are manual (SERVICE_ONBOARDING.md Step 4) while robot accounts are terraform-managed. Any
tofu applythat recreates robots stales all downstream Woodpecker secrets. Tracked separately.