Skip to content

fix: stop HAProxy ingress controller reload loop from unstable log_target_list#52

Open
KlausNie wants to merge 1 commit into
mainfrom
fix/haproxy-log-target-reload-loop
Open

fix: stop HAProxy ingress controller reload loop from unstable log_target_list#52
KlausNie wants to merge 1 commit into
mainfrom
fix/haproxy-log-target-reload-loop

Conversation

@KlausNie

@KlausNie KlausNie commented Jul 12, 2026

Copy link
Copy Markdown
Member

Summary

Moves the HAProxy ingress controller's log configuration out of the Helm global-config-snippet and into the Global custom resource's log_target_list, across all three provider setup workflows (Azure, Ionos, OTC). The CR becomes the single source of truth for logging, which is the intended mechanism whenever cr-global is in use.

Status: hygiene change, no longer an active bug fix

Original motivation (obsolete): on controller 3.2.9, the dual-path config (snippet + CR without log_target_list) triggered a constant reload loop (Global config updated: LogTargetList every ~30s), which also degraded ingress allow-list enforcement. That reload bug was properly fixed upstream in controller 3.2.11 (haproxytech/kubernetes-ingress commit 4fdff2a, "prevent continuous reloads on default log config"). Since these workflows install the latest chart (no version pin), any new bootstrap gets a fixed controller regardless of this PR. The separate allow-list enforcement gap mentioned in the original description was root-caused independently and is tracked upstream in haproxytech/kubernetes-ingress#832.

Remaining value of this PR:

  1. Re-run protection — the equivalent change is already applied live on the apellis-analysis-pipeline cluster (2026-07-12). Without this PR, any re-run of k8s-deploy-base.yml silently reverts that cluster's Helm values back to the dual-path config.
  2. Config correctness — declaring log targets on the Global CR while cr-global is set avoids the documented pitfall where the CR silently overrides snippet/ConfigMap log settings (Access logs settings get overridden if using a Global Custom Resource haproxytech/kubernetes-ingress#633).

Reasonable to merge as tidy-up; equally reasonable to close if minimizing churn in this shared repo is preferred.

Test plan

  • YAML validated for all three edited files
  • Equivalent change applied live to apellis-analysis-pipeline (2026-07-12); logging to stdout confirmed working, no reload churn

…rget_list

Every provider's ingress-controller bootstrap set logging through two
conflicting paths: a global-config-snippet ("log stdout ...") and a
Global custom resource with no log_target_list declared. The
controller couldn't converge on a stable log-targets state and
reloaded HAProxy roughly every 30 seconds indefinitely, tearing down
and rebuilding every ingress's IP-allowlist ACL rule on each reload —
intermittently letting non-allowlisted IPs through during the gap.

Move the log target into the Global CR's log_target_list (the
supported mechanism) and drop the redundant snippet, so the
controller has one source of truth and stops reloading.
@KlausNie KlausNie self-assigned this Jul 12, 2026
@KlausNie KlausNie requested a review from acpoppe July 13, 2026 12:41
@acpoppe acpoppe force-pushed the main branch 4 times, most recently from 4592451 to a99740a Compare July 14, 2026 00:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant