Fix: Kaniko HTTPS probe timeout — add insecure-registry to internal Harbor pipelines #193
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#193
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
Discovered during incident #184 investigation. Second root cause — agent routing was fix 1 (#191, merged).
Repo
Cross-repo: 6 repos use internal Harbor with Kaniko.
Primary:
forgejo_admin/pal-e-platform(convention ownership).What Broke
Kaniko
build-and-pushsteps fail or suffer 90-second timeouts against Harbor's HTTP-only internal service. Two separate Kaniko code paths cause this:--insecure-registry. Fix:--skip-push-permission-check.--insecure-registry. Fix:--insecure+--insecure-registry.Both fixes are required.
insecure-registryalone (shipped in the first round of 6 PRs) does NOT work because the permission check still probes HTTPS.Validated Fix
Tested in a real Kaniko pod in the woodpecker namespace (2026-03-27):
--skip-push-permission-check— bypasses HTTPS permission probe entirely--insecure— accept HTTP for push--insecure-registry=harbor.harbor.svc.cluster.local— use HTTP directly for push/pullResult: Kaniko pushed to
http://harbor.harbor.svc.cluster.local/v2/...immediately. No 443 probe. Exit code 0.Repro Steps
registry: harbor.harbor.svc.cluster.localwithinsecure: trueExpected Behavior
Kaniko should connect to Harbor via HTTP immediately with no HTTPS probe or permission check delay.
Environment
woodpeckerci/plugin-kaniko:2.3.0harbor.harbor.svc.cluster.local:80(no port 443)Acceptance Criteria
extra_opts: "--skip-push-permission-check"in.woodpecker.yamlbuild-and-pushstep completes without HTTPS probe or permission check timeoutservice-onboarding-sopCI registry section updated to includeextra_optsguidanceFile Targets (cross-repo)
Repos to modify (add
extra_optssetting to build-and-push step):basketball-api/.woodpecker.yamlpal-e-docs/.woodpecker.yamlpal-e-app/.woodpecker.yamlwestside-app/.woodpecker.yamlwestside-contracts/.woodpecker.yamlpal-e-mail/.woodpecker.yamlRepos NOT to touch (use external FQDN with TLS):
mcd-tracker-api/.woodpecker.yamlmcd-tracker-app/.woodpecker.yamlminio-api/.woodpecker.yamlChange per repo
Related
project-pal-e-platformScope Review: NEEDS_REFINEMENT
Review note:
review-428-2026-03-26Ticket is well-scoped with one material gap:
westside-contracts/.woodpecker.yamlis a 6th affected repo usingharbor.harbor.svc.cluster.local+insecure: true(identical pattern) but is missing from File Targets and acceptance criteria.westside-contracts/.woodpecker.yamlto File Targets; update "5 repos" to "6 repos" throughoutservice-onboarding-sopalready documents internal vs external Harbor patterns; reference it or specify what's additionally neededharbor-core.harbor.svc.cluster.local, actual repos useharbor.harbor.svc.cluster.local— track separatelyRefinement Update
Per review (
review-428-2026-03-26):Fix 1: Missing repo
westside-contracts/.woodpecker.yamlalso usesharbor.harbor.svc.cluster.localwithinsecure: true. 6 affected repos, not 5:Fix 2: Convention note AC
Removed ambiguous "convention note" AC. The
service-onboarding-sopalready has a CI registry URL validation check — updating that SOP's registry guidance (addinsecure-registryto the template) is sufficient.Updated Acceptance Criteria
insecure-registry: harbor.harbor.svc.cluster.localbuild-and-pushstep completes without 90s HTTPS probe delayservice-onboarding-sopCI registry section updated to includeinsecure-registryguidanceDiscovered scope (tracked separately)
SOP hostname mismatch:
service-onboarding-sopsaysharbor-core.harbor.svc.cluster.localbut all repos useharbor.harbor.svc.cluster.local.Scope Review: READY
Review note:
review-428-2026-03-26(updated)Re-reviewed after refinement comment. Both concerns resolved:
westside-contracts/.woodpecker.yamlline 31 still hasregistry: harbor.harbor.svc.cluster.local+insecure: true, noinsecure-registry.service-onboarding-sopCI registry section updated to includeinsecure-registryguidance." References existing SOP, testable.Discovered scope (SOP hostname mismatch) acknowledged for separate tracking.
VERDICT: READY — ticket can move to
next_up.Fix Update — insecure-registry alone is insufficient
Finding
The 6 PRs merged for
insecure-registrydon't fix the problem. The push permission check is a separate Kaniko code path that doesn't respect--insecure-registry. It still probes HTTPS on 443 (90s timeout) then HTTP on 80.Validated fix
Tested in a real Kaniko pod in the woodpecker namespace:
Result: Kaniko pushed to
http://harbor.harbor.svc.cluster.local/v2/...immediately. No 443 probe. Exit code 0.Updated pipeline config needed (all 6 repos)
Updated acceptance criteria
extra_opts: "--skip-push-permission-check"build-and-pushstep completes without HTTPS probe or permission check timeoutScope Review: NEEDS_REFINEMENT
Review note:
review-428-2026-03-26(updated)Re-reviewed after Fix Update comment. The issue body is stale — it still documents
insecure-registryas the complete fix, but that approach failed. The validated fix (extra_opts: "--skip-push-permission-check") exists only in a comment, not the body. Agents read the body, not comments.Three blockers before READY:
Reopen this issue — closed prematurely; the 6 merged
insecure-registryPRs do not resolve the push permission check timeout. Verified: all 6 repos haveinsecure-registrybut zero haveextra_opts.Update issue body — incorporate Fix Update comment into body sections:
insecure-registry, push =--skip-push-permission-check)Update SOP AC —
service-onboarding-sopCI registry template must includeextra_optsguidance alongsideinsecure-registryFile target verification (all 6 repos grep-confirmed):
basketball-api/.woodpecker.yamlline 46 — hasinsecure-registry, missingextra_optspal-e-docs/.woodpecker.yamlline 71 — hasinsecure-registry, missingextra_optspal-e-app/.woodpecker.yamlline 63 — hasinsecure-registry, missingextra_optswestside-app/.woodpecker.yamlline 36 — hasinsecure-registry, missingextra_optswestside-contracts/.woodpecker.yamlline 33 — hasinsecure-registry, missingextra_optspal-e-mail/.woodpecker.yamlline 44 — hasinsecure-registry, missingextra_opts3 external-registry repos (mcd-tracker-api, mcd-tracker-app, minio-api) confirmed unaffected — use
harbor.tail5b443a.ts.netwith TLS.VERDICT: NEEDS_REFINEMENT — issue body must be updated to match the validated fix before an agent can execute it.
Scope Review: READY
Review note:
review-428-2026-03-26(updated)All three prior NEEDS_REFINEMENT actions resolved: issue reopened, body rewritten with validated fix (both Kaniko code paths documented, correct before/after diff with
extra_opts), SOP update AC present. All 6 internal-registry file targets verified in filesystem — each hasinsecure-registrymerged but missingextra_opts. 3 external-registry repos confirmed safe (TLS FQDN). All 4 acceptance criteria are agent-testable.VERDICT: READY — ticket is cleared for execution.
Note:
service-onboarding-sopCI registry row usesharbor-core.harbor.svc.cluster.localbut repos useharbor.harbor.svc.cluster.local— pre-existing hostname mismatch, out of scope for this ticket.