This repository includes Traefik middleware plugin for calling a ratelimiter service.
The existing plugins can be browsed into the Plugin Catalog.
Traefik plugins are developed using the Go language.
A Traefik middleware plugin is just a Go package that provides an http.Handler
to perform specific processing of requests and responses.
Rather than being pre-compiled and linked, however, plugins are executed on the fly by Yaegi, an embedded Go interpreter.
For each plugin, the Traefik static configuration must define the module name (as is usual for Go packages).
The following declaration (given here in YAML) defines a plugin:
# Static configuration
experimental:
plugins:
example:
moduleName: github.com/argyle-engineering/traefik-ratelimiter-middleware
version: v0.0.1
Here is an example of a file provider dynamic configuration (given here in YAML), where the interesting part is the http.middlewares
section:
# Dynamic configuration
http:
routers:
my-router:
rule: host(`demo.localhost`)
service: service-foo
entryPoints:
- web
middlewares:
- my-plugin
services:
service-foo:
loadBalancer:
servers:
- url: http://127.0.0.1:5000
middlewares:
my-plugin:
plugin:
example:
url: http://ratelimiter.default.svc.cluster.local.:8000
dryRun: true
Currently, the only way to send logs to Traefik is to use os.Stdout.WriteString("...")
or os.Stderr.WriteString("...")
.
In the future, we will try to provide something better and based on levels.