Skip to content

[Spectrum] Document IP Access Rules blocking health checks - #32137

Merged
stechedo merged 3 commits into
cloudflare:productionfrom
stechedo:spectrum-ip-access-health-checks
Oct 15, 2026
Merged

stechedo merged 3 commits into
cloudflare:productionfrom
stechedo:spectrum-ip-access-health-checks

Conversation

@stechedo

Copy link
Copy Markdown
Collaborator

Summary

Split out of #30683 at the reviewer's request — see this comment:

Could we just hold the IP Access Rules + health checks section? I need a bit more time to verify the mechanism, but I don't want to block everything else.

Changes

  • spectrum/reference/troubleshooting.mdx — New "Health checks fail when IP Access Rules are enabled" section (symptoms/cause/solution) covering the allowlist-model blocking Cloudflare's health check probes.
  • spectrum/reference/configuration-options.mdx — Caution callout under IP Access rules warning about health check impact, plus a note that Custom Rules (WAF) do not apply to TCP/UDP Spectrum applications.
  • load-balancing/additional-options/spectrum.mdx — Matching caution callout in the Monitors step of the Spectrum load balancing setup guide.

Content area

Spectrum, Load Balancing

Split out from cloudflare#30683 per reviewer request to allow more time to
verify the allowlist/health-check mechanism.

- Add troubleshooting section for health checks failing when IP
  Access Rules use an allowlist model
- Add caution + note callouts in configuration-options.mdx
- Add caution callout in the Load Balancing Spectrum setup guide
@cloudflare-docs-bot

cloudflare-docs-bot Bot commented Jul 17, 2026 •

Copy link
Copy Markdown
Contributor

AI Review

✅ Reviewed 41c80ff · 0 findings · incremental

Commands
  • /review Run a review now.
  • /full-review Review the entire PR diff.
  • /disable-auto-review Stop automatic reviews.
  • /rebase Rebase against production.

@github-actions github-actions Bot added product:load-balancing Related to Load Balancing product product:spectrum Related to Spectrum product size/s labels Jul 17, 2026
stechedo added a commit to stechedo/cloudflare-docs that referenced this pull request Jul 17, 2026
…split health checks

Per review feedback on cloudflare#30683:

