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

175 lines
4.5 KiB
Markdown

# 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)
```yaml
# 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)
```yaml
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:
```yaml
# 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:
```yaml
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:
```go
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
- **Developer docs**: https://plugins.traefik.io/install
- **Plugin creation guide**: https://plugins.traefik.io/create
- **Plugin catalog submission**: Publish to https://plugins.traefik.io/ for community use
## Provider Plugins
Yaegi plugins can extend Traefik with custom providers, enabling dynamic configuration from any source:
```yaml
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:
```yaml
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:
```yaml
# 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.