Files
magnus919_agent-skills/traefik/references/plugins-extend.md
T
Magnus Hedemark 283215a8a2 fix: add Kubernetes, other providers, and plugin references to traefik skill
Adds three new reference files covering previously scoped-out areas:
- kubernetes-providers.md: Ingress, CRD (IngressRoute/IngressRouteTCP/
  Middleware/TLSOption/TLSStore), Gateway API, Helm chart, CRD installation
- other-providers.md: ECS, Nomad, Consul Catalog, KV stores (Redis/Consul/
  etcd/ZooKeeper), File, HTTP, REST providers — full config with examples
- plugins-extend.md: Yaegi (Go interpreter) and WASM plugin systems,
  remote/local plugin config, FastProxy experimental optimization

Also removes the incorrect 'When NOT to Use' K8s scope limit from SKILL.md
— the skill now covers all major deployment targets.

Signed-off-by: Jasper <magnus@groktop.us>
2026-07-05 15:24:24 -04:00

4.5 KiB

Plugins & Extending Traefik

Traefik supports two plugin systems for extending its capabilities with custom middlewares and providers.

Plugin Systems Comparison

Feature Yaegi WebAssembly (WASM)
Language Go Any language compiling to WASM (Go, Rust, C++, TinyGo)
Compilation Not required (interpreted) Required (compiled to .wasm binary)
Performance Interpreted Near-native
Hot-reload Yes No (binary change requires reload)
Safety Go sandbox WASM sandbox
Extensibility Middleware + Provider Middleware only
Use case Rapid development, prototyping Production-grade, performance-critical
Plugin Catalog Available Available

Plugin Catalog

Browse available plugins: https://plugins.traefik.io/

The Plugin Catalog is accessible from the Traefik Dashboard under the Plugins menu entry. Each plugin provides:

  • Installation instructions (static config snippet)
  • Dynamic configuration syntax
  • Usage examples

Configuring Plugins (Static Config)

Remote Plugins (from catalog)

# Static config
experimental:
  plugins:
    plugin-name:
      moduleName: "github.com/org/plugin"
      version: "v0.1.0"
      # Optional settings (WASM only):
      settings:
        envs:
          - "CACHE_TTL=300"
        mounts:
          - "/data/cache:/cache"

Local Plugins (development)

experimental:
  localPlugins:
    plugin-name:
      moduleName: "github.com/org/plugin"
      settings:
        envs:
          - "DEBUG=true"

Using Plugins in Dynamic Config

Plugins are referenced as middlewares with the @plugin provider namespace:

# Dynamic config (File provider)
http:
  middlewares:
    my-auth:
      plugin:
        auth-plugin-name:
          headerName: "X-API-Key"
          secret: "my-secret"

http:
  routers:
    app:
      rule: "Host(`app.example.com`)"
      middlewares:
        - "my-auth@file"          # File-based middleware
        - "plugin-name@plugin"    # Plugin middleware

  services:
    app:
      loadBalancer:
        servers:
          - url: "http://backend:80"

With Docker labels:

labels:
  - "traefik.http.middlewares.my-plugin.plugin.plugin-name.key=value"
  - "traefik.http.routers.app.middlewares=my-plugin@plugin"

Plugin Development

Yaegi Plugin (Go, no compilation)

Create a Go package with a module path and implement the middleware/provider interface. Import pattern:

package myplugin

import (
    "context"
    "net/http"
)

func New(ctx context.Context, conf map[string]interface{}) (func(next http.Handler) http.Handler, error) {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
            // Custom logic
            next.ServeHTTP(rw, req)
        })
    }, nil
}

WASM Plugin (any language)

Compile to a .wasm binary following the http-wasm specification (https://http-wasm.io/). HTTP middleware handler with request/response manipulation capability.

Development Resources

Provider Plugins

Yaegi plugins can extend Traefik with custom providers, enabling dynamic configuration from any source:

experimental:
  plugins:
    my-provider-plugin:
      moduleName: "github.com/org/provider-plugin"
      version: "v0.1.0"

providers:
  plugin:
    my-provider-plugin:
      endpoint: "http://custom-source:8080"
      pollInterval: "30s"

Security Considerations

  • Plugins run with the same privileges as Traefik itself
  • WASM provides stronger isolation (sandboxed by design)
  • Only install plugins from trusted sources (verified hashes)
  • Test plugins in staging before production deployment
  • Plugin hash verification is optional but recommended for remote plugins:
experimental:
  plugins:
    plugin-name:
      moduleName: "github.com/org/plugin"
      version: "v0.1.0"
      hash: "sha256:abc123..."

FastProxy (Experimental)

FastProxy is an experimental HTTP/2 multiplexing optimization that reduces connection overhead to backends:

# Static config
experimental:
  fastProxy: true

FastProxy connects to backend servers using a shared HTTP/2 connection pool, reducing connection churn for services with many concurrent requests. Available in Traefik v3.x experimental channel.