- Move the 'Health checks fail when IP Access Rules are enabled'
  section and related callouts to a separate PR (cloudflare#32137) so this PR
  isn't blocked while the mechanism is verified.
- Clarify that the DNS record conflict is specifically between a
  manually-created proxied record and a Spectrum application, not
  between Spectrum applications themselves. Multiple Spectrum
  applications (including a mix of HTTP/HTTPS and TCP/UDP) can share
  a hostname because Spectrum manages the DNS record for each.
- Align the double-proxy caution in configuration-options.mdx with
  the troubleshooting page: TCP applications surface a failed origin
  TLS handshake as 521/522, not error 525, which is HTTP/HTTPS-app
  specific.
stechedo added a commit to stechedo/cloudflare-docs that referenced this pull request Jul 17, 2026
…split health checks

Per review feedback on cloudflare#30683:

- Move the 'Health checks fail when IP Access Rules are enabled'
  section and related callouts to a separate PR (cloudflare#32137) so this PR
  isn't blocked while the mechanism is verified.
- Clarify that the DNS record conflict is specifically between a
  manually-created proxied record and a Spectrum application, not
  between Spectrum applications themselves. Multiple Spectrum
  applications (including a mix of HTTP/HTTPS and TCP/UDP) can share
  a hostname because Spectrum manages the DNS record for each.
- Align the double-proxy caution in configuration-options.mdx with
  the troubleshooting page: TCP applications surface a failed origin
  TLS handshake as 521/522, not error 525, which is HTTP/HTTPS-app
  specific.
stechedo added a commit to stechedo/cloudflare-docs that referenced this pull request Jul 20, 2026
…split health checks

Per review feedback on cloudflare#30683:

- Move the 'Health checks fail when IP Access Rules are enabled'
  section and related callouts to a separate PR (cloudflare#32137) so this PR
  isn't blocked while the mechanism is verified.
- Clarify that the DNS record conflict is specifically between a
  manually-created proxied record and a Spectrum application, not
  between Spectrum applications themselves. Multiple Spectrum
  applications (including a mix of HTTP/HTTPS and TCP/UDP) can share
  a hostname because Spectrum manages the DNS record for each.
- Align the double-proxy caution in configuration-options.mdx with
  the troubleshooting page: TCP applications surface a failed origin
  TLS handshake as 521/522, not error 525, which is HTTP/HTTPS-app
  specific.
steve-cloudflare pushed a commit that referenced this pull request Jul 20, 2026
* Add Spectrum troubleshooting page and improve docs for top support case drivers

Based on analysis of April 2026 Network SBR cases, add documentation
to address the top 3 case-generating Spectrum issues:

1. IP Access Rules + Health Checks interaction: Customers enable IP
   Access Rules on Spectrum apps, then Cloudflare health checks fail
   because probe IPs are blocked. Added warnings to configuration-options
   and load-balancing/spectrum pages.

2. Same hostname for WAF + Spectrum: Customers attempt to use the same
   hostname for HTTP (WAF) and TCP (Spectrum) on different ports. This
   is a platform limitation. Added new section to limitations page and
   cross-reference on DNS troubleshooting page.

3. Edge TLS / Protocol mismatch: Customers configure HTTP edge ports
   expecting HTTPS to origin. Spectrum does not upgrade protocols.
   Added warnings to Edge TLS Termination section.

Also:
- Created new /spectrum/reference/troubleshooting/ page with structured
  symptom/cause/solution sections for all three issues plus error 525
  and common status code patterns
- Added note to /spectrum/reference/logs/ clarifying that Spectrum
  status codes are distinct from HTTP status codes

* [Spectrum] Address docs bot style review feedback

Fix style guide violations flagged by cloudflare-docs-bot:
- Use 'turn on' instead of 'enable' for toggles
- Use bullet points for unordered causes, numbered list for sequential steps
- Remove -ing verb from heading ('Understanding common...' -> 'Common...')
- Replace 'the table below' with direct reference
- Replace 'etc.' with 'and similar'
- Monospace DNS record types (A, AAAA, CNAME)
- Add introductory sentence before status code table
- Convert two-item symptom list to prose
- Fix TLS mode guidance to specify Full/Full (Strict) instead of generic 'enabled'
- Fix broken cross-links to removed limitations.mdx anchors

* [Spectrum] Address remaining docs bot review feedback

- Reframe error 525 section around TLS handshake failures with
  Spectrum event log code 540, clarify HTTP 525 applies only to
  HTTP/HTTPS-type applications
- Update DNS records-with-same-name cross-link to point to the
  troubleshooting page (which documents the workaround) instead
  of the limitations page (which does not)
- Monospace status code examples (444, 499) in logs.mdx
- Update anchor in configuration-options.mdx to match renamed heading

* [Spectrum] Monospace status code 525 in troubleshooting and config-options

* [Spectrum] Fix incorrect status code 540 reference in TLS handshake section

Replace 540 (client/edge TLS failure) with origin-side error codes
520/521/522 which correctly describe edge-to-origin connection failures.
540 refers to the client-to-edge handshake per the Spectrum logs
reference, not edge-to-origin.

* [Spectrum] Clarify TLS failure symptoms by application type

Separate TCP and HTTP/HTTPS symptoms: Edge TLS Termination applies
to TCP apps (origin errors 521/522), while error 525 applies to
HTTP/HTTPS apps. Avoids conflating transport-level connection codes
with TLS handshake failures.

* [Spectrum] Clarify why TLS failures surface as 521/522 in event logs

Spectrum has no dedicated origin-side TLS handshake status code.
A failed TLS handshake at the origin is reported as an origin
connection failure (521/522). Added explanation and cross-link
to the Event logs reference.

* [Spectrum] Address review feedback: hostname clarification, 525 fix, split health checks

Per review feedback on #30683:

- Move the 'Health checks fail when IP Access Rules are enabled'
  section and related callouts to a separate PR (#32137) so this PR
  isn't blocked while the mechanism is verified.
- Clarify that the DNS record conflict is specifically between a
  manually-created proxied record and a Spectrum application, not
  between Spectrum applications themselves. Multiple Spectrum
  applications (including a mix of HTTP/HTTPS and TCP/UDP) can share
  a hostname because Spectrum manages the DNS record for each.
- Align the double-proxy caution in configuration-options.mdx with
  the troubleshooting page: TCP applications surface a failed origin
  TLS handshake as 521/522, not error 525, which is HTTP/HTTPS-app
  specific.
@msimoncf

Copy link
Copy Markdown

Suggested fixes for IP Access Rules + health checks content

The current troubleshooting section says: "consider configuring health checks to use a TCP check type... and manage your access control at the origin level instead." That appears to be technically misleading. IP Access Rules on a Spectrum application evaluate every incoming TCP connection based on source IP, so switching from HTTP to TCP health checks does not bypass the block — the probe's TCP connection is still rejected before the health-check protocol is negotiated.

  1. spectrum/reference/troubleshooting.mdx
    Replace the current "Health checks fail when IP Access Rules are enabled" section with:

Health checks fail when IP Access Rules are enabled

Applies to

This issue applies when a Spectrum application is the target of a health check:

  • A standalone Cloudflare Health Check is configured against the Spectrum application, or
  • A Load Balancer monitor uses the Spectrum application as an endpoint (the Spectrum app is the target of the Load Balancer).

This issue does not apply when the Spectrum application's origin is a Load Balancer hostname. In that architecture, the Load Balancer monitor probes the origin servers directly, not through the Spectrum application, so IP Access Rules on the Spectrum app do not affect the monitor.

Symptoms

  • Cloudflare Health Checks or Load Balancer monitors report the Spectrum endpoint as unhealthy.
  • Removing IP Access Rules from the Spectrum application causes health checks to succeed.
  • The Spectrum application works correctly for client traffic that is allowed by the IP Access Rules.

Cause

When you turn on IP Access Rules on a Spectrum application, all incoming connections are evaluated against your rules based on source IP — including connections from Cloudflare's own health check probes. If your rules use an allowlist model (allow specific IPs, block all others), Cloudflare's health check source IPs will be blocked.

Switching the health check from HTTP to TCP does not bypass IP Access Rules, because the rules evaluate the incoming connection before the health-check protocol is negotiated.

Solution

Add Cloudflare's IP ranges to your IP Access Rules allowlist. You can find the current list of Cloudflare IP addresses at cloudflare.com/ips.

If you need to restrict client access but cannot allowlist Cloudflare IPs on the Spectrum application, move access control to your origin instead of using IP Access Rules on the Spectrum app. If IP Access Rules remain enabled without allowing Cloudflare probe IPs, health checks will continue to fail.
2. load-balancing/additional-options/spectrum.mdx
Update the caution callout in the Monitors step to clarify the architecture context:
:::caution[IP Access Rules and health checks]
If your Spectrum application is used as a Load Balancer endpoint and has IP Access Rules enabled, Cloudflare's health check probes must be allowed by your rules. Otherwise, health checks will be blocked and all endpoints will be marked as unhealthy. To resolve this, add Cloudflare IP addresses to your IP Access Rules allowlist. Refer to Spectrum Troubleshooting for details.

This does not apply when the Spectrum application's origin is a Load Balancer hostname. In that architecture, the monitor probes the origin directly and is not affected by IP Access Rules on the Spectrum app.
:::
3. spectrum/reference/configuration-options.mdx
The caution callout here is fine as-is, but optionally add the same qualifier so the limitation is not overstated:
:::caution[Health checks and IP Access Rules]
When IP Access Rules are enabled with an allowlist model (allow specific IPs, block all others), health checks targeting the Spectrum application may be blocked, causing endpoints to appear unhealthy. This applies when the Spectrum application is the target of a Cloudflare Health Check or a Load Balancer monitor. To prevent this, add Cloudflare IP addresses to your allowlist. Refer to Spectrum Troubleshooting for details.
:::
The Custom Rules note immediately below this can stay unchanged.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Hey there, we've marked this pull request as stale because there's no recent activity on it. This label helps us identify PRs that might need updates (or to be closed out by our team if no longer relevant).

@github-actions github-actions Bot added the stale label Aug 4, 2026
@github-actions
github-actions Bot deleted the spectrum-ip-access-health-checks branch September 16, 2026 09:10
Per review feedback on this PR:

- Troubleshooting: add an 'Applies to' section scoping the issue to
  Spectrum apps targeted by a standalone Health Check or LB monitor
  (not apps whose origin is an LB hostname), clarify that switching
  HTTP to TCP health checks does not bypass IP Access Rules, and
  remove the misleading TCP-check-type alternative.
- Load Balancing setup guide: scope the caution callout to Spectrum
  apps used as LB endpoints and exclude origin-is-LB-hostname setups.
- Configuration options: reword the caution so the limitation is not
  overstated; Custom Rules note unchanged.
Resolve conflict in spectrum/reference/troubleshooting.mdx by keeping
both sides: the 'Health checks fail when IP Access Rules are enabled'
section from this PR (in its original position after the virtual
network origins content, matching the pre-split ordering) followed by
the case-driven sections added to production via cloudflare#30683 (DNS record
conflict, protocol mismatch, error 525, status codes).
@stechedo
stechedo enabled auto-merge October 15, 2026 18:01
@stechedo
stechedo added this pull request to the merge queue Oct 15, 2026
Merged via the queue into cloudflare:production with commit 2f255e3 Oct 15, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

product:load-balancing Related to Load Balancing product product:spectrum Related to Spectrum product size/s stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants