From cd21617bacd4e3880a3a38c67c7a2e9b312ff7cc Mon Sep 17 00:00:00 2001 From: sabban Date: Wed, 3 Dec 2025 11:39:05 +0100 Subject: [PATCH 01/16] yet another obvious typo --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 01fbdb599..5eb1e7ca2 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -1,6 +1,6 @@ --- id: traefik -title: Traefix +title: Traefik sidebar_position: 5 --- @@ -153,4 +153,4 @@ spec: plugin: bouncer: forwardedHeadersCustomName: X-Real-Ip -``` \ No newline at end of file +``` From aed081ee391896a3fee1b0fa08632342d1e4b633 Mon Sep 17 00:00:00 2001 From: sabban Date: Wed, 3 Dec 2025 13:45:22 +0100 Subject: [PATCH 02/16] consistency between the two middleware configuration --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 5eb1e7ca2..0fecd574d 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -44,9 +44,8 @@ spec: bouncer: enabled: true crowdsecMode: stream - crowdsecLapiScheme: https - crowdsecLapiHost: crowdsec-service.crowdsec:8080 - crowdsecLapiKey: mysecretkey12345 + crowdsecLapiHost: crowdsec-service.default.svc.cluster.local:8080 + crowdsecLapiKey: ``` Now, you can install the remediation component: @@ -117,7 +116,6 @@ spec: crowdsecAppsecBodyLimit: 10485760 crowdsecLapiKey: crowdsecLapiPath: "/" - crowdsecLapiTLSInsecureVerify: true ``` You can see all the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). From 527ffb86573822381cb5a670a9087b19cca33df9 Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 09:44:50 +0100 Subject: [PATCH 03/16] Traefik remediation improvement --- .../unversioned/bouncers/traefik.mdx | 110 +++++++++++++----- 1 file changed, 82 insertions(+), 28 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 0fecd574d..71241e9ce 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -27,9 +27,89 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b Prometheus /> -### Traefik on kubernetes +## Traefik on kubernetes -Traefik expects a resource of "Middleware" type named "bouncer", which we will create now. +### Prerequesites + +#### Source IPs + +To ensure remediation works correctly, Traefik must receive the actual client IP +for every request. When Traefik is deployed behind an upstream proxy or load +balancer, the source IP may otherwise be replaced with the proxy’s address. +Traefik Behind an Upstream Proxy or Load Balancer + +When Traefik operates behind a load balancer, CDN, or any intermediate proxy, +proper forwarding and trust of client IP information is required for CrowdSec to +apply decisions accurately. + +Traefik must first be configured to trust the upstream IP ranges. This is done +using the forwardedHeaders.trustedIPs and proxyProtocol.trustedIPs entrypoint +settings, depending on whether the environment relies on forwarded headers or +the PROXY protocol. + +The CrowdSec bouncer middleware then also needs to trust these same ranges: + +```yaml +spec: + plugin: + bouncer: + forwardedheaderstrustedips: +``` + +If Traefik is using proxyProtocol.trustedIPs, it will rewrite X-Real-Ip. In that case, the middleware can be instructed to read that header explicitly: + +```yaml +spec: + plugin: + bouncer: + forwardedHeadersCustomName: X-Real-Ip +``` + +Correctly forwarding and trusting these headers ensures that both Traefik and +CrowdSec operate on the real client IP, which is required for IP-based +remediation. + +#### Traefik Custom Resources Definition + +Traefik’s CRDs provide the custom resource types (such as Middleware) required +for configuring Traefik through the Kubernetes CRD provider. CrowdSec +remediation relies on one of these resources to declare the CrowdSec bouncer +middleware. Without the CRDs, this middleware cannot be created or used, and +Traefik is unable to apply CrowdSec decisions. + + + +Here is the command sequence to install the Traefik CRDs via the Helm chart: + +```bash +helm repo add traefik https://traefik.github.io/charts +helm repo update +helm upgrade --install traefik-crds traefik/traefik-crds -n traefik --create-namespace +``` + + +You can deploy Traefik CRDs without helm as well following [https://doc.traefik.io/traefik/reference/install-configuration/providers/kubernetes/kubernetes-crd/](Traefik documentation) +```bash +kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml +``` + +> + +### + +Experimental plugin loading to enable the CrowdSec Bouncer Traefik Plugin, which +cannot be activated via CLI flags alone + +### Middleware + +To achieve remediation in a Traefik environment, one has to use a "Middleware" resource. Here is bouncer-middleware.yaml: @@ -126,29 +206,3 @@ Now, you can install the remediation component: ```bash kubectl apply -f bouncer-middleware.yaml ``` - -### Treafik Behind an Upstream Proxy or Load Balancer - -When Traefik operates behind another proxy (such as a load balancer, CDN, etc ...), the source IP seen by Traefik may be the wrong one instead of the real client. -To ensure Crowdsec applies decisions correctly based on the real client IP, it's crucial to properly forward and trust headers. - -First you configure Treafik to trust the upstream forwarded headers. Traefik has [`forwardedHeaders.trustedIPs`](https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers) and [`proxyProtocol.trustedIPs`](https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers) directives. - - -Then, you need to configure the middleware to trust as well the IP: - -```yaml -spec: - plugin: - bouncer: - forwardedheaderstrustedips: -``` - -When using `proxyProtocol.trustedIPs` Traefik replaces `X-Real-Ip`, you can also add : - -```yaml -spec: - plugin: - bouncer: - forwardedHeadersCustomName: X-Real-Ip -``` From 233ec480dc1c4c4834ce368954f7359f5e05a96c Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 15:24:10 +0100 Subject: [PATCH 04/16] typo in formatting --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 71241e9ce..0b8c4249c 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -100,7 +100,7 @@ You can deploy Traefik CRDs without helm as well following [https://doc.traefik. kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml ``` -> + ### From 017a44cd4a31fb8c0768d96b29d4d6e011ced8fb Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 16:22:24 +0100 Subject: [PATCH 05/16] typo --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 0b8c4249c..6d342078c 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -84,6 +84,7 @@ Traefik is unable to apply CrowdSec decisions. { label: 'Helm', value: 'helm' }, { label: 'Kubectl', value: Kubectl }, ]} +> Here is the command sequence to install the Traefik CRDs via the Helm chart: From bc14ece271ce6df468c0cee3135198d05f897e11 Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 16:51:28 +0100 Subject: [PATCH 06/16] try this --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 6d342078c..418a86578 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -53,10 +53,11 @@ The CrowdSec bouncer middleware then also needs to trust these same ranges: spec: plugin: bouncer: - forwardedheaderstrustedips: + forwardedHeadersTrustedIps: ``` -If Traefik is using proxyProtocol.trustedIPs, it will rewrite X-Real-Ip. In that case, the middleware can be instructed to read that header explicitly: +If Traefik is using proxyProtocol.trustedIPs, it will rewrite X-Real-Ip. In that +case, the middleware can be instructed to read that header explicitly: ```yaml spec: @@ -79,10 +80,10 @@ Traefik is unable to apply CrowdSec decisions. From c0019e8cd0c2d02bce99a416e4162ff668cffe7c Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 17:35:31 +0100 Subject: [PATCH 07/16] add some more details --- .../unversioned/bouncers/traefik.mdx | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 418a86578..ea4a23888 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -1,6 +1,6 @@ --- id: traefik -title: Traefik +title: Traefik (Kubernetes) sidebar_position: 5 --- @@ -43,9 +43,12 @@ proper forwarding and trust of client IP information is required for CrowdSec to apply decisions accurately. Traefik must first be configured to trust the upstream IP ranges. This is done -using the forwardedHeaders.trustedIPs and proxyProtocol.trustedIPs entrypoint -settings, depending on whether the environment relies on forwarded headers or -the PROXY protocol. +using the +[forwardedHeaders.trustedIPs](https://doc.traefik.io/traefik/v3.2/routing/entrypoints/#forwarded-headers) +and +[proxyProtocol.trustedIPs](https://doc.traefik.io/traefik/v3.2/routing/entrypoints/#proxyprotocol) +entrypoint settings, depending on whether the environment relies on forwarded +headers or the PROXY protocol. The CrowdSec bouncer middleware then also needs to trust these same ranges: @@ -56,8 +59,8 @@ spec: forwardedHeadersTrustedIps: ``` -If Traefik is using proxyProtocol.trustedIPs, it will rewrite X-Real-Ip. In that -case, the middleware can be instructed to read that header explicitly: +In case the header in which the ip is set is not `X-Forwarded-For`, it can be +set with: ```yaml spec: @@ -70,6 +73,22 @@ Correctly forwarding and trusting these headers ensures that both Traefik and CrowdSec operate on the real client IP, which is required for IP-based remediation. +
+Side note about source ip with CrowdSec and Kubernetes + +Source IP addresses are essential in a CrowdSec deployment for two reasons. +First, the log processor must know which IPs are responsible for triggering +scenarios. Second, the remediation component needs to identify the originating +IP of incoming requests in order to apply the appropriate action. + +In a Kubernetes environment, this requires disabling source NAT on nodes so that +the CrowdSec-monitored service pods receive the real client IP. As a +consequence, the Service’s externalTrafficPolicy must be set to Local, and the +workload (Traefik or any ingress/controller) must run either as a DaemonSet or +as a Deployment ensuring one pod per node. This guarantees that no traffic — and +therefore no security events — is missed. +
+ #### Traefik Custom Resources Definition Traefik’s CRDs provide the custom resource types (such as Middleware) required @@ -101,13 +120,24 @@ You can deploy Traefik CRDs without helm as well following [https://doc.traefik. ```bash kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml ``` + +
-### +#### Experimental plugin loading ability + +CrowdSec Bouncer Traefik Plugin can't be enabled via CLI flags alone, one has to +enable the experimental plugin load. This can be done by adding this snippet to +helm's values. -Experimental plugin loading to enable the CrowdSec Bouncer Traefik Plugin, which -cannot be activated via CLI flags alone +```yaml values.yaml +experimental: + plugins: + crowdsec-bouncer-traefik-plugin: + moduleName: "github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin" + version: "v1.4.5" +``` ### Middleware @@ -203,7 +233,7 @@ spec: You can see all the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). You can also refer to a [full traefik and CrowdSec stack on kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) -Now, you can install the remediation component: +Now, you can install or update the remediation component: ```bash kubectl apply -f bouncer-middleware.yaml From 1f6dc3c8f6c058a012332a9911604fd0aa8d1197 Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 17:45:36 +0100 Subject: [PATCH 08/16] change sidebar as well --- crowdsec-docs/sidebarsUnversioned.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/sidebarsUnversioned.ts b/crowdsec-docs/sidebarsUnversioned.ts index 8b76dac75..7ec37b334 100644 --- a/crowdsec-docs/sidebarsUnversioned.ts +++ b/crowdsec-docs/sidebarsUnversioned.ts @@ -525,7 +525,7 @@ const sidebarsUnversionedConfig: SidebarConfig = { }, { type: "doc", - label: "Traefik", + label: "Traefik (Kubernetes)", id: "bouncers/traefik", }, { From d929011ddb73a2234dcc735b2f31bbaf1acca1e2 Mon Sep 17 00:00:00 2001 From: sabban Date: Thu, 4 Dec 2025 17:55:31 +0100 Subject: [PATCH 09/16] wording --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index ea4a23888..02ece2f4f 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -129,7 +129,7 @@ kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/con CrowdSec Bouncer Traefik Plugin can't be enabled via CLI flags alone, one has to enable the experimental plugin load. This can be done by adding this snippet to -helm's values. +Traefik helm's chart values: ```yaml values.yaml experimental: From 9e2bb204d0ff99e82636e2eb65fa16bddcc42f74 Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 11:25:42 +0100 Subject: [PATCH 10/16] disclaimer --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 02ece2f4f..f672d957f 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -29,6 +29,16 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b ## Traefik on kubernetes +:::note +This remediation component is community developed and maintened. +You can see all the configuration options in the [bouncer +documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). +You can also refer to a [full traefik and CrowdSec stack on +kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) + +This piece of documentation is rather a an howto than a full fledge documentation. +:::note + ### Prerequesites #### Source IPs @@ -230,8 +240,6 @@ spec: crowdsecLapiPath: "/" ``` -You can see all the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). -You can also refer to a [full traefik and CrowdSec stack on kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) Now, you can install or update the remediation component: From 7018e815ecfa6e2e596bc5bdd129cafb55a6a11d Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 11:36:52 +0100 Subject: [PATCH 11/16] typo --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index f672d957f..ef9791ac5 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -36,8 +36,8 @@ documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowd You can also refer to a [full traefik and CrowdSec stack on kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) -This piece of documentation is rather a an howto than a full fledge documentation. -:::note +This piece of documentation is rather an howto than a full fledge documentation. +::: ### Prerequesites From 0beef14c4e09d9c492e2e605a55303cd76064e3e Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 14:12:33 +0100 Subject: [PATCH 12/16] make the note important --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index ef9791ac5..d5c936b6f 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -29,7 +29,7 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b ## Traefik on kubernetes -:::note +:::important This remediation component is community developed and maintened. You can see all the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). From e54d2e61b187243b9ab0d80d8ee149d0858b55fa Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 14:18:04 +0100 Subject: [PATCH 13/16] mtls is supported --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index d5c936b6f..708a79b27 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -25,6 +25,7 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b ## Traefik on kubernetes From b69606c5c56ee4fefbb757877bf1bf5ff4f9ea9d Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 14:35:32 +0100 Subject: [PATCH 14/16] refer to the quickstart --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 708a79b27..699085bd6 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -31,11 +31,12 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b ## Traefik on kubernetes :::important -This remediation component is community developed and maintened. -You can see all the configuration options in the [bouncer +This remediation component is community developed and maintened. You can see all +the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). You can also refer to a [full traefik and CrowdSec stack on kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) +or our [Appsec Traefik Quickstart](/docs/next/appsec/quickstart/traefik) This piece of documentation is rather an howto than a full fledge documentation. ::: From 2c4d336f608f99f7293d3f5fff016909cf2d95e1 Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 14:42:03 +0100 Subject: [PATCH 15/16] dot --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index 699085bd6..bbdd7c51d 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -36,7 +36,7 @@ the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). You can also refer to a [full traefik and CrowdSec stack on kubernetes](https://raw.githubusercontent.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/main/examples/kubernetes/README.md) -or our [Appsec Traefik Quickstart](/docs/next/appsec/quickstart/traefik) +or our [Appsec Traefik Quickstart](/docs/next/appsec/quickstart/traefik). This piece of documentation is rather an howto than a full fledge documentation. ::: From a03229e2cd9d733f5f2b2b16fdcb931fe5703028 Mon Sep 17 00:00:00 2001 From: sabban Date: Tue, 9 Dec 2025 14:46:17 +0100 Subject: [PATCH 16/16] typo --- crowdsec-docs/unversioned/bouncers/traefik.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdsec-docs/unversioned/bouncers/traefik.mdx b/crowdsec-docs/unversioned/bouncers/traefik.mdx index bbdd7c51d..5c9bb2e1a 100644 --- a/crowdsec-docs/unversioned/bouncers/traefik.mdx +++ b/crowdsec-docs/unversioned/bouncers/traefik.mdx @@ -31,7 +31,7 @@ import RemediationSupportBadges from '@site/src/components/remediation-support-b ## Traefik on kubernetes :::important -This remediation component is community developed and maintened. You can see all +This remediation component is community developed and maintained. You can see all the configuration options in the [bouncer documentation](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin). You can also refer to a [full traefik and CrowdSec stack on