Our Blogs

Introducing Caddy Consul Plugin

Turning Consul Into Your Ingress Brain: Introducing Caddy + Consul

Modern infrastructure has a persistent problem: service discovery and ingress rarely speak the same language. You end up stitching together tools like Fabio, Envoy, or custom glue just to get traffic routed correctly.

What if your ingress layer could directly understand your service registry?

That’s exactly what Caddy + Consul delivers.

A Smarter Ingress Layer

At its core, the plugin transforms Caddy into a dynamic, service-aware ingress controller, powered entirely by HashiCorp Consul.

Instead of static configs or periodic polling, it continuously watches Consul’s catalog and health data using blocking queries — meaning:

  • No manual config updates
  • No reloads
  • No lag between deploy and availability

Traffic routing becomes a real-time reflection of your infrastructure state.

Replace Fabio — Without Losing Compatibility

If you’ve used Fabio before, this will feel familiar — but more powerful.

  • Supports urlprefix- tags for drop-in migration
  • Maintains tag-driven routing semantics
  • Adds richer capabilities like weighted routing and path handling

You can migrate gradually, not rewrite everything overnight.

Unified HTTP and TCP/TLS Routing

Most ingress solutions split responsibilities. This doesn’t.

With one system, you get:

  • HTTP routing: host-based, path-based, wildcard domains
  • TCP/TLS routing: port-based, SNI-based, TLS passthrough
  • Layer 4 support via extensions like caddy-l4

This means one ingress layer for everything — web apps, APIs, and raw TCP services.

Health-Aware by Design

Routing isn’t just dynamic — it’s correct.

Only healthy services receive traffic, based on Consul’s health checks. That eliminates a whole class of failures where traffic hits dead or degraded instances.

Built for Consul Connect

If you’re using Consul Connect, the plugin integrates directly with sidecar proxies:

  • Honors service mesh intentions
  • Routes through secure sidecar paths
  • Works alongside your existing mesh model

This bridges the gap between service mesh and ingress, without duplicating complexity.

Zero-Restart Configuration

One of the standout features: no restarts required.

All routing updates are applied live via Caddy’s admin API. That means:

  • Instant propagation of new services
  • No downtime during deploys
  • No config reload race conditions

Conflict-Aware Routing

Dynamic systems can get messy — this one doesn’t.

  • Static config always wins
  • Duplicate routes resolve deterministically (“first seen wins”)

This gives you predictability without sacrificing flexibility.

Designed for Real Infrastructure

This isn’t just a plugin — it’s an architectural shift:

  • Your infrastructure becomes self-describing and self-routing
  • Consul becomes the source of truth
  • Caddy becomes the execution layer

The Big Idea

Instead of maintaining ingress separately from your services, this approach flips the model:

Your services define the network.

Register a service in Consul, tag it appropriately, and it’s instantly routable — HTTP, TCP, TLS, all included.

Final Thoughts

If you’re running Caddy and Nomad + Consul, this plugin removes an entire layer of operational overhead.

No more syncing configs.
No more ingress drift.
No more restarts.

Just declare your services — and let the network configure itself.

Next Steps

We continue to work hard to bring you the best value for all of your WordPress hosting needs.  If you have any questions, concerns, or would generally like to chat, feel free to contact us anytime.  We want to make sure you get the most out of HonestHosting.io!