mirror of
https://github.com/containous/traefik.git
synced 2025-10-22 19:33:20 +03:00
Compare commits
65 Commits
v3.0.3
...
v3.1.0-rc3
Author | SHA1 | Date | |
---|---|---|---|
|
876899be4b | ||
|
89108972b6 | ||
|
d42e75bb2e | ||
|
8d016f5e16 | ||
|
927f0bc01a | ||
|
900784a95a | ||
|
98c624bf1a | ||
|
f3479f532b | ||
|
8946dd1898 | ||
|
2a0cfda90b | ||
|
12fae2ebb8 | ||
|
9758b1ce36 | ||
|
fe4cca6e9c | ||
|
b1b4e6b918 | ||
|
8cb1829698 | ||
|
2f9905061e | ||
|
0a7a6afd59 | ||
|
b577b3a6ba | ||
|
230019eccf | ||
|
2090baa938 | ||
|
b7de043991 | ||
|
9e0800f938 | ||
|
e7d1a98c5e | ||
|
6f1bd54d86 | ||
|
983940ae60 | ||
|
6d8407893d | ||
|
a8a92eb2a5 | ||
|
2798e18e18 | ||
|
61defcdd66 | ||
|
ec638a741e | ||
|
097e71ad24 | ||
|
eabcb3e1c0 | ||
|
b4f99ae3ac | ||
|
a696f7c654 | ||
|
3ca667a3d4 | ||
|
27af1fb478 | ||
|
b795f128d7 | ||
|
3f48e6f8ef | ||
|
b37aaea36d | ||
|
67f0700377 | ||
|
28d40e7f3c | ||
|
7eac92f49c | ||
|
b452f37e08 | ||
|
7fc56454ea | ||
|
c0a2e6b4b6 | ||
|
e9bd2b45ac | ||
|
6e61fe0de1 | ||
|
0e215f9b61 | ||
|
7fdb1ff8af | ||
|
6a06560318 | ||
|
05d2c86074 | ||
|
9d8fd24730 | ||
|
1ffbffb26a | ||
|
c1ef742977 | ||
|
73769af0fe | ||
|
063f8fae79 | ||
|
4e831b920e | ||
|
6c19a9cb8f | ||
|
0ee377bc9f | ||
|
4f6c15cc14 | ||
|
7d66f439eb | ||
|
60bc47d00e | ||
|
cf1cbb24df | ||
|
619045eb4b | ||
|
8174860770 |
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -11,7 +11,7 @@ Bug fixes:
|
|||||||
|
|
||||||
Enhancements:
|
Enhancements:
|
||||||
- for Traefik v2: we only accept bug fixes
|
- for Traefik v2: we only accept bug fixes
|
||||||
- for Traefik v3: use branch master
|
- for Traefik v3: use branch v3.0
|
||||||
|
|
||||||
HOW TO WRITE A GOOD PULL REQUEST? https://doc.traefik.io/traefik/contributing/submitting-pull-requests/
|
HOW TO WRITE A GOOD PULL REQUEST? https://doc.traefik.io/traefik/contributing/submitting-pull-requests/
|
||||||
|
|
||||||
|
@@ -146,6 +146,7 @@ linters-settings:
|
|||||||
- github.com/mailgun/multibuf
|
- github.com/mailgun/multibuf
|
||||||
- github.com/jaguilar/vt100
|
- github.com/jaguilar/vt100
|
||||||
- github.com/cucumber/godog
|
- github.com/cucumber/godog
|
||||||
|
- github.com/http-wasm/http-wasm-host-go
|
||||||
testifylint:
|
testifylint:
|
||||||
disable:
|
disable:
|
||||||
- suite-dont-use-pkg
|
- suite-dont-use-pkg
|
||||||
|
@@ -46,7 +46,7 @@ blocks:
|
|||||||
- name: GH_VERSION
|
- name: GH_VERSION
|
||||||
value: 2.32.1
|
value: 2.32.1
|
||||||
- name: CODENAME
|
- name: CODENAME
|
||||||
value: "beaufort"
|
value: "comte"
|
||||||
prologue:
|
prologue:
|
||||||
commands:
|
commands:
|
||||||
- export VERSION=${SEMAPHORE_GIT_TAG_NAME}
|
- export VERSION=${SEMAPHORE_GIT_TAG_NAME}
|
||||||
|
84
CHANGELOG.md
84
CHANGELOG.md
@@ -1,3 +1,87 @@
|
|||||||
|
## [v3.1.0-rc3](https://github.com/traefik/traefik/tree/v3.1.0-rc3) (2024-07-02)
|
||||||
|
[All Commits](https://github.com/traefik/traefik/compare/v3.1.0-rc2...v3.1.0-rc3)
|
||||||
|
|
||||||
|
**Bug fixes:**
|
||||||
|
- **[k8s,k8s/gatewayapi]** Do not disable Gateway API provider if not enabled in experimental ([#10862](https://github.com/traefik/traefik/pull/10862) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
|
||||||
|
**Misc:**
|
||||||
|
- Merge current v3.0 into v3.1 ([#10871](https://github.com/traefik/traefik/pull/10871) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
|
||||||
|
## [v3.0.4](https://github.com/traefik/traefik/tree/v3.0.4) (2024-07-02)
|
||||||
|
[All Commits](https://github.com/traefik/traefik/compare/v3.0.3...v3.0.4)
|
||||||
|
|
||||||
|
**Documentation:**
|
||||||
|
- **[k8s]** Fix some documentation links ([#10841](https://github.com/traefik/traefik/pull/10841) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
- Update maintainers ([#10827](https://github.com/traefik/traefik/pull/10827) by [emilevauge](https://github.com/emilevauge))
|
||||||
|
|
||||||
|
**Misc:**
|
||||||
|
- Merge current v2.11 into v3.0 ([#10869](https://github.com/traefik/traefik/pull/10869) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- Merge current v2.11 into v3.0 ([#10851](https://github.com/traefik/traefik/pull/10851) by [mmatur](https://github.com/mmatur))
|
||||||
|
- Merge current v2.11 into v3.0 ([#10831](https://github.com/traefik/traefik/pull/10831) by [mmatur](https://github.com/mmatur))
|
||||||
|
|
||||||
|
## [v2.11.6](https://github.com/traefik/traefik/tree/v2.11.6) (2024-07-02)
|
||||||
|
[All Commits](https://github.com/traefik/traefik/compare/v2.11.5...v2.11.6)
|
||||||
|
|
||||||
|
**Bug fixes:**
|
||||||
|
- **[ecs]** Fix ECS config for OIDC + IRSA ([#10814](https://github.com/traefik/traefik/pull/10814) by [mmatur](https://github.com/mmatur))
|
||||||
|
- **[http3]** Disable QUIC 0-RTT ([#10867](https://github.com/traefik/traefik/pull/10867) by [mmatur](https://github.com/mmatur))
|
||||||
|
- **[middleware,server]** Remove interface names from IPv6 ([#10813](https://github.com/traefik/traefik/pull/10813) by [JeroenED](https://github.com/JeroenED))
|
||||||
|
|
||||||
|
**Documentation:**
|
||||||
|
- **[docker,acme]** Fix a typo in the ACME docker-compose docs ([#10866](https://github.com/traefik/traefik/pull/10866) by [ciacon](https://github.com/ciacon))
|
||||||
|
- Update Advanced Capabilities Callout ([#10846](https://github.com/traefik/traefik/pull/10846) by [tomatokoolaid](https://github.com/tomatokoolaid))
|
||||||
|
- Update maintainers ([#10834](https://github.com/traefik/traefik/pull/10834) by [emilevauge](https://github.com/emilevauge))
|
||||||
|
- Fix readme badge for Semaphore CI ([#10830](https://github.com/traefik/traefik/pull/10830) by [mmatur](https://github.com/mmatur))
|
||||||
|
- Fix typo in keepAliveMaxTime docs ([#10825](https://github.com/traefik/traefik/pull/10825) by [shochdoerfer](https://github.com/shochdoerfer))
|
||||||
|
|
||||||
|
## [v3.1.0-rc2](https://github.com/traefik/traefik/tree/v3.1.0-rc2) (2024-06-28)
|
||||||
|
[All Commits](https://github.com/traefik/traefik/compare/v3.0.0-beta3...v3.1.0-rc2)
|
||||||
|
|
||||||
|
**Enhancements:**
|
||||||
|
- **[k8s,k8s/gatewayapi]** Support invalid HTTPRoute status ([#10714](https://github.com/traefik/traefik/pull/10714) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** KubernetesGateway provider is no longer experimental ([#10840](https://github.com/traefik/traefik/pull/10840) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Bump Gateway API to v1.1.0 ([#10835](https://github.com/traefik/traefik/pull/10835) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Fix route attachments to gateways ([#10761](https://github.com/traefik/traefik/pull/10761) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Support HTTPRoute method and query param matching ([#10815](https://github.com/traefik/traefik/pull/10815) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Support HTTPURLRewrite filter ([#10571](https://github.com/traefik/traefik/pull/10571) by [SantoDE](https://github.com/SantoDE))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Set Gateway HTTPRoute status ([#10667](https://github.com/traefik/traefik/pull/10667) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Support ReferenceGrant for HTTPRoute backends ([#10771](https://github.com/traefik/traefik/pull/10771) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Compute HTTPRoute priorities ([#10766](https://github.com/traefik/traefik/pull/10766) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[k8s,k8s/gatewayapi]** Support RegularExpression for path matching ([#10717](https://github.com/traefik/traefik/pull/10717) by [dmavrommatis](https://github.com/dmavrommatis))
|
||||||
|
- **[k8s/crd,k8s]** Support HealthCheck for ExternalName services ([#10467](https://github.com/traefik/traefik/pull/10467) by [marcmognol](https://github.com/marcmognol))
|
||||||
|
- **[k8s/ingress,k8s/crd,k8s,k8s/gatewayapi]** Migrate to EndpointSlices API ([#10664](https://github.com/traefik/traefik/pull/10664) by [jnoordsij](https://github.com/jnoordsij))
|
||||||
|
- **[k8s/ingress,k8s/crd,k8s]** Change log level from Warning to Info when ExternalName services is enabled ([#10682](https://github.com/traefik/traefik/pull/10682) by [marcmognol](https://github.com/marcmognol))
|
||||||
|
- **[k8s/ingress,k8s/crd,k8s]** Allow to use internal Node IPs for NodePort services ([#10278](https://github.com/traefik/traefik/pull/10278) by [jorisvergeer](https://github.com/jorisvergeer))
|
||||||
|
- **[middleware,k8s,k8s/gatewayapi]** Improve HTTPRoute Redirect Filter with port and scheme ([#10784](https://github.com/traefik/traefik/pull/10784) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
- **[middleware,k8s,k8s/gatewayapi]** Support HTTPRoute redirect port and scheme ([#10802](https://github.com/traefik/traefik/pull/10802) by [rtribotte](https://github.com/rtribotte))
|
||||||
|
- **[middleware]** Support Content-Security-Policy-Report-Only in the headers middleware ([#10709](https://github.com/traefik/traefik/pull/10709) by [SpecLad](https://github.com/SpecLad))
|
||||||
|
- **[middleware]** Add support for Zstandard to the compression middleware ([#10660](https://github.com/traefik/traefik/pull/10660) by [Belphemur](https://github.com/Belphemur))
|
||||||
|
- **[plugins]** Enhance wasm plugins ([#10829](https://github.com/traefik/traefik/pull/10829) by [juliens](https://github.com/juliens))
|
||||||
|
- **[plugins]** Add logs for plugins load ([#10848](https://github.com/traefik/traefik/pull/10848) by [mmatur](https://github.com/mmatur))
|
||||||
|
- **[server]** Support systemd socket-activation ([#10399](https://github.com/traefik/traefik/pull/10399) by [juliens](https://github.com/juliens))
|
||||||
|
|
||||||
|
**Bug fixes:**
|
||||||
|
- **[healthcheck,k8s/crd,k8s]** Fix Healthcheck default value for ExternalName services ([#10778](https://github.com/traefik/traefik/pull/10778) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- **[middleware,metrics,tracing]** Upgrade to OpenTelemetry Semantic Conventions v1.26.0 ([#10850](https://github.com/traefik/traefik/pull/10850) by [mmatur](https://github.com/mmatur))
|
||||||
|
- **[plugins]** Fix build only linux and darwin support wazergo ([#10857](https://github.com/traefik/traefik/pull/10857) by [juliens](https://github.com/juliens))
|
||||||
|
|
||||||
|
**Documentation:**
|
||||||
|
- **[k8s,k8s/gatewayapi]** Fix the Kubernetes GatewayAPI documentation ([#10844](https://github.com/traefik/traefik/pull/10844) by [nmengin](https://github.com/nmengin))
|
||||||
|
|
||||||
|
**Misc:**
|
||||||
|
- Merge current v3.0 into master ([#10853](https://github.com/traefik/traefik/pull/10853) by [mmatur](https://github.com/mmatur))
|
||||||
|
- Merge current v3.0 into master ([#10811](https://github.com/traefik/traefik/pull/10811) by [mmatur](https://github.com/mmatur))
|
||||||
|
- Merge current v3.0 into master ([#10789](https://github.com/traefik/traefik/pull/10789) by [ldez](https://github.com/ldez))
|
||||||
|
- Merge current v3.0 into master ([#10750](https://github.com/traefik/traefik/pull/10750) by [kevinpollet](https://github.com/kevinpollet))
|
||||||
|
- Merge current v3.0 into master ([#10655](https://github.com/traefik/traefik/pull/10655) by [ldez](https://github.com/ldez))
|
||||||
|
- Merge current v3.0 into master ([#10567](https://github.com/traefik/traefik/pull/10567) by [ldez](https://github.com/ldez))
|
||||||
|
- Merge current v3.0 into master ([#10418](https://github.com/traefik/traefik/pull/10418) by [mmatur](https://github.com/mmatur))
|
||||||
|
- Merge current v3.0 into master ([#10040](https://github.com/traefik/traefik/pull/10040) by [mmatur](https://github.com/mmatur))
|
||||||
|
|
||||||
|
## [v3.1.0-rc1](https://github.com/traefik/traefik/tree/v3.1.0-rc1) (2024-06-27)
|
||||||
|
|
||||||
|
Release canceled.
|
||||||
|
|
||||||
## [v3.0.3](https://github.com/traefik/traefik/tree/v3.0.3) (2024-06-18)
|
## [v3.0.3](https://github.com/traefik/traefik/tree/v3.0.3) (2024-06-18)
|
||||||
[All Commits](https://github.com/traefik/traefik/compare/v3.0.2...v3.0.3)
|
[All Commits](https://github.com/traefik/traefik/compare/v3.0.2...v3.0.3)
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
</picture>
|
</picture>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
[](https://semaphoreci.com/containous/traefik)
|
[](https://traefik-oss.semaphoreci.com/projects/traefik)
|
||||||
[](https://doc.traefik.io/traefik)
|
[](https://doc.traefik.io/traefik)
|
||||||
[](https://goreportcard.com/report/traefik/traefik)
|
[](https://goreportcard.com/report/traefik/traefik)
|
||||||
[](https://github.com/traefik/traefik/blob/master/LICENSE.md)
|
[](https://github.com/traefik/traefik/blob/master/LICENSE.md)
|
||||||
|
@@ -46,6 +46,7 @@ import (
|
|||||||
"github.com/traefik/traefik/v3/pkg/tracing"
|
"github.com/traefik/traefik/v3/pkg/tracing"
|
||||||
"github.com/traefik/traefik/v3/pkg/types"
|
"github.com/traefik/traefik/v3/pkg/types"
|
||||||
"github.com/traefik/traefik/v3/pkg/version"
|
"github.com/traefik/traefik/v3/pkg/version"
|
||||||
|
"golang.org/x/exp/maps"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -224,10 +225,21 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
|
pluginLogger := log.Ctx(ctx).With().Logger()
|
||||||
|
hasPlugins := staticConfiguration.Experimental != nil && (staticConfiguration.Experimental.Plugins != nil || staticConfiguration.Experimental.LocalPlugins != nil)
|
||||||
|
if hasPlugins {
|
||||||
|
pluginsList := maps.Keys(staticConfiguration.Experimental.Plugins)
|
||||||
|
pluginsList = append(pluginsList, maps.Keys(staticConfiguration.Experimental.LocalPlugins)...)
|
||||||
|
|
||||||
|
pluginLogger = pluginLogger.With().Strs("plugins", pluginsList).Logger()
|
||||||
|
pluginLogger.Info().Msg("Loading plugins...")
|
||||||
|
}
|
||||||
|
|
||||||
pluginBuilder, err := createPluginBuilder(staticConfiguration)
|
pluginBuilder, err := createPluginBuilder(staticConfiguration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Plugins are disabled because an error has occurred.")
|
pluginLogger.Err(err).Msg("Plugins are disabled because an error has occurred.")
|
||||||
|
} else if hasPlugins {
|
||||||
|
pluginLogger.Info().Msg("Plugins loaded.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Providers plugins
|
// Providers plugins
|
||||||
|
@@ -15,7 +15,7 @@ Let's see how.
|
|||||||
|
|
||||||
### General
|
### General
|
||||||
|
|
||||||
This [documentation](https://doc.traefik.io/traefik/ "Link to the official Traefik documentation") is built with [MkDocs](https://mkdocs.org/ "Link to website of MkDocs").
|
This [documentation](../../ "Link to the official Traefik documentation") is built with [MkDocs](https://mkdocs.org/ "Link to website of MkDocs").
|
||||||
|
|
||||||
### Method 1: `Docker` and `make`
|
### Method 1: `Docker` and `make`
|
||||||
|
|
||||||
|
@@ -9,7 +9,6 @@ description: "Traefik Proxy is an open source software with a thriving community
|
|||||||
|
|
||||||
* Emile Vauge [@emilevauge](https://github.com/emilevauge)
|
* Emile Vauge [@emilevauge](https://github.com/emilevauge)
|
||||||
* Manuel Zapf [@SantoDE](https://github.com/SantoDE)
|
* Manuel Zapf [@SantoDE](https://github.com/SantoDE)
|
||||||
* Ludovic Fernandez [@ldez](https://github.com/ldez)
|
|
||||||
* Julien Salleyron [@juliens](https://github.com/juliens)
|
* Julien Salleyron [@juliens](https://github.com/juliens)
|
||||||
* Nicolas Mengin [@nmengin](https://github.com/nmengin)
|
* Nicolas Mengin [@nmengin](https://github.com/nmengin)
|
||||||
* Michaël Matur [@mmatur](https://github.com/mmatur)
|
* Michaël Matur [@mmatur](https://github.com/mmatur)
|
||||||
@@ -33,6 +32,7 @@ People who have had an incredibly positive impact on the project, and are now fo
|
|||||||
* Daniel Tomcej [@dtomcej](https://github.com/dtomcej)
|
* Daniel Tomcej [@dtomcej](https://github.com/dtomcej)
|
||||||
* Timo Reimann [@timoreimann](https://github.com/timoreimann)
|
* Timo Reimann [@timoreimann](https://github.com/timoreimann)
|
||||||
* Marco Jantke [@mjantke](https://github.com/mjeri)
|
* Marco Jantke [@mjantke](https://github.com/mjeri)
|
||||||
|
* Ludovic Fernandez [@ldez](https://github.com/ldez)
|
||||||
|
|
||||||
## Maintainer's Guidelines
|
## Maintainer's Guidelines
|
||||||
|
|
||||||
|
@@ -79,7 +79,7 @@ traefik --help
|
|||||||
# or
|
# or
|
||||||
|
|
||||||
docker run traefik[:version] --help
|
docker run traefik[:version] --help
|
||||||
# ex: docker run traefik:v3.0 --help
|
# ex: docker run traefik:v3.1 --help
|
||||||
```
|
```
|
||||||
|
|
||||||
Check the [CLI reference](../reference/static-configuration/cli.md "Link to CLI reference overview") for an overview about all available arguments.
|
Check the [CLI reference](../reference/static-configuration/cli.md "Link to CLI reference overview") for an overview about all available arguments.
|
||||||
|
@@ -16,12 +16,12 @@ You can install Traefik with the following flavors:
|
|||||||
|
|
||||||
Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and run it with one sample configuration file:
|
Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and run it with one sample configuration file:
|
||||||
|
|
||||||
* [YAML](https://raw.githubusercontent.com/traefik/traefik/v3.0/traefik.sample.yml)
|
* [YAML](https://raw.githubusercontent.com/traefik/traefik/v3.1/traefik.sample.yml)
|
||||||
* [TOML](https://raw.githubusercontent.com/traefik/traefik/v3.0/traefik.sample.toml)
|
* [TOML](https://raw.githubusercontent.com/traefik/traefik/v3.1/traefik.sample.toml)
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run -d -p 8080:8080 -p 80:80 \
|
docker run -d -p 8080:8080 -p 80:80 \
|
||||||
-v $PWD/traefik.yml:/etc/traefik/traefik.yml traefik:v3.0
|
-v $PWD/traefik.yml:/etc/traefik/traefik.yml traefik:v3.1
|
||||||
```
|
```
|
||||||
|
|
||||||
For more details, go to the [Docker provider documentation](../providers/docker.md)
|
For more details, go to the [Docker provider documentation](../providers/docker.md)
|
||||||
@@ -29,7 +29,7 @@ For more details, go to the [Docker provider documentation](../providers/docker.
|
|||||||
!!! tip
|
!!! tip
|
||||||
|
|
||||||
* Prefer a fixed version than the latest that could be an unexpected version.
|
* Prefer a fixed version than the latest that could be an unexpected version.
|
||||||
ex: `traefik:v3.0`
|
ex: `traefik:v3.1`
|
||||||
* Docker images are based from the [Alpine Linux Official image](https://hub.docker.com/_/alpine).
|
* Docker images are based from the [Alpine Linux Official image](https://hub.docker.com/_/alpine).
|
||||||
* Any orchestrator using docker images can fetch the official Traefik docker image.
|
* Any orchestrator using docker images can fetch the official Traefik docker image.
|
||||||
|
|
||||||
|
@@ -35,12 +35,18 @@ rules:
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
@@ -130,7 +136,7 @@ spec:
|
|||||||
serviceAccountName: traefik-account
|
serviceAccountName: traefik-account
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --api.insecure
|
- --api.insecure
|
||||||
- --providers.kubernetesingress
|
- --providers.kubernetesingress
|
||||||
|
@@ -20,7 +20,7 @@ version: '3'
|
|||||||
services:
|
services:
|
||||||
reverse-proxy:
|
reverse-proxy:
|
||||||
# The official v3 Traefik docker image
|
# The official v3 Traefik docker image
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
# Enables the web UI and tells Traefik to listen to docker
|
# Enables the web UI and tells Traefik to listen to docker
|
||||||
command: --api.insecure=true --providers.docker
|
command: --api.insecure=true --providers.docker
|
||||||
ports:
|
ports:
|
||||||
|
@@ -1,14 +1,10 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
!!! question "Using Traefik for Business Applications?"
|
!!! question "Using Traefik OSS in Production? Consider Adding Advanced Capabilities."
|
||||||
|
|
||||||
If you are using Traefik in your organization, consider our enterprise-grade solutions:
|
Add API Gateway or API Management capabilities seamlessly to your existing Traefik deployments.
|
||||||
|
No rip and replace. No learning curve.
|
||||||
|
|
||||||
- API Management
|
- [Explore our API Gateway](https://traefik.io/traefik-hub-api-gateway/)
|
||||||
[Explore](https://traefik.io/solutions/api-management/) // [Watch Demo Video](https://info.traefik.io/watch-traefik-hub-demo)
|
- [Explore our API Management](https://traefik.io/traefik-hub/)
|
||||||
- API Gateway
|
- [Get 24/7/365 Commercial Support for Traefik OSS](https://info.traefik.io/request-commercial-support)
|
||||||
[Explore](https://traefik.io/solutions/api-gateway/) // [Watch Demo Video](https://info.traefik.io/watch-traefikee-demo)
|
|
||||||
- Ingress Controller
|
|
||||||
[Kubernetes](https://traefik.io/solutions/kubernetes-ingress/) // [Docker Swarm](https://traefik.io/solutions/docker-swarm-ingress/)
|
|
||||||
|
|
||||||
These tools help businesses discover, deploy, secure, and manage microservices and APIs easily, at scale, across any environment.
|
|
||||||
|
@@ -24,8 +24,6 @@ Developing Traefik, our main goal is to make it effortless to use, and we're sur
|
|||||||
|
|
||||||
!!! info
|
!!! info
|
||||||
|
|
||||||
Join our user friendly and active [Community Forum](https://community.traefik.io "Link to Traefik Community Forum") to discuss, learn, and connect with the traefik community.
|
Join our user friendly and active [Community Forum](https://community.traefik.io "Link to Traefik Community Forum") to discuss, learn, and connect with the Traefik community.
|
||||||
|
|
||||||
Using Traefik in your organization? Consider [Traefik Enterprise](https://traefik.io/traefik-enterprise/ "Lino to Traefik Enterprise"), our unified API Gateway and Ingress that simplifies the discovery, security, and deployment of APIs and microservices across any environment.
|
Using Traefik OSS in Production? Add enterprise-grade API Gateway and API Management capabilities to your existing deployments seamlessly. No rip and replace. No learning curve. Learn more from [this short video](https://info.traefik.io/traefik-upgrade-walkthrough)
|
||||||
|
|
||||||
See it in action in [this short video walkthrough](https://info.traefik.io/watch-traefikee-demo "Link to video walkthrough").
|
|
||||||
|
@@ -10,7 +10,7 @@ Compress Allows Compressing Responses before Sending them to the Client
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
The Compress middleware supports gzip and Brotli compression.
|
The Compress middleware supports Gzip, Brotli and Zstandard compression.
|
||||||
The activation of compression, and the compression method choice rely (among other things) on the request's `Accept-Encoding` header.
|
The activation of compression, and the compression method choice rely (among other things) on the request's `Accept-Encoding` header.
|
||||||
|
|
||||||
## Configuration Examples
|
## Configuration Examples
|
||||||
@@ -54,8 +54,8 @@ http:
|
|||||||
|
|
||||||
Responses are compressed when the following criteria are all met:
|
Responses are compressed when the following criteria are all met:
|
||||||
|
|
||||||
* The `Accept-Encoding` request header contains `gzip`, `*`, and/or `br` with or without [quality values](https://developer.mozilla.org/en-US/docs/Glossary/Quality_values).
|
* The `Accept-Encoding` request header contains `gzip`, and/or `*`, and/or `br`, and/or `zstd` with or without [quality values](https://developer.mozilla.org/en-US/docs/Glossary/Quality_values).
|
||||||
If the `Accept-Encoding` request header is absent, the response won't be encoded.
|
If the `Accept-Encoding` request header is absent and no [defaultEncoding](#defaultencoding) is configured, the response won't be encoded.
|
||||||
If it is present, but its value is the empty string, then compression is disabled.
|
If it is present, but its value is the empty string, then compression is disabled.
|
||||||
* The response is not already compressed, i.e. the `Content-Encoding` response header is not already set.
|
* The response is not already compressed, i.e. the `Content-Encoding` response header is not already set.
|
||||||
* The response`Content-Type` header is not one among the [excludedContentTypes options](#excludedcontenttypes), or is one among the [includedContentTypes options](#includedcontenttypes).
|
* The response`Content-Type` header is not one among the [excludedContentTypes options](#excludedcontenttypes), or is one among the [includedContentTypes options](#includedcontenttypes).
|
||||||
|
@@ -394,6 +394,10 @@ This overrides the `BrowserXssFilter` option.
|
|||||||
|
|
||||||
The `contentSecurityPolicy` option allows the `Content-Security-Policy` header value to be set with a custom value.
|
The `contentSecurityPolicy` option allows the `Content-Security-Policy` header value to be set with a custom value.
|
||||||
|
|
||||||
|
### `contentSecurityPolicyReportOnly`
|
||||||
|
|
||||||
|
The `contentSecurityPolicyReportOnly` option allows the `Content-Security-Policy-Report-Only` header value to be set with a custom value.
|
||||||
|
|
||||||
### `publicKey`
|
### `publicKey`
|
||||||
|
|
||||||
The `publicKey` implements HPKP to prevent MITM attacks with forged certificates.
|
The `publicKey` implements HPKP to prevent MITM attacks with forged certificates.
|
||||||
|
@@ -135,7 +135,7 @@ It is now unsupported and would prevent Traefik to start.
|
|||||||
##### Remediation
|
##### Remediation
|
||||||
|
|
||||||
The `http3` option should be removed from the static configuration experimental section.
|
The `http3` option should be removed from the static configuration experimental section.
|
||||||
To configure `http3`, please checkout the [entrypoint configuration documentation](https://doc.traefik.io/traefik/v3.0/routing/entrypoints/#http3_1).
|
To configure `http3`, please checkout the [entrypoint configuration documentation](../routing/entrypoints.md#http3_1).
|
||||||
|
|
||||||
### Consul provider
|
### Consul provider
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ core:
|
|||||||
defaultRuleSyntax: v2
|
defaultRuleSyntax: v2
|
||||||
```
|
```
|
||||||
|
|
||||||
This snippet in the static configuration makes the [v2 format](https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/?ref=traefik.io#configure-the-default-syntax-in-static-configuration "Link to configure default syntax in static config") the default rule matchers syntax.
|
This snippet in the static configuration makes the [v2 format](../migration/v2-to-v3-details.md#configure-the-default-syntax-in-static-configuration "Link to configure default syntax in static config") the default rule matchers syntax.
|
||||||
|
|
||||||
Start Traefik v3 with this new configuration to test it.
|
Start Traefik v3 with this new configuration to test it.
|
||||||
|
|
||||||
|
@@ -553,7 +553,7 @@ The following ciphers have been removed from the default list:
|
|||||||
- `TLS_RSA_WITH_AES_128_GCM_SHA256`
|
- `TLS_RSA_WITH_AES_128_GCM_SHA256`
|
||||||
- `TLS_RSA_WITH_AES_256_GCM_SHA384`
|
- `TLS_RSA_WITH_AES_256_GCM_SHA384`
|
||||||
|
|
||||||
To enable these ciphers, please set the option `CipherSuites` in your [TLS configuration](https://doc.traefik.io/traefik/https/tls/#cipher-suites) or set the environment variable `GODEBUG=tlsrsakex=1`.
|
To enable these ciphers, please set the option `CipherSuites` in your [TLS configuration](../https/tls.md#cipher-suites) or set the environment variable `GODEBUG=tlsrsakex=1`.
|
||||||
|
|
||||||
### Minimum TLS Version
|
### Minimum TLS Version
|
||||||
|
|
||||||
@@ -562,7 +562,7 @@ To enable these ciphers, please set the option `CipherSuites` in your [TLS confi
|
|||||||
> This change can be reverted with the `tls10server=1 GODEBUG` setting.
|
> This change can be reverted with the `tls10server=1 GODEBUG` setting.
|
||||||
> (https://go.dev/doc/go1.22#crypto/tls)
|
> (https://go.dev/doc/go1.22#crypto/tls)
|
||||||
|
|
||||||
To enable TLS 1.0, please set the option `MinVersion` to `VersionTLS10` in your [TLS configuration](https://doc.traefik.io/traefik/https/tls/#cipher-suites) or set the environment variable `GODEBUG=tls10server=1`.
|
To enable TLS 1.0, please set the option `MinVersion` to `VersionTLS10` in your [TLS configuration](../https/tls.md#cipher-suites) or set the environment variable `GODEBUG=tls10server=1`.
|
||||||
|
|
||||||
## v2.11.1
|
## v2.11.1
|
||||||
|
|
||||||
|
53
docs/content/migration/v3.md
Normal file
53
docs/content/migration/v3.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
title: "Traefik Migration Documentation"
|
||||||
|
description: "Learn the steps needed to migrate to new Traefik Proxy v3 versions. Read the technical documentation."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Migration: Steps needed between the versions
|
||||||
|
|
||||||
|
## v3.0 to v3.1
|
||||||
|
|
||||||
|
### Kubernetes Provider RBACs
|
||||||
|
|
||||||
|
Starting with v3.1, the Kubernetes Providers now use the [EndpointSlices API](https://kubernetes.io/docs/concepts/services-networking/endpoint-slices/) (Kubernetes >=v1.21) to discover service endpoint addresses.
|
||||||
|
|
||||||
|
Therefore, in the corresponding RBACs (see [KubernetesIngress](../routing/providers/kubernetes-ingress.md#configuration-example), [KubernetesCRD](../reference/dynamic-configuration/kubernetes-crd.md#rbac), and [KubernetesGateway](../reference/dynamic-configuration/kubernetes-gateway.md#rbac) provider RBACs),
|
||||||
|
the `endpoints` right has to be removed and the following `endpointslices` right has to be added.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
...
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Gateway API: KubernetesGateway Provider
|
||||||
|
|
||||||
|
In v3.1, the KubernetesGateway Provider is no longer an experimental feature.
|
||||||
|
It can be enabled without the associated `experimental.kubernetesgateway` option, which is now deprecated.
|
||||||
|
|
||||||
|
??? example "An example of the experimental `kubernetesgateway` option"
|
||||||
|
|
||||||
|
```yaml tab="File (YAML)"
|
||||||
|
experimental:
|
||||||
|
kubernetesgateway: true
|
||||||
|
```
|
||||||
|
|
||||||
|
```toml tab="File (TOML)"
|
||||||
|
[experimental]
|
||||||
|
kubernetesgateway=true
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash tab="CLI"
|
||||||
|
--experimental.kubernetesgateway=true
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Remediation
|
||||||
|
|
||||||
|
The `kubernetesgateway` option should be removed from the experimental section of the static configuration.
|
||||||
|
To configure `kubernetesgateway`, please check out the [KubernetesGateway Provider documentation](../providers/kubernetes-gateway.md).
|
@@ -275,7 +275,7 @@ version: "3.7"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
environment:
|
environment:
|
||||||
- TZ=US/Alaska
|
- TZ=US/Alaska
|
||||||
command:
|
command:
|
||||||
|
@@ -5,6 +5,8 @@ description: "Traefik supports several tracing backends, including OpenTelemetry
|
|||||||
|
|
||||||
# OpenTelemetry
|
# OpenTelemetry
|
||||||
|
|
||||||
|
Traefik Proxy follows [official OpenTelemetry semantic conventions v1.26.0](https://github.com/open-telemetry/semantic-conventions/blob/v1.26.0/docs/http/http-spans.md).
|
||||||
|
|
||||||
To enable the OpenTelemetry tracer:
|
To enable the OpenTelemetry tracer:
|
||||||
|
|
||||||
```yaml tab="File (YAML)"
|
```yaml tab="File (YAML)"
|
||||||
|
@@ -160,3 +160,28 @@ tracing:
|
|||||||
```bash tab="CLI"
|
```bash tab="CLI"
|
||||||
--tracing.capturedResponseHeaders[0]=X-CustomHeader
|
--tracing.capturedResponseHeaders[0]=X-CustomHeader
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `safeQueryParams`
|
||||||
|
|
||||||
|
_Optional, Default={}_
|
||||||
|
|
||||||
|
By default, all query parameters are redacted.
|
||||||
|
Defines the list of query parameters to not redact.
|
||||||
|
|
||||||
|
```yaml tab="File (YAML)"
|
||||||
|
tracing:
|
||||||
|
otlp:
|
||||||
|
safeQueryParams:
|
||||||
|
- bar
|
||||||
|
- buz
|
||||||
|
```
|
||||||
|
|
||||||
|
```toml tab="File (TOML)"
|
||||||
|
[tracing]
|
||||||
|
[tracing.otlp]
|
||||||
|
safeQueryParams = ["bar", "buz"]
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash tab="CLI"
|
||||||
|
--tracing.otlp.safeQueryParams=bar,buz
|
||||||
|
```
|
||||||
|
@@ -163,7 +163,7 @@ See the [Docker API Access](#docker-api-access) section for more information.
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v3.0 # The official v3 Traefik docker image
|
image: traefik:v3.1 # The official v3 Traefik docker image
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
volumes:
|
volumes:
|
||||||
|
@@ -31,10 +31,10 @@ the Traefik engineering team developed a [Custom Resource Definition](https://ku
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install Traefik Resource Definitions:
|
# Install Traefik Resource Definitions:
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
|
||||||
|
|
||||||
# Install RBAC for Traefik:
|
# Install RBAC for Traefik:
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Resource Configuration
|
## Resource Configuration
|
||||||
@@ -58,7 +58,7 @@ For this reason, users can run multiple instances of Traefik at the same time to
|
|||||||
|
|
||||||
When using a single instance of Traefik with Let's Encrypt, you should encounter no issues. However, this could be a single point of failure.
|
When using a single instance of Traefik with Let's Encrypt, you should encounter no issues. However, this could be a single point of failure.
|
||||||
Unfortunately, it is not possible to run multiple instances of Traefik Proxy 2.0 with Let's Encrypt enabled, because there is no way to ensure that the correct instance of Traefik will receive the challenge request and subsequent responses.
|
Unfortunately, it is not possible to run multiple instances of Traefik Proxy 2.0 with Let's Encrypt enabled, because there is no way to ensure that the correct instance of Traefik will receive the challenge request and subsequent responses.
|
||||||
Previous versions of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this, but due to sub-optimal performance that feature was dropped in 2.0.
|
Early versions (v1.x) of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this, but due to sub-optimal performance that feature was dropped in 2.0.
|
||||||
|
|
||||||
If you need Let's Encrypt with HA in a Kubernetes environment, we recommend using [Traefik Enterprise](https://traefik.io/traefik-enterprise/), which includes distributed Let's Encrypt as a supported feature.
|
If you need Let's Encrypt with HA in a Kubernetes environment, we recommend using [Traefik Enterprise](https://traefik.io/traefik-enterprise/), which includes distributed Let's Encrypt as a supported feature.
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ _Optional, Default: ""_
|
|||||||
|
|
||||||
A label selector can be defined to filter on specific resource objects only,
|
A label selector can be defined to filter on specific resource objects only,
|
||||||
this applies only to Traefik [Custom Resources](../routing/providers/kubernetes-crd.md#custom-resource-definition-crd)
|
this applies only to Traefik [Custom Resources](../routing/providers/kubernetes-crd.md#custom-resource-definition-crd)
|
||||||
and has no effect on Kubernetes `Secrets`, `Endpoints` and `Services`.
|
and has no effect on Kubernetes `Secrets`, `EndpointSlices` and `Services`.
|
||||||
If left empty, Traefik processes all resource objects in the configured namespaces.
|
If left empty, Traefik processes all resource objects in the configured namespaces.
|
||||||
|
|
||||||
See [label-selectors](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors) for details.
|
See [label-selectors](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors) for details.
|
||||||
|
@@ -5,7 +5,7 @@ description: "Learn how to use the Kubernetes Gateway API as a provider for conf
|
|||||||
|
|
||||||
# Traefik & Kubernetes with Gateway API
|
# Traefik & Kubernetes with Gateway API
|
||||||
|
|
||||||
The Kubernetes Gateway API, The Experimental Way.
|
The Kubernetes Gateway API Controller.
|
||||||
{: .subtitle }
|
{: .subtitle }
|
||||||
|
|
||||||
Gateway API is the evolution of Kubernetes APIs that relate to `Services`, such as `Ingress`.
|
Gateway API is the evolution of Kubernetes APIs that relate to `Services`, such as `Ingress`.
|
||||||
@@ -14,32 +14,7 @@ The Gateway API project is part of Kubernetes, working under SIG-NETWORK.
|
|||||||
The Kubernetes Gateway provider is a Traefik implementation of the [Gateway API](https://gateway-api.sigs.k8s.io/)
|
The Kubernetes Gateway provider is a Traefik implementation of the [Gateway API](https://gateway-api.sigs.k8s.io/)
|
||||||
specifications from the Kubernetes Special Interest Groups (SIGs).
|
specifications from the Kubernetes Special Interest Groups (SIGs).
|
||||||
|
|
||||||
This provider is proposed as an experimental feature and partially supports Gateway API [v1.0.0](https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.0.0) specification.
|
This provider supports Gateway API [v1.1.0](https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.1.0) specification.
|
||||||
|
|
||||||
!!! warning "Enabling The Experimental Kubernetes Gateway Provider"
|
|
||||||
|
|
||||||
Since this provider is still experimental, it needs to be activated in the experimental section of the static configuration.
|
|
||||||
|
|
||||||
```yaml tab="File (YAML)"
|
|
||||||
experimental:
|
|
||||||
kubernetesGateway: true
|
|
||||||
|
|
||||||
providers:
|
|
||||||
kubernetesGateway: {}
|
|
||||||
#...
|
|
||||||
```
|
|
||||||
|
|
||||||
```toml tab="File (TOML)"
|
|
||||||
[experimental]
|
|
||||||
kubernetesGateway = true
|
|
||||||
|
|
||||||
[providers.kubernetesGateway]
|
|
||||||
#...
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash tab="CLI"
|
|
||||||
--experimental.kubernetesgateway=true --providers.kubernetesgateway=true #...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
@@ -80,7 +80,7 @@ When using a single instance of Traefik Proxy with Let's Encrypt, you should enc
|
|||||||
However, this could be a single point of failure.
|
However, this could be a single point of failure.
|
||||||
Unfortunately, it is not possible to run multiple instances of Traefik 2.0 with Let's Encrypt enabled,
|
Unfortunately, it is not possible to run multiple instances of Traefik 2.0 with Let's Encrypt enabled,
|
||||||
because there is no way to ensure that the correct instance of Traefik receives the challenge request, and subsequent responses.
|
because there is no way to ensure that the correct instance of Traefik receives the challenge request, and subsequent responses.
|
||||||
Previous versions of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this,
|
Early versions (v1.x) of Traefik used a [KV store](https://doc.traefik.io/traefik/v1.7/configuration/acme/#storage) to attempt to achieve this,
|
||||||
but due to sub-optimal performance that feature was dropped in 2.0.
|
but due to sub-optimal performance that feature was dropped in 2.0.
|
||||||
|
|
||||||
If you need Let's Encrypt with high availability in a Kubernetes environment,
|
If you need Let's Encrypt with high availability in a Kubernetes environment,
|
||||||
@@ -494,6 +494,6 @@ providers:
|
|||||||
### Further
|
### Further
|
||||||
|
|
||||||
To learn more about the various aspects of the Ingress specification that Traefik supports,
|
To learn more about the various aspects of the Ingress specification that Traefik supports,
|
||||||
many examples of Ingresses definitions are located in the test [examples](https://github.com/traefik/traefik/tree/v3.0/pkg/provider/kubernetes/ingress/fixtures) of the Traefik repository.
|
many examples of Ingresses definitions are located in the test [examples](https://github.com/traefik/traefik/tree/v3.1/pkg/provider/kubernetes/ingress/fixtures) of the Traefik repository.
|
||||||
|
|
||||||
{!traefik-for-business-applications.md!}
|
{!traefik-for-business-applications.md!}
|
||||||
|
@@ -150,8 +150,8 @@ Below is the list of the currently supported providers in Traefik.
|
|||||||
|
|
||||||
!!! info "More Providers"
|
!!! info "More Providers"
|
||||||
|
|
||||||
The current version of Traefik does not yet support every provider that Traefik v1.7 did.
|
The current version of Traefik does not yet support every provider that Traefik v2.11 did.
|
||||||
See the [previous version (v1.7)](https://doc.traefik.io/traefik/v1.7/) for more providers.
|
See the [previous version (v2.11)](https://doc.traefik.io/traefik/v2.11/) for more information.
|
||||||
|
|
||||||
### Configuration Reload Frequency
|
### Configuration Reload Frequency
|
||||||
|
|
||||||
|
@@ -209,7 +209,7 @@ See the [Docker Swarm API Access](#docker-api-access) section for more informati
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
image: traefik:v3.0 # The official v3 Traefik docker image
|
image: traefik:v3.1 # The official v3 Traefik docker image
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
volumes:
|
volumes:
|
||||||
|
@@ -55,6 +55,7 @@
|
|||||||
- "traefik.http.middlewares.middleware12.headers.allowedhosts=foobar, foobar"
|
- "traefik.http.middlewares.middleware12.headers.allowedhosts=foobar, foobar"
|
||||||
- "traefik.http.middlewares.middleware12.headers.browserxssfilter=true"
|
- "traefik.http.middlewares.middleware12.headers.browserxssfilter=true"
|
||||||
- "traefik.http.middlewares.middleware12.headers.contentsecuritypolicy=foobar"
|
- "traefik.http.middlewares.middleware12.headers.contentsecuritypolicy=foobar"
|
||||||
|
- "traefik.http.middlewares.middleware12.headers.contentsecuritypolicyreportonly=foobar"
|
||||||
- "traefik.http.middlewares.middleware12.headers.contenttypenosniff=true"
|
- "traefik.http.middlewares.middleware12.headers.contenttypenosniff=true"
|
||||||
- "traefik.http.middlewares.middleware12.headers.custombrowserxssvalue=foobar"
|
- "traefik.http.middlewares.middleware12.headers.custombrowserxssvalue=foobar"
|
||||||
- "traefik.http.middlewares.middleware12.headers.customframeoptionsvalue=foobar"
|
- "traefik.http.middlewares.middleware12.headers.customframeoptionsvalue=foobar"
|
||||||
|
@@ -198,6 +198,7 @@
|
|||||||
browserXssFilter = true
|
browserXssFilter = true
|
||||||
customBrowserXSSValue = "foobar"
|
customBrowserXSSValue = "foobar"
|
||||||
contentSecurityPolicy = "foobar"
|
contentSecurityPolicy = "foobar"
|
||||||
|
contentSecurityPolicyReportOnly = "foobar"
|
||||||
publicKey = "foobar"
|
publicKey = "foobar"
|
||||||
referrerPolicy = "foobar"
|
referrerPolicy = "foobar"
|
||||||
permissionsPolicy = "foobar"
|
permissionsPolicy = "foobar"
|
||||||
|
@@ -242,6 +242,7 @@ http:
|
|||||||
browserXssFilter: true
|
browserXssFilter: true
|
||||||
customBrowserXSSValue: foobar
|
customBrowserXSSValue: foobar
|
||||||
contentSecurityPolicy: foobar
|
contentSecurityPolicy: foobar
|
||||||
|
contentSecurityPolicyReportOnly: foobar
|
||||||
publicKey: foobar
|
publicKey: foobar
|
||||||
referrerPolicy: foobar
|
referrerPolicy: foobar
|
||||||
permissionsPolicy: foobar
|
permissionsPolicy: foobar
|
||||||
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -63,12 +63,12 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: |-
|
description: |-
|
||||||
Middlewares defines the list of references to Middleware resources.
|
Middlewares defines the list of references to Middleware resources.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-middleware
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-middleware
|
||||||
items:
|
items:
|
||||||
description: MiddlewareRef is a reference to a Middleware
|
description: MiddlewareRef is a reference to a Middleware
|
||||||
resource.
|
resource.
|
||||||
@@ -88,7 +88,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -98,6 +98,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be
|
||||||
|
sent to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for
|
||||||
|
the health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme
|
||||||
|
for the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -120,6 +181,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -161,7 +229,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -209,7 +277,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- kind
|
- kind
|
||||||
@@ -219,18 +287,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration.
|
TLS defines the TLS configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -249,17 +317,17 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSOption.
|
Name defines the name of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSOption.
|
Namespace defines the namespace of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
@@ -276,12 +344,12 @@ spec:
|
|||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSStore.
|
Name defines the name of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSStore.
|
Namespace defines the namespace of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
@@ -341,7 +409,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -354,7 +422,7 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule_1
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares defines the list of references to MiddlewareTCP
|
description: Middlewares defines the list of references to MiddlewareTCP
|
||||||
@@ -378,7 +446,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority_1
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: Services defines the list of TCP services.
|
description: Services defines the list of TCP services.
|
||||||
@@ -401,6 +469,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -412,7 +487,7 @@ spec:
|
|||||||
proxyProtocol:
|
proxyProtocol:
|
||||||
description: |-
|
description: |-
|
||||||
ProxyProtocol defines the PROXY protocol configuration.
|
ProxyProtocol defines the PROXY protocol configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#proxy-protocol
|
||||||
properties:
|
properties:
|
||||||
version:
|
version:
|
||||||
description: Version defines the PROXY Protocol version
|
description: Version defines the PROXY Protocol version
|
||||||
@@ -450,7 +525,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax_1
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- match
|
- match
|
||||||
@@ -459,18 +534,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls_1
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -489,7 +564,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: Name defines the name of the referenced Traefik
|
description: Name defines the name of the referenced Traefik
|
||||||
@@ -581,7 +656,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -612,6 +687,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -661,7 +743,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
Middleware is the CRD implementation of a Traefik Middleware.
|
Middleware is the CRD implementation of a Traefik Middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -687,7 +769,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
AddPrefix holds the add prefix middleware configuration.
|
AddPrefix holds the add prefix middleware configuration.
|
||||||
This middleware updates the path of a request before forwarding it.
|
This middleware updates the path of a request before forwarding it.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/addprefix/
|
||||||
properties:
|
properties:
|
||||||
prefix:
|
prefix:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -699,12 +781,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
BasicAuth holds the basic auth middleware configuration.
|
BasicAuth holds the basic auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -725,7 +807,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Buffering holds the buffering middleware configuration.
|
Buffering holds the buffering middleware configuration.
|
||||||
This middleware retries or limits the size of requests that can be forwarded to backends.
|
This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
properties:
|
properties:
|
||||||
maxRequestBodyBytes:
|
maxRequestBodyBytes:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -757,14 +839,14 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RetryExpression defines the retry conditions.
|
RetryExpression defines the retry conditions.
|
||||||
It is a logical combination of functions with operators AND (&&) and OR (||).
|
It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#retryexpression
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
chain:
|
chain:
|
||||||
description: |-
|
description: |-
|
||||||
Chain holds the configuration of the chain middleware.
|
Chain holds the configuration of the chain middleware.
|
||||||
This middleware enables to define reusable combinations of other pieces of middleware.
|
This middleware enables to define reusable combinations of other pieces of middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/chain/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/chain/
|
||||||
properties:
|
properties:
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares is the list of MiddlewareRef which composes
|
description: Middlewares is the list of MiddlewareRef which composes
|
||||||
@@ -823,7 +905,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Compress holds the compress middleware configuration.
|
Compress holds the compress middleware configuration.
|
||||||
This middleware compresses responses before sending them to the client, using gzip compression.
|
This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/compress/
|
||||||
properties:
|
properties:
|
||||||
defaultEncoding:
|
defaultEncoding:
|
||||||
description: DefaultEncoding specifies the default encoding if
|
description: DefaultEncoding specifies the default encoding if
|
||||||
@@ -866,12 +948,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
DigestAuth holds the digest auth middleware configuration.
|
DigestAuth holds the digest auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/digestauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -891,7 +973,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ErrorPage holds the custom error middleware configuration.
|
ErrorPage holds the custom error middleware configuration.
|
||||||
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/
|
||||||
properties:
|
properties:
|
||||||
query:
|
query:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -901,8 +983,69 @@ spec:
|
|||||||
service:
|
service:
|
||||||
description: |-
|
description: |-
|
||||||
Service defines the reference to a Kubernetes Service that will serve the error page.
|
Service defines the reference to a Kubernetes Service that will serve the error page.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/#service
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/#service
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in
|
||||||
|
the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -925,6 +1068,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -966,7 +1116,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -1024,7 +1174,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ForwardAuth holds the forward auth middleware configuration.
|
ForwardAuth holds the forward auth middleware configuration.
|
||||||
This middleware delegates the request authentication to a Service.
|
This middleware delegates the request authentication to a Service.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/
|
||||||
properties:
|
properties:
|
||||||
addAuthCookiesToResponse:
|
addAuthCookiesToResponse:
|
||||||
description: AddAuthCookiesToResponse defines the list of cookies
|
description: AddAuthCookiesToResponse defines the list of cookies
|
||||||
@@ -1052,7 +1202,7 @@ spec:
|
|||||||
authResponseHeadersRegex:
|
authResponseHeadersRegex:
|
||||||
description: |-
|
description: |-
|
||||||
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
type: string
|
type: string
|
||||||
tls:
|
tls:
|
||||||
description: TLS defines the configuration used to secure the
|
description: TLS defines the configuration used to secure the
|
||||||
@@ -1099,7 +1249,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Headers holds the headers middleware configuration.
|
Headers holds the headers middleware configuration.
|
||||||
This middleware manages the requests and responses headers.
|
This middleware manages the requests and responses headers.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/headers/#customrequestheaders
|
||||||
properties:
|
properties:
|
||||||
accessControlAllowCredentials:
|
accessControlAllowCredentials:
|
||||||
description: AccessControlAllowCredentials defines whether the
|
description: AccessControlAllowCredentials defines whether the
|
||||||
@@ -1159,6 +1309,10 @@ spec:
|
|||||||
description: ContentSecurityPolicy defines the Content-Security-Policy
|
description: ContentSecurityPolicy defines the Content-Security-Policy
|
||||||
header value.
|
header value.
|
||||||
type: string
|
type: string
|
||||||
|
contentSecurityPolicyReportOnly:
|
||||||
|
description: ContentSecurityPolicyReportOnly defines the Content-Security-Policy-Report-Only
|
||||||
|
header value.
|
||||||
|
type: string
|
||||||
contentTypeNosniff:
|
contentTypeNosniff:
|
||||||
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
||||||
header with the nosniff value.
|
header with the nosniff value.
|
||||||
@@ -1266,7 +1420,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
InFlightReq holds the in-flight request middleware configuration.
|
InFlightReq holds the in-flight request middleware configuration.
|
||||||
This middleware limits the number of requests being processed and served concurrently.
|
This middleware limits the number of requests being processed and served concurrently.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/
|
||||||
properties:
|
properties:
|
||||||
amount:
|
amount:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1279,12 +1433,12 @@ spec:
|
|||||||
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
If several strategies are defined at the same time, an error will be raised.
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
If none are set, the default is to use the requestHost.
|
If none are set, the default is to use the requestHost.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/#sourcecriterion
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1313,12 +1467,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList holds the IP allowlist middleware configuration.
|
IPAllowList holds the IP allowlist middleware configuration.
|
||||||
This middleware limits allowed requests based on the client IP.
|
This middleware limits allowed requests based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1350,7 +1504,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1375,7 +1529,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
This middleware adds the selected data from the passed client TLS certificate to a header.
|
This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/passtlsclientcert/
|
||||||
properties:
|
properties:
|
||||||
info:
|
info:
|
||||||
description: Info selects the specific client certificate details
|
description: Info selects the specific client certificate details
|
||||||
@@ -1484,7 +1638,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RateLimit holds the rate limit configuration.
|
RateLimit holds the rate limit configuration.
|
||||||
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ratelimit/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ratelimit/
|
||||||
properties:
|
properties:
|
||||||
average:
|
average:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1517,7 +1671,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1546,7 +1700,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectRegex holds the redirect regex middleware configuration.
|
RedirectRegex holds the redirect regex middleware configuration.
|
||||||
This middleware redirects a request using regex matching and replacement.
|
This middleware redirects a request using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectregex/#regex
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -1565,7 +1719,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectScheme holds the redirect scheme middleware configuration.
|
RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
This middleware redirects requests from a scheme/port to another.
|
This middleware redirects requests from a scheme/port to another.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectscheme/
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -1582,7 +1736,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePath holds the replace path middleware configuration.
|
ReplacePath holds the replace path middleware configuration.
|
||||||
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepath/
|
||||||
properties:
|
properties:
|
||||||
path:
|
path:
|
||||||
description: Path defines the path to use as replacement in the
|
description: Path defines the path to use as replacement in the
|
||||||
@@ -1593,7 +1747,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePathRegex holds the replace path regex middleware configuration.
|
ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
This middleware replaces the path of a URL using regex matching and replacement.
|
This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepathregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression used to match
|
description: Regex defines the regular expression used to match
|
||||||
@@ -1609,7 +1763,7 @@ spec:
|
|||||||
Retry holds the retry middleware configuration.
|
Retry holds the retry middleware configuration.
|
||||||
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/retry/
|
||||||
properties:
|
properties:
|
||||||
attempts:
|
attempts:
|
||||||
description: Attempts defines how many times the request should
|
description: Attempts defines how many times the request should
|
||||||
@@ -1631,7 +1785,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefix holds the strip prefix middleware configuration.
|
StripPrefix holds the strip prefix middleware configuration.
|
||||||
This middleware removes the specified prefixes from the URL path.
|
This middleware removes the specified prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefix/
|
||||||
properties:
|
properties:
|
||||||
forceSlash:
|
forceSlash:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1650,7 +1804,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
This middleware removes the matching prefixes from the URL path.
|
This middleware removes the matching prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefixregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression to match the
|
description: Regex defines the regular expression to match the
|
||||||
@@ -1687,7 +1841,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1723,7 +1877,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList defines the IPAllowList middleware configuration.
|
IPAllowList defines the IPAllowList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
@@ -1737,7 +1891,7 @@ spec:
|
|||||||
IPWhiteList defines the IPWhiteList middleware configuration.
|
IPWhiteList defines the IPWhiteList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
Deprecated: please use IPAllowList instead.
|
Deprecated: please use IPAllowList instead.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipwhitelist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipwhitelist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
@@ -1776,7 +1930,7 @@ spec:
|
|||||||
ServersTransport is the CRD implementation of a ServersTransport.
|
ServersTransport is the CRD implementation of a ServersTransport.
|
||||||
If no serversTransport is specified, the default@internal will be used.
|
If no serversTransport is specified, the default@internal will be used.
|
||||||
The default@internal serversTransport is created from the static configuration.
|
The default@internal serversTransport is created from the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_1
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1915,7 +2069,7 @@ spec:
|
|||||||
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
||||||
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
||||||
The default@internal tcpServersTransport can be configured in the static configuration.
|
The default@internal tcpServersTransport can be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_3
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_3
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2033,7 +2187,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2058,14 +2212,14 @@ spec:
|
|||||||
alpnProtocols:
|
alpnProtocols:
|
||||||
description: |-
|
description: |-
|
||||||
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#alpn-protocols
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#alpn-protocols
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
cipherSuites:
|
cipherSuites:
|
||||||
description: |-
|
description: |-
|
||||||
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#cipher-suites
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#cipher-suites
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
@@ -2093,7 +2247,7 @@ spec:
|
|||||||
curvePreferences:
|
curvePreferences:
|
||||||
description: |-
|
description: |-
|
||||||
CurvePreferences defines the preferred elliptic curves in a specific order.
|
CurvePreferences defines the preferred elliptic curves in a specific order.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#curve-preferences
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#curve-preferences
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
@@ -2149,7 +2303,7 @@ spec:
|
|||||||
TLSStore is the CRD implementation of a Traefik TLS Store.
|
TLSStore is the CRD implementation of a Traefik TLS Store.
|
||||||
For the time being, only the TLSStore named default is supported.
|
For the time being, only the TLSStore named default is supported.
|
||||||
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#certificates-stores
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#certificates-stores
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2247,7 +2401,7 @@ spec:
|
|||||||
TraefikService object allows to:
|
TraefikService object allows to:
|
||||||
- Apply weight to Services on load-balancing
|
- Apply weight to Services on load-balancing
|
||||||
- Mirror traffic on services
|
- Mirror traffic on services
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-traefikservice
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-traefikservice
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2272,6 +2426,67 @@ spec:
|
|||||||
mirroring:
|
mirroring:
|
||||||
description: Mirroring defines the Mirroring service configuration.
|
description: Mirroring defines the Mirroring service configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent to
|
||||||
|
the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in the
|
||||||
|
Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the health
|
||||||
|
check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the health
|
||||||
|
check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2291,6 +2506,67 @@ spec:
|
|||||||
items:
|
items:
|
||||||
description: MirrorService holds the mirror configuration.
|
description: MirrorService holds the mirror configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2313,6 +2589,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2359,7 +2642,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2419,6 +2702,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2459,7 +2749,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2511,6 +2801,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2533,6 +2884,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2574,7 +2932,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2621,7 +2979,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines whether sticky sessions are enabled.
|
Sticky defines whether sticky sessions are enabled.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
@@ -8,12 +8,19 @@ rules:
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
|
- nodes
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
|
@@ -15,12 +15,18 @@ rules:
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- gateway.networking.k8s.io
|
- gateway.networking.k8s.io
|
||||||
resources:
|
resources:
|
||||||
|
@@ -25,7 +25,7 @@ spec:
|
|||||||
serviceAccountName: traefik-controller
|
serviceAccountName: traefik-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --entryPoints.web.address=:80
|
- --entryPoints.web.address=:80
|
||||||
- --entryPoints.websecure.address=:443
|
- --entryPoints.websecure.address=:443
|
||||||
|
@@ -71,6 +71,7 @@ THIS FILE MUST NOT BE EDITED BY HAND
|
|||||||
| `traefik/http/middlewares/Middleware12/headers/allowedHosts/1` | `foobar` |
|
| `traefik/http/middlewares/Middleware12/headers/allowedHosts/1` | `foobar` |
|
||||||
| `traefik/http/middlewares/Middleware12/headers/browserXssFilter` | `true` |
|
| `traefik/http/middlewares/Middleware12/headers/browserXssFilter` | `true` |
|
||||||
| `traefik/http/middlewares/Middleware12/headers/contentSecurityPolicy` | `foobar` |
|
| `traefik/http/middlewares/Middleware12/headers/contentSecurityPolicy` | `foobar` |
|
||||||
|
| `traefik/http/middlewares/Middleware12/headers/contentSecurityPolicyReportOnly` | `foobar` |
|
||||||
| `traefik/http/middlewares/Middleware12/headers/contentTypeNosniff` | `true` |
|
| `traefik/http/middlewares/Middleware12/headers/contentTypeNosniff` | `true` |
|
||||||
| `traefik/http/middlewares/Middleware12/headers/customBrowserXSSValue` | `foobar` |
|
| `traefik/http/middlewares/Middleware12/headers/customBrowserXSSValue` | `foobar` |
|
||||||
| `traefik/http/middlewares/Middleware12/headers/customFrameOptionsValue` | `foobar` |
|
| `traefik/http/middlewares/Middleware12/headers/customFrameOptionsValue` | `foobar` |
|
||||||
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -63,12 +63,12 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: |-
|
description: |-
|
||||||
Middlewares defines the list of references to Middleware resources.
|
Middlewares defines the list of references to Middleware resources.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-middleware
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-middleware
|
||||||
items:
|
items:
|
||||||
description: MiddlewareRef is a reference to a Middleware
|
description: MiddlewareRef is a reference to a Middleware
|
||||||
resource.
|
resource.
|
||||||
@@ -88,7 +88,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -98,6 +98,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be
|
||||||
|
sent to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for
|
||||||
|
the health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme
|
||||||
|
for the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -120,6 +181,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -161,7 +229,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -209,7 +277,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- kind
|
- kind
|
||||||
@@ -219,18 +287,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration.
|
TLS defines the TLS configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -249,17 +317,17 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSOption.
|
Name defines the name of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSOption.
|
Namespace defines the namespace of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
@@ -276,12 +344,12 @@ spec:
|
|||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSStore.
|
Name defines the name of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSStore.
|
Namespace defines the namespace of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -56,7 +56,7 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule_1
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares defines the list of references to MiddlewareTCP
|
description: Middlewares defines the list of references to MiddlewareTCP
|
||||||
@@ -80,7 +80,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority_1
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: Services defines the list of TCP services.
|
description: Services defines the list of TCP services.
|
||||||
@@ -103,6 +103,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -114,7 +121,7 @@ spec:
|
|||||||
proxyProtocol:
|
proxyProtocol:
|
||||||
description: |-
|
description: |-
|
||||||
ProxyProtocol defines the PROXY protocol configuration.
|
ProxyProtocol defines the PROXY protocol configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#proxy-protocol
|
||||||
properties:
|
properties:
|
||||||
version:
|
version:
|
||||||
description: Version defines the PROXY Protocol version
|
description: Version defines the PROXY Protocol version
|
||||||
@@ -152,7 +159,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax_1
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- match
|
- match
|
||||||
@@ -161,18 +168,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls_1
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -191,7 +198,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: Name defines the name of the referenced Traefik
|
description: Name defines the name of the referenced Traefik
|
||||||
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -74,6 +74,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
|
@@ -19,7 +19,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
Middleware is the CRD implementation of a Traefik Middleware.
|
Middleware is the CRD implementation of a Traefik Middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -45,7 +45,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
AddPrefix holds the add prefix middleware configuration.
|
AddPrefix holds the add prefix middleware configuration.
|
||||||
This middleware updates the path of a request before forwarding it.
|
This middleware updates the path of a request before forwarding it.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/addprefix/
|
||||||
properties:
|
properties:
|
||||||
prefix:
|
prefix:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -57,12 +57,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
BasicAuth holds the basic auth middleware configuration.
|
BasicAuth holds the basic auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -83,7 +83,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Buffering holds the buffering middleware configuration.
|
Buffering holds the buffering middleware configuration.
|
||||||
This middleware retries or limits the size of requests that can be forwarded to backends.
|
This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
properties:
|
properties:
|
||||||
maxRequestBodyBytes:
|
maxRequestBodyBytes:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -115,14 +115,14 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RetryExpression defines the retry conditions.
|
RetryExpression defines the retry conditions.
|
||||||
It is a logical combination of functions with operators AND (&&) and OR (||).
|
It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#retryexpression
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
chain:
|
chain:
|
||||||
description: |-
|
description: |-
|
||||||
Chain holds the configuration of the chain middleware.
|
Chain holds the configuration of the chain middleware.
|
||||||
This middleware enables to define reusable combinations of other pieces of middleware.
|
This middleware enables to define reusable combinations of other pieces of middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/chain/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/chain/
|
||||||
properties:
|
properties:
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares is the list of MiddlewareRef which composes
|
description: Middlewares is the list of MiddlewareRef which composes
|
||||||
@@ -181,7 +181,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Compress holds the compress middleware configuration.
|
Compress holds the compress middleware configuration.
|
||||||
This middleware compresses responses before sending them to the client, using gzip compression.
|
This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/compress/
|
||||||
properties:
|
properties:
|
||||||
defaultEncoding:
|
defaultEncoding:
|
||||||
description: DefaultEncoding specifies the default encoding if
|
description: DefaultEncoding specifies the default encoding if
|
||||||
@@ -224,12 +224,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
DigestAuth holds the digest auth middleware configuration.
|
DigestAuth holds the digest auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/digestauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -249,7 +249,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ErrorPage holds the custom error middleware configuration.
|
ErrorPage holds the custom error middleware configuration.
|
||||||
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/
|
||||||
properties:
|
properties:
|
||||||
query:
|
query:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -259,8 +259,69 @@ spec:
|
|||||||
service:
|
service:
|
||||||
description: |-
|
description: |-
|
||||||
Service defines the reference to a Kubernetes Service that will serve the error page.
|
Service defines the reference to a Kubernetes Service that will serve the error page.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/#service
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/#service
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in
|
||||||
|
the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -283,6 +344,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -324,7 +392,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -382,7 +450,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ForwardAuth holds the forward auth middleware configuration.
|
ForwardAuth holds the forward auth middleware configuration.
|
||||||
This middleware delegates the request authentication to a Service.
|
This middleware delegates the request authentication to a Service.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/
|
||||||
properties:
|
properties:
|
||||||
addAuthCookiesToResponse:
|
addAuthCookiesToResponse:
|
||||||
description: AddAuthCookiesToResponse defines the list of cookies
|
description: AddAuthCookiesToResponse defines the list of cookies
|
||||||
@@ -410,7 +478,7 @@ spec:
|
|||||||
authResponseHeadersRegex:
|
authResponseHeadersRegex:
|
||||||
description: |-
|
description: |-
|
||||||
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
type: string
|
type: string
|
||||||
tls:
|
tls:
|
||||||
description: TLS defines the configuration used to secure the
|
description: TLS defines the configuration used to secure the
|
||||||
@@ -457,7 +525,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Headers holds the headers middleware configuration.
|
Headers holds the headers middleware configuration.
|
||||||
This middleware manages the requests and responses headers.
|
This middleware manages the requests and responses headers.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/headers/#customrequestheaders
|
||||||
properties:
|
properties:
|
||||||
accessControlAllowCredentials:
|
accessControlAllowCredentials:
|
||||||
description: AccessControlAllowCredentials defines whether the
|
description: AccessControlAllowCredentials defines whether the
|
||||||
@@ -517,6 +585,10 @@ spec:
|
|||||||
description: ContentSecurityPolicy defines the Content-Security-Policy
|
description: ContentSecurityPolicy defines the Content-Security-Policy
|
||||||
header value.
|
header value.
|
||||||
type: string
|
type: string
|
||||||
|
contentSecurityPolicyReportOnly:
|
||||||
|
description: ContentSecurityPolicyReportOnly defines the Content-Security-Policy-Report-Only
|
||||||
|
header value.
|
||||||
|
type: string
|
||||||
contentTypeNosniff:
|
contentTypeNosniff:
|
||||||
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
||||||
header with the nosniff value.
|
header with the nosniff value.
|
||||||
@@ -624,7 +696,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
InFlightReq holds the in-flight request middleware configuration.
|
InFlightReq holds the in-flight request middleware configuration.
|
||||||
This middleware limits the number of requests being processed and served concurrently.
|
This middleware limits the number of requests being processed and served concurrently.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/
|
||||||
properties:
|
properties:
|
||||||
amount:
|
amount:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -637,12 +709,12 @@ spec:
|
|||||||
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
If several strategies are defined at the same time, an error will be raised.
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
If none are set, the default is to use the requestHost.
|
If none are set, the default is to use the requestHost.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/#sourcecriterion
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -671,12 +743,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList holds the IP allowlist middleware configuration.
|
IPAllowList holds the IP allowlist middleware configuration.
|
||||||
This middleware limits allowed requests based on the client IP.
|
This middleware limits allowed requests based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -708,7 +780,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -733,7 +805,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
This middleware adds the selected data from the passed client TLS certificate to a header.
|
This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/passtlsclientcert/
|
||||||
properties:
|
properties:
|
||||||
info:
|
info:
|
||||||
description: Info selects the specific client certificate details
|
description: Info selects the specific client certificate details
|
||||||
@@ -842,7 +914,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RateLimit holds the rate limit configuration.
|
RateLimit holds the rate limit configuration.
|
||||||
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ratelimit/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ratelimit/
|
||||||
properties:
|
properties:
|
||||||
average:
|
average:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -875,7 +947,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -904,7 +976,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectRegex holds the redirect regex middleware configuration.
|
RedirectRegex holds the redirect regex middleware configuration.
|
||||||
This middleware redirects a request using regex matching and replacement.
|
This middleware redirects a request using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectregex/#regex
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -923,7 +995,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectScheme holds the redirect scheme middleware configuration.
|
RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
This middleware redirects requests from a scheme/port to another.
|
This middleware redirects requests from a scheme/port to another.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectscheme/
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -940,7 +1012,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePath holds the replace path middleware configuration.
|
ReplacePath holds the replace path middleware configuration.
|
||||||
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepath/
|
||||||
properties:
|
properties:
|
||||||
path:
|
path:
|
||||||
description: Path defines the path to use as replacement in the
|
description: Path defines the path to use as replacement in the
|
||||||
@@ -951,7 +1023,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePathRegex holds the replace path regex middleware configuration.
|
ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
This middleware replaces the path of a URL using regex matching and replacement.
|
This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepathregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression used to match
|
description: Regex defines the regular expression used to match
|
||||||
@@ -967,7 +1039,7 @@ spec:
|
|||||||
Retry holds the retry middleware configuration.
|
Retry holds the retry middleware configuration.
|
||||||
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/retry/
|
||||||
properties:
|
properties:
|
||||||
attempts:
|
attempts:
|
||||||
description: Attempts defines how many times the request should
|
description: Attempts defines how many times the request should
|
||||||
@@ -989,7 +1061,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefix holds the strip prefix middleware configuration.
|
StripPrefix holds the strip prefix middleware configuration.
|
||||||
This middleware removes the specified prefixes from the URL path.
|
This middleware removes the specified prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefix/
|
||||||
properties:
|
properties:
|
||||||
forceSlash:
|
forceSlash:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1008,7 +1080,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
This middleware removes the matching prefixes from the URL path.
|
This middleware removes the matching prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefixregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression to match the
|
description: Regex defines the regular expression to match the
|
||||||
|
@@ -19,7 +19,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -55,7 +55,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList defines the IPAllowList middleware configuration.
|
IPAllowList defines the IPAllowList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
@@ -69,7 +69,7 @@ spec:
|
|||||||
IPWhiteList defines the IPWhiteList middleware configuration.
|
IPWhiteList defines the IPWhiteList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
Deprecated: please use IPAllowList instead.
|
Deprecated: please use IPAllowList instead.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipwhitelist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipwhitelist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
|
@@ -21,7 +21,7 @@ spec:
|
|||||||
ServersTransport is the CRD implementation of a ServersTransport.
|
ServersTransport is the CRD implementation of a ServersTransport.
|
||||||
If no serversTransport is specified, the default@internal will be used.
|
If no serversTransport is specified, the default@internal will be used.
|
||||||
The default@internal serversTransport is created from the static configuration.
|
The default@internal serversTransport is created from the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_1
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
|
@@ -21,7 +21,7 @@ spec:
|
|||||||
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
||||||
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
||||||
The default@internal tcpServersTransport can be configured in the static configuration.
|
The default@internal tcpServersTransport can be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_3
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_3
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
|
@@ -19,7 +19,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -44,14 +44,14 @@ spec:
|
|||||||
alpnProtocols:
|
alpnProtocols:
|
||||||
description: |-
|
description: |-
|
||||||
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#alpn-protocols
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#alpn-protocols
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
cipherSuites:
|
cipherSuites:
|
||||||
description: |-
|
description: |-
|
||||||
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#cipher-suites
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#cipher-suites
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
@@ -79,7 +79,7 @@ spec:
|
|||||||
curvePreferences:
|
curvePreferences:
|
||||||
description: |-
|
description: |-
|
||||||
CurvePreferences defines the preferred elliptic curves in a specific order.
|
CurvePreferences defines the preferred elliptic curves in a specific order.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#curve-preferences
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#curve-preferences
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@@ -21,7 +21,7 @@ spec:
|
|||||||
TLSStore is the CRD implementation of a Traefik TLS Store.
|
TLSStore is the CRD implementation of a Traefik TLS Store.
|
||||||
For the time being, only the TLSStore named default is supported.
|
For the time being, only the TLSStore named default is supported.
|
||||||
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#certificates-stores
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#certificates-stores
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
|
@@ -22,7 +22,7 @@ spec:
|
|||||||
TraefikService object allows to:
|
TraefikService object allows to:
|
||||||
- Apply weight to Services on load-balancing
|
- Apply weight to Services on load-balancing
|
||||||
- Mirror traffic on services
|
- Mirror traffic on services
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-traefikservice
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-traefikservice
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -47,6 +47,67 @@ spec:
|
|||||||
mirroring:
|
mirroring:
|
||||||
description: Mirroring defines the Mirroring service configuration.
|
description: Mirroring defines the Mirroring service configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent to
|
||||||
|
the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in the
|
||||||
|
Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the health
|
||||||
|
check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the health
|
||||||
|
check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -66,6 +127,67 @@ spec:
|
|||||||
items:
|
items:
|
||||||
description: MirrorService holds the mirror configuration.
|
description: MirrorService holds the mirror configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -88,6 +210,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -134,7 +263,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -194,6 +323,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -234,7 +370,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -286,6 +422,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -308,6 +505,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -349,7 +553,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -396,7 +600,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines whether sticky sessions are enabled.
|
Sticky defines whether sticky sessions are enabled.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
@@ -211,17 +211,35 @@ WriteTimeout is the maximum duration before timing out writes of the response. I
|
|||||||
Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```)
|
Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```)
|
||||||
|
|
||||||
`--experimental.kubernetesgateway`:
|
`--experimental.kubernetesgateway`:
|
||||||
Allow the Kubernetes gateway api provider usage. (Default: ```false```)
|
(Deprecated) Allow the Kubernetes gateway api provider usage. (Default: ```false```)
|
||||||
|
|
||||||
`--experimental.localplugins.<name>`:
|
`--experimental.localplugins.<name>`:
|
||||||
Local plugins configuration. (Default: ```false```)
|
Local plugins configuration. (Default: ```false```)
|
||||||
|
|
||||||
`--experimental.localplugins.<name>.modulename`:
|
`--experimental.localplugins.<name>.modulename`:
|
||||||
plugin's module name.
|
Plugin's module name.
|
||||||
|
|
||||||
|
`--experimental.localplugins.<name>.settings`:
|
||||||
|
Plugin's settings (works only for wasm plugins).
|
||||||
|
|
||||||
|
`--experimental.localplugins.<name>.settings.envs`:
|
||||||
|
Environment variables to forward to the wasm guest.
|
||||||
|
|
||||||
|
`--experimental.localplugins.<name>.settings.mounts`:
|
||||||
|
Directory to mount to the wasm guest.
|
||||||
|
|
||||||
`--experimental.plugins.<name>.modulename`:
|
`--experimental.plugins.<name>.modulename`:
|
||||||
plugin's module name.
|
plugin's module name.
|
||||||
|
|
||||||
|
`--experimental.plugins.<name>.settings`:
|
||||||
|
Plugin's settings (works only for wasm plugins).
|
||||||
|
|
||||||
|
`--experimental.plugins.<name>.settings.envs`:
|
||||||
|
Environment variables to forward to the wasm guest.
|
||||||
|
|
||||||
|
`--experimental.plugins.<name>.settings.mounts`:
|
||||||
|
Directory to mount to the wasm guest.
|
||||||
|
|
||||||
`--experimental.plugins.<name>.version`:
|
`--experimental.plugins.<name>.version`:
|
||||||
plugin's version.
|
plugin's version.
|
||||||
|
|
||||||
@@ -1107,6 +1125,9 @@ TLS insecure skip verify (Default: ```false```)
|
|||||||
`--tracing.otlp.http.tls.key`:
|
`--tracing.otlp.http.tls.key`:
|
||||||
TLS key
|
TLS key
|
||||||
|
|
||||||
|
`--tracing.safequeryparams`:
|
||||||
|
Query params to not redact.
|
||||||
|
|
||||||
`--tracing.samplerate`:
|
`--tracing.samplerate`:
|
||||||
Sets the rate between 0.0 and 1.0 of requests to trace. (Default: ```1.000000```)
|
Sets the rate between 0.0 and 1.0 of requests to trace. (Default: ```1.000000```)
|
||||||
|
|
||||||
|
@@ -211,17 +211,35 @@ WriteTimeout is the maximum duration before timing out writes of the response. I
|
|||||||
Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```)
|
Timeout defines how long to wait on an idle session before releasing the related resources. (Default: ```3```)
|
||||||
|
|
||||||
`TRAEFIK_EXPERIMENTAL_KUBERNETESGATEWAY`:
|
`TRAEFIK_EXPERIMENTAL_KUBERNETESGATEWAY`:
|
||||||
Allow the Kubernetes gateway api provider usage. (Default: ```false```)
|
(Deprecated) Allow the Kubernetes gateway api provider usage. (Default: ```false```)
|
||||||
|
|
||||||
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>`:
|
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>`:
|
||||||
Local plugins configuration. (Default: ```false```)
|
Local plugins configuration. (Default: ```false```)
|
||||||
|
|
||||||
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>_MODULENAME`:
|
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>_MODULENAME`:
|
||||||
plugin's module name.
|
Plugin's module name.
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>_SETTINGS`:
|
||||||
|
Plugin's settings (works only for wasm plugins).
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>_SETTINGS_ENVS`:
|
||||||
|
Environment variables to forward to the wasm guest.
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_LOCALPLUGINS_<NAME>_SETTINGS_MOUNTS`:
|
||||||
|
Directory to mount to the wasm guest.
|
||||||
|
|
||||||
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_MODULENAME`:
|
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_MODULENAME`:
|
||||||
plugin's module name.
|
plugin's module name.
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_SETTINGS`:
|
||||||
|
Plugin's settings (works only for wasm plugins).
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_SETTINGS_ENVS`:
|
||||||
|
Environment variables to forward to the wasm guest.
|
||||||
|
|
||||||
|
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_SETTINGS_MOUNTS`:
|
||||||
|
Directory to mount to the wasm guest.
|
||||||
|
|
||||||
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_VERSION`:
|
`TRAEFIK_EXPERIMENTAL_PLUGINS_<NAME>_VERSION`:
|
||||||
plugin's version.
|
plugin's version.
|
||||||
|
|
||||||
@@ -1107,6 +1125,9 @@ TLS insecure skip verify (Default: ```false```)
|
|||||||
`TRAEFIK_TRACING_OTLP_HTTP_TLS_KEY`:
|
`TRAEFIK_TRACING_OTLP_HTTP_TLS_KEY`:
|
||||||
TLS key
|
TLS key
|
||||||
|
|
||||||
|
`TRAEFIK_TRACING_SAFEQUERYPARAMS`:
|
||||||
|
Query params to not redact.
|
||||||
|
|
||||||
`TRAEFIK_TRACING_SAMPLERATE`:
|
`TRAEFIK_TRACING_SAMPLERATE`:
|
||||||
Sets the rate between 0.0 and 1.0 of requests to trace. (Default: ```1.000000```)
|
Sets the rate between 0.0 and 1.0 of requests to trace. (Default: ```1.000000```)
|
||||||
|
|
||||||
|
@@ -392,6 +392,7 @@
|
|||||||
serviceName = "foobar"
|
serviceName = "foobar"
|
||||||
capturedRequestHeaders = ["foobar", "foobar"]
|
capturedRequestHeaders = ["foobar", "foobar"]
|
||||||
capturedResponseHeaders = ["foobar", "foobar"]
|
capturedResponseHeaders = ["foobar", "foobar"]
|
||||||
|
safeQueryParams = ["foobar", "foobar"]
|
||||||
sampleRate = 42.0
|
sampleRate = 42.0
|
||||||
addInternals = true
|
addInternals = true
|
||||||
[tracing.globalAttributes]
|
[tracing.globalAttributes]
|
||||||
@@ -473,14 +474,26 @@
|
|||||||
[experimental.plugins.Descriptor0]
|
[experimental.plugins.Descriptor0]
|
||||||
moduleName = "foobar"
|
moduleName = "foobar"
|
||||||
version = "foobar"
|
version = "foobar"
|
||||||
|
[experimental.plugins.Descriptor0.settings]
|
||||||
|
envs = ["foobar", "foobar"]
|
||||||
|
mounts = ["foobar", "foobar"]
|
||||||
[experimental.plugins.Descriptor1]
|
[experimental.plugins.Descriptor1]
|
||||||
moduleName = "foobar"
|
moduleName = "foobar"
|
||||||
version = "foobar"
|
version = "foobar"
|
||||||
|
[experimental.plugins.Descriptor1.settings]
|
||||||
|
envs = ["foobar", "foobar"]
|
||||||
|
mounts = ["foobar", "foobar"]
|
||||||
[experimental.localPlugins]
|
[experimental.localPlugins]
|
||||||
[experimental.localPlugins.LocalDescriptor0]
|
[experimental.localPlugins.LocalDescriptor0]
|
||||||
moduleName = "foobar"
|
moduleName = "foobar"
|
||||||
|
[experimental.localPlugins.LocalDescriptor0.settings]
|
||||||
|
envs = ["foobar", "foobar"]
|
||||||
|
mounts = ["foobar", "foobar"]
|
||||||
[experimental.localPlugins.LocalDescriptor1]
|
[experimental.localPlugins.LocalDescriptor1]
|
||||||
moduleName = "foobar"
|
moduleName = "foobar"
|
||||||
|
[experimental.localPlugins.LocalDescriptor1.settings]
|
||||||
|
envs = ["foobar", "foobar"]
|
||||||
|
mounts = ["foobar", "foobar"]
|
||||||
|
|
||||||
[core]
|
[core]
|
||||||
defaultRuleSyntax = "foobar"
|
defaultRuleSyntax = "foobar"
|
||||||
|
@@ -434,6 +434,9 @@ tracing:
|
|||||||
capturedResponseHeaders:
|
capturedResponseHeaders:
|
||||||
- foobar
|
- foobar
|
||||||
- foobar
|
- foobar
|
||||||
|
safeQueryParams:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
sampleRate: 42
|
sampleRate: 42
|
||||||
addInternals: true
|
addInternals: true
|
||||||
otlp:
|
otlp:
|
||||||
@@ -512,14 +515,42 @@ experimental:
|
|||||||
Descriptor0:
|
Descriptor0:
|
||||||
moduleName: foobar
|
moduleName: foobar
|
||||||
version: foobar
|
version: foobar
|
||||||
|
settings:
|
||||||
|
envs:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
|
mounts:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
Descriptor1:
|
Descriptor1:
|
||||||
moduleName: foobar
|
moduleName: foobar
|
||||||
version: foobar
|
version: foobar
|
||||||
|
settings:
|
||||||
|
envs:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
|
mounts:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
localPlugins:
|
localPlugins:
|
||||||
LocalDescriptor0:
|
LocalDescriptor0:
|
||||||
moduleName: foobar
|
moduleName: foobar
|
||||||
|
settings:
|
||||||
|
envs:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
|
mounts:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
LocalDescriptor1:
|
LocalDescriptor1:
|
||||||
moduleName: foobar
|
moduleName: foobar
|
||||||
|
settings:
|
||||||
|
envs:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
|
mounts:
|
||||||
|
- foobar
|
||||||
|
- foobar
|
||||||
kubernetesGateway: true
|
kubernetesGateway: true
|
||||||
core:
|
core:
|
||||||
defaultRuleSyntax: foobar
|
defaultRuleSyntax: foobar
|
||||||
|
@@ -748,7 +748,7 @@ entryPoints:
|
|||||||
[entryPoints.name]
|
[entryPoints.name]
|
||||||
address = ":8888"
|
address = ":8888"
|
||||||
[entryPoints.name.transport]
|
[entryPoints.name.transport]
|
||||||
keepAliveMaxTime = 42s
|
keepAliveMaxTime = "42s"
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash tab="CLI"
|
```bash tab="CLI"
|
||||||
@@ -1175,3 +1175,25 @@ entryPoints:
|
|||||||
```
|
```
|
||||||
|
|
||||||
{!traefik-for-business-applications.md!}
|
{!traefik-for-business-applications.md!}
|
||||||
|
|
||||||
|
## Systemd Socket Activation
|
||||||
|
|
||||||
|
Traefik supports [systemd socket activation](https://www.freedesktop.org/software/systemd/man/latest/systemd-socket-activate.html).
|
||||||
|
|
||||||
|
When a socket activation file descriptor name matches an EntryPoint name, the corresponding file descriptor will be used as the TCP listener for the matching EntryPoint.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemd-socket-activate -l 80 -l 443 --fdname web:websecure ./traefik --entrypoints.web --entrypoints.websecure
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning "EntryPoint Address"
|
||||||
|
|
||||||
|
When a socket activation file descriptor name matches an EntryPoint name its address configuration is ignored.
|
||||||
|
|
||||||
|
!!! warning "TCP Only"
|
||||||
|
|
||||||
|
Socket activation is not yet supported with UDP entryPoints.
|
||||||
|
|
||||||
|
!!! warning "Docker Support"
|
||||||
|
|
||||||
|
Socket activation is not supported by Docker but works with Podman containers.
|
||||||
|
@@ -48,7 +48,7 @@ The Kubernetes Ingress Controller, The Custom Resource Way.
|
|||||||
serviceAccountName: traefik-ingress-controller
|
serviceAccountName: traefik-ingress-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --log.level=DEBUG
|
- --log.level=DEBUG
|
||||||
- --api
|
- --api
|
||||||
@@ -342,6 +342,9 @@ Register the `IngressRoute` [kind](../../reference/dynamic-configuration/kuberne
|
|||||||
flushInterval: 1ms
|
flushInterval: 1ms
|
||||||
scheme: https
|
scheme: https
|
||||||
serversTransport: transport # [10]
|
serversTransport: transport # [10]
|
||||||
|
healthCheck: # [11]
|
||||||
|
path: /health
|
||||||
|
interval: 15s
|
||||||
sticky:
|
sticky:
|
||||||
cookie:
|
cookie:
|
||||||
httpOnly: true
|
httpOnly: true
|
||||||
@@ -351,16 +354,17 @@ Register the `IngressRoute` [kind](../../reference/dynamic-configuration/kuberne
|
|||||||
maxAge: 42
|
maxAge: 42
|
||||||
strategy: RoundRobin
|
strategy: RoundRobin
|
||||||
weight: 10
|
weight: 10
|
||||||
nativeLB: true # [11]
|
nativeLB: true # [12]
|
||||||
tls: # [12]
|
nodePortLB: true # [13]
|
||||||
secretName: supersecret # [13]
|
tls: # [14]
|
||||||
options: # [14]
|
secretName: supersecret # [15]
|
||||||
name: opt # [15]
|
options: # [16]
|
||||||
namespace: default # [16]
|
name: opt # [17]
|
||||||
certResolver: foo # [17]
|
namespace: default # [18]
|
||||||
domains: # [18]
|
certResolver: foo # [19]
|
||||||
- main: example.net # [19]
|
domains: # [20]
|
||||||
sans: # [20]
|
- main: example.net # [21]
|
||||||
|
sans: # [22]
|
||||||
- a.example.net
|
- a.example.net
|
||||||
- b.example.net
|
- b.example.net
|
||||||
```
|
```
|
||||||
@@ -377,16 +381,18 @@ Register the `IngressRoute` [kind](../../reference/dynamic-configuration/kuberne
|
|||||||
| [8] | `routes[n].services` | List of any combination of [TraefikService](#kind-traefikservice) and reference to a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) (See below for `ExternalName Service` setup) |
|
| [8] | `routes[n].services` | List of any combination of [TraefikService](#kind-traefikservice) and reference to a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) (See below for `ExternalName Service` setup) |
|
||||||
| [9] | `services[n].port` | Defines the port of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). This can be a reference to a named port. |
|
| [9] | `services[n].port` | Defines the port of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). This can be a reference to a named port. |
|
||||||
| [10] | `services[n].serversTransport` | Defines the reference to a [ServersTransport](#kind-serverstransport). The ServersTransport namespace is assumed to be the [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) namespace (see [ServersTransport reference](#serverstransport-reference)). |
|
| [10] | `services[n].serversTransport` | Defines the reference to a [ServersTransport](#kind-serverstransport). The ServersTransport namespace is assumed to be the [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) namespace (see [ServersTransport reference](#serverstransport-reference)). |
|
||||||
| [11] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
| [11] | `services[n].healthCheck` | Defines the HealthCheck when service references a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) of type ExternalName. |
|
||||||
| [12] | `tls` | Defines [TLS](../routers/index.md#tls) certificate configuration |
|
| [12] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
||||||
| [13] | `tls.secretName` | Defines the [secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the `IngressRoute` namespace) |
|
| [13] | `services[n].nodePortLB` | Controls, when creating the load-balancer, whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort. |
|
||||||
| [14] | `tls.options` | Defines the reference to a [TLSOption](#kind-tlsoption) |
|
| [14] | `tls` | Defines [TLS](../routers/index.md#tls) certificate configuration |
|
||||||
| [15] | `options.name` | Defines the [TLSOption](#kind-tlsoption) name |
|
| [15] | `tls.secretName` | Defines the [secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the `IngressRoute` namespace) |
|
||||||
| [16] | `options.namespace` | Defines the [TLSOption](#kind-tlsoption) namespace |
|
| [16] | `tls.options` | Defines the reference to a [TLSOption](#kind-tlsoption) |
|
||||||
| [17] | `tls.certResolver` | Defines the reference to a [CertResolver](../routers/index.md#certresolver) |
|
| [17] | `options.name` | Defines the [TLSOption](#kind-tlsoption) name |
|
||||||
| [18] | `tls.domains` | List of [domains](../routers/index.md#domains) |
|
| [18] | `options.namespace` | Defines the [TLSOption](#kind-tlsoption) namespace |
|
||||||
| [19] | `domains[n].main` | Defines the main domain name |
|
| [19] | `tls.certResolver` | Defines the reference to a [CertResolver](../routers/index.md#certresolver) |
|
||||||
| [20] | `domains[n].sans` | List of SANs (alternative domains) |
|
| [20] | `tls.domains` | List of [domains](../routers/index.md#domains) |
|
||||||
|
| [21] | `domains[n].main` | Defines the main domain name |
|
||||||
|
| [22] | `domains[n].sans` | List of SANs (alternative domains) |
|
||||||
|
|
||||||
??? example "Declaring an IngressRoute"
|
??? example "Declaring an IngressRoute"
|
||||||
|
|
||||||
@@ -1149,18 +1155,20 @@ Register the `IngressRouteTCP` [kind](../../reference/dynamic-configuration/kube
|
|||||||
version: 1 # [12]
|
version: 1 # [12]
|
||||||
serversTransport: transport # [13]
|
serversTransport: transport # [13]
|
||||||
nativeLB: true # [14]
|
nativeLB: true # [14]
|
||||||
tls: # [15]
|
nodePortLB: true # [15]
|
||||||
secretName: supersecret # [16]
|
|
||||||
options: # [17]
|
tls: # [16]
|
||||||
name: opt # [18]
|
secretName: supersecret # [17]
|
||||||
namespace: default # [19]
|
options: # [18]
|
||||||
certResolver: foo # [20]
|
name: opt # [19]
|
||||||
domains: # [21]
|
namespace: default # [20]
|
||||||
- main: example.net # [22]
|
certResolver: foo # [21]
|
||||||
sans: # [23]
|
domains: # [22]
|
||||||
|
- main: example.net # [23]
|
||||||
|
sans: # [24]
|
||||||
- a.example.net
|
- a.example.net
|
||||||
- b.example.net
|
- b.example.net
|
||||||
passthrough: false # [24]
|
passthrough: false # [25]
|
||||||
```
|
```
|
||||||
|
|
||||||
| Ref | Attribute | Purpose |
|
| Ref | Attribute | Purpose |
|
||||||
@@ -1179,16 +1187,17 @@ Register the `IngressRouteTCP` [kind](../../reference/dynamic-configuration/kube
|
|||||||
| [12] | `services[n].proxyProtocol.version` | Defines the [PROXY protocol](../services/index.md#proxy-protocol) version |
|
| [12] | `services[n].proxyProtocol.version` | Defines the [PROXY protocol](../services/index.md#proxy-protocol) version |
|
||||||
| [13] | `services[n].serversTransport` | Defines the reference to a [ServersTransportTCP](#kind-serverstransporttcp). The ServersTransport namespace is assumed to be the [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) namespace (see [ServersTransport reference](#serverstransport-reference)). |
|
| [13] | `services[n].serversTransport` | Defines the reference to a [ServersTransportTCP](#kind-serverstransporttcp). The ServersTransport namespace is assumed to be the [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) namespace (see [ServersTransport reference](#serverstransport-reference)). |
|
||||||
| [14] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
| [14] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
||||||
| [15] | `tls` | Defines [TLS](../routers/index.md#tls_1) certificate configuration |
|
| [15] | `services[n].nodePortLB` | Controls, when creating the load-balancer, whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is |
|
||||||
| [16] | `tls.secretName` | Defines the [secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the `IngressRoute` namespace) |
|
| [16] | `tls` | Defines [TLS](../routers/index.md#tls_1) certificate configuration |
|
||||||
| [17] | `tls.options` | Defines the reference to a [TLSOption](#kind-tlsoption) |
|
| [17] | `tls.secretName` | Defines the [secret](https://kubernetes.io/docs/concepts/configuration/secret/) name used to store the certificate (in the `IngressRoute` namespace) |
|
||||||
| [18] | `tls.options.name` | Defines the [TLSOption](#kind-tlsoption) name |
|
| [18] | `tls.options` | Defines the reference to a [TLSOption](#kind-tlsoption) |
|
||||||
| [19] | `tls.options.namespace` | Defines the [TLSOption](#kind-tlsoption) namespace |
|
| [19] | `tls.options.name` | Defines the [TLSOption](#kind-tlsoption) name |
|
||||||
| [20] | `tls.certResolver` | Defines the reference to a [CertResolver](../routers/index.md#certresolver_1) |
|
| [20] | `tls.options.namespace` | Defines the [TLSOption](#kind-tlsoption) namespace |
|
||||||
| [21] | `tls.domains` | List of [domains](../routers/index.md#domains_1) |
|
| [21] | `tls.certResolver` | Defines the reference to a [CertResolver](../routers/index.md#certresolver_1) |
|
||||||
| [22] | `tls.domains[n].main` | Defines the main domain name |
|
| [22] | `tls.domains` | List of [domains](../routers/index.md#domains_1) |
|
||||||
| [23] | `tls.domains[n].sans` | List of SANs (alternative domains) |
|
| [23] | `tls.domains[n].main` | Defines the main domain name |
|
||||||
| [24] | `tls.passthrough` | If `true`, delegates the TLS termination to the backend |
|
| [24] | `tls.domains[n].sans` | List of SANs (alternative domains) |
|
||||||
|
| [25] | `tls.passthrough` | If `true`, delegates the TLS termination to the backend |
|
||||||
|
|
||||||
??? example "Declaring an IngressRouteTCP"
|
??? example "Declaring an IngressRouteTCP"
|
||||||
|
|
||||||
@@ -1433,17 +1442,19 @@ Register the `IngressRouteUDP` [kind](../../reference/dynamic-configuration/kube
|
|||||||
port: 8080 # [5]
|
port: 8080 # [5]
|
||||||
weight: 10 # [6]
|
weight: 10 # [6]
|
||||||
nativeLB: true # [7]
|
nativeLB: true # [7]
|
||||||
|
nodePortLB: true # [8]
|
||||||
```
|
```
|
||||||
|
|
||||||
| Ref | Attribute | Purpose |
|
| Ref | Attribute | Purpose |
|
||||||
|-----|-------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|-----|-------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| [1] | `entryPoints` | List of [entrypoints](../routers/index.md#entrypoints_1) names |
|
| [1] | `entryPoints` | List of [entrypoints](../routers/index.md#entrypoints_1) names |
|
||||||
| [2] | `routes` | List of routes |
|
| [2] | `routes` | List of routes |
|
||||||
| [3] | `routes[n].services` | List of [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) definitions (See below for `ExternalName Service` setup) |
|
| [3] | `routes[n].services` | List of [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) definitions (See below for `ExternalName Service` setup) |
|
||||||
| [4] | `services[n].name` | Defines the name of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) |
|
| [4] | `services[n].name` | Defines the name of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/) |
|
||||||
| [5] | `services[n].port` | Defines the port of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). This can be a reference to a named port. |
|
| [5] | `services[n].port` | Defines the port of a [Kubernetes service](https://kubernetes.io/docs/concepts/services-networking/service/). This can be a reference to a named port. |
|
||||||
| [6] | `services[n].weight` | Defines the weight to apply to the server load balancing |
|
| [6] | `services[n].weight` | Defines the weight to apply to the server load balancing |
|
||||||
| [7] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
| [7] | `services[n].nativeLB` | Controls, when creating the load-balancer, whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP. |
|
||||||
|
| [8] | `services[n].nodePortLB` | Controls, when creating the load-balancer, whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort. |
|
||||||
|
|
||||||
??? example "Declaring an IngressRouteUDP"
|
??? example "Declaring an IngressRouteUDP"
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@ description: "The Kubernetes Gateway API can be used as a provider for routing a
|
|||||||
|
|
||||||
# Traefik & Kubernetes
|
# Traefik & Kubernetes
|
||||||
|
|
||||||
The Kubernetes Gateway API, The Experimental Way.
|
The Kubernetes Gateway API Controller.
|
||||||
{: .subtitle }
|
{: .subtitle }
|
||||||
|
|
||||||
## Configuration Examples
|
## Configuration Examples
|
||||||
@@ -273,7 +273,7 @@ Kubernetes cluster before creating `HTTPRoute` objects.
|
|||||||
| [6] | `rules` | A list of HTTP matchers, filters and actions. |
|
| [6] | `rules` | A list of HTTP matchers, filters and actions. |
|
||||||
| [7] | `matches` | Conditions used for matching the rule against incoming HTTP requests. Each match is independent, i.e. this rule will be matched if **any** one of the matches is satisfied. |
|
| [7] | `matches` | Conditions used for matching the rule against incoming HTTP requests. Each match is independent, i.e. this rule will be matched if **any** one of the matches is satisfied. |
|
||||||
| [8] | `path` | An HTTP request path matcher. If this field is not specified, a default prefix match on the "/" path is provided. |
|
| [8] | `path` | An HTTP request path matcher. If this field is not specified, a default prefix match on the "/" path is provided. |
|
||||||
| [9] | `type` | Type of match against the path Value (supported types: `Exact`, `PathPrefix`). |
|
| [9] | `type` | Type of match against the path Value (supported types: `Exact`, `PathPrefix`, and `RegularExpression`). |
|
||||||
| [10] | `value` | The value of the HTTP path to match against. |
|
| [10] | `value` | The value of the HTTP path to match against. |
|
||||||
| [11] | `headers` | Conditions to select a HTTP route by matching HTTP request headers. |
|
| [11] | `headers` | Conditions to select a HTTP route by matching HTTP request headers. |
|
||||||
| [12] | `name` | Name of the HTTP header to be matched. |
|
| [12] | `name` | Name of the HTTP header to be matched. |
|
||||||
|
@@ -29,12 +29,18 @@ which in turn will create the resulting routers, services, handlers, etc.
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
@@ -124,7 +130,7 @@ which in turn will create the resulting routers, services, handlers, etc.
|
|||||||
serviceAccountName: traefik-ingress-controller
|
serviceAccountName: traefik-ingress-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --entryPoints.web.address=:80
|
- --entryPoints.web.address=:80
|
||||||
- --providers.kubernetesingress
|
- --providers.kubernetesingress
|
||||||
@@ -287,6 +293,16 @@ which in turn will create the resulting routers, services, handlers, etc.
|
|||||||
traefik.ingress.kubernetes.io/service.nativelb: "true"
|
traefik.ingress.kubernetes.io/service.nativelb: "true"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? info "`traefik.ingress.kubernetes.io/service.nodeportlb`"
|
||||||
|
|
||||||
|
Controls, when creating the load-balancer, whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
traefik.ingress.kubernetes.io/service.nodeportlb: "true"
|
||||||
|
```
|
||||||
|
|
||||||
??? info "`traefik.ingress.kubernetes.io/service.serversscheme`"
|
??? info "`traefik.ingress.kubernetes.io/service.serversscheme`"
|
||||||
|
|
||||||
Overrides the default scheme.
|
Overrides the default scheme.
|
||||||
@@ -417,12 +433,19 @@ This way, any Ingress attached to this Entrypoint will have TLS termination by d
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
@@ -512,7 +535,7 @@ This way, any Ingress attached to this Entrypoint will have TLS termination by d
|
|||||||
serviceAccountName: traefik-ingress-controller
|
serviceAccountName: traefik-ingress-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --entryPoints.websecure.address=:443
|
- --entryPoints.websecure.address=:443
|
||||||
- --entryPoints.websecure.http.tls
|
- --entryPoints.websecure.http.tls
|
||||||
@@ -602,12 +625,19 @@ For more options, please refer to the available [annotations](#on-ingress).
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
@@ -698,7 +728,7 @@ For more options, please refer to the available [annotations](#on-ingress).
|
|||||||
serviceAccountName: traefik-ingress-controller
|
serviceAccountName: traefik-ingress-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --entryPoints.websecure.address=:443
|
- --entryPoints.websecure.address=:443
|
||||||
- --providers.kubernetesingress
|
- --providers.kubernetesingress
|
||||||
@@ -822,7 +852,7 @@ TLS certificates can be managed in Secrets objects.
|
|||||||
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
|
||||||
One alternative is to use an `ExternalName` service to forward requests to the Kubernetes service through DNS.
|
One alternative is to use an `ExternalName` service to forward requests to the Kubernetes service through DNS.
|
||||||
To do so, one must [allow external name services](https://doc.traefik.io/traefik/providers/kubernetes-ingress/#allowexternalnameservices "Link to docs about allowing external name services").
|
To do so, one must [allow external name services](../providers/kubernetes-ingress/#allowexternalnameservices "Link to docs about allowing external name services").
|
||||||
|
|
||||||
Traefik automatically requests endpoint information based on the service provided in the ingress spec.
|
Traefik automatically requests endpoint information based on the service provided in the ingress spec.
|
||||||
Although Traefik will connect directly to the endpoints (pods),
|
Although Traefik will connect directly to the endpoints (pods),
|
||||||
|
@@ -26,7 +26,7 @@ spec:
|
|||||||
serviceAccountName: traefik-ingress-controller
|
serviceAccountName: traefik-ingress-controller
|
||||||
containers:
|
containers:
|
||||||
- name: traefik
|
- name: traefik
|
||||||
image: traefik:v3.0
|
image: traefik:v3.1
|
||||||
args:
|
args:
|
||||||
- --api.insecure
|
- --api.insecure
|
||||||
- --accesslog
|
- --accesslog
|
||||||
|
@@ -49,10 +49,10 @@ and the RBAC authorization resources which will be referenced through the `servi
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install Traefik Resource Definitions:
|
# Install Traefik Resource Definitions:
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
|
||||||
|
|
||||||
# Install RBAC for Traefik:
|
# Install RBAC for Traefik:
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
### Services
|
### Services
|
||||||
@@ -60,7 +60,7 @@ kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/con
|
|||||||
Then, the services. One for Traefik itself, and one for the app it routes for, i.e. in this case our demo HTTP server: [whoami](https://github.com/traefik/whoami).
|
Then, the services. One for Traefik itself, and one for the app it routes for, i.e. in this case our demo HTTP server: [whoami](https://github.com/traefik/whoami).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/user-guides/crd-acme/02-services.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/user-guides/crd-acme/02-services.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -73,7 +73,7 @@ Next, the deployments, i.e. the actual pods behind the services.
|
|||||||
Again, one pod for Traefik, and one for the whoami app.
|
Again, one pod for Traefik, and one for the whoami app.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/user-guides/crd-acme/03-deployments.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/user-guides/crd-acme/03-deployments.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -100,7 +100,7 @@ Look it up.
|
|||||||
We can now finally apply the actual ingressRoutes, with:
|
We can now finally apply the actual ingressRoutes, with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/user-guides/crd-acme/04-ingressroutes.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/user-guides/crd-acme/04-ingressroutes.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -126,7 +126,7 @@ Nowadays, TLS v1.0 and v1.1 are deprecated.
|
|||||||
In order to force TLS v1.2 or later on all your IngressRoute, you can define the `default` TLSOption:
|
In order to force TLS v1.2 or later on all your IngressRoute, you can define the `default` TLSOption:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.0/docs/content/user-guides/crd-acme/05-tlsoption.yml
|
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.1/docs/content/user-guides/crd-acme/05-tlsoption.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
@@ -26,5 +26,5 @@ node:
|
|||||||
- K3S_CLUSTER_SECRET=somethingtotallyrandom
|
- K3S_CLUSTER_SECRET=somethingtotallyrandom
|
||||||
volumes:
|
volumes:
|
||||||
# this is where you would place a alternative traefik image (saved as a .tar file with
|
# this is where you would place a alternative traefik image (saved as a .tar file with
|
||||||
# 'docker save'), if you want to use it, instead of the traefik:v3.0 image.
|
# 'docker save'), if you want to use it, instead of the traefik:v3.1 image.
|
||||||
- /somewhere/on/your/host/custom-image:/var/lib/rancher/k3s/agent/images
|
- /somewhere/on/your/host/custom-image:/var/lib/rancher/k3s/agent/images
|
||||||
|
@@ -3,7 +3,7 @@ version: "3.3"
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
container_name: "traefik"
|
container_name: "traefik"
|
||||||
command:
|
command:
|
||||||
#- "--log.level=DEBUG"
|
#- "--log.level=DEBUG"
|
||||||
|
@@ -13,7 +13,7 @@ secrets:
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
container_name: "traefik"
|
container_name: "traefik"
|
||||||
command:
|
command:
|
||||||
#- "--log.level=DEBUG"
|
#- "--log.level=DEBUG"
|
||||||
|
@@ -5,7 +5,7 @@ description: "Learn how to create a certificate with the Let's Encrypt DNS chall
|
|||||||
|
|
||||||
# Docker-compose with Let's Encrypt: DNS Challenge
|
# Docker-compose with Let's Encrypt: DNS Challenge
|
||||||
|
|
||||||
This guide aim to demonstrate how to create a certificate with the Let's Encrypt DNS challenge to use https on a simple service exposed with Traefik.
|
This guide aims to demonstrate how to create a certificate with the Let's Encrypt DNS challenge to use https on a simple service exposed with Traefik.
|
||||||
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
||||||
|
|
||||||
## Prerequisite
|
## Prerequisite
|
||||||
|
@@ -3,7 +3,7 @@ version: "3.3"
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
container_name: "traefik"
|
container_name: "traefik"
|
||||||
command:
|
command:
|
||||||
#- "--log.level=DEBUG"
|
#- "--log.level=DEBUG"
|
||||||
|
@@ -5,7 +5,7 @@ description: "Learn how to create a certificate with the Let's Encrypt HTTP chal
|
|||||||
|
|
||||||
# Docker-compose with Let's Encrypt : HTTP Challenge
|
# Docker-compose with Let's Encrypt : HTTP Challenge
|
||||||
|
|
||||||
This guide aim to demonstrate how to create a certificate with the Let's Encrypt HTTP challenge to use https on a simple service exposed with Traefik.
|
This guide aims to demonstrate how to create a certificate with the Let's Encrypt HTTP challenge to use https on a simple service exposed with Traefik.
|
||||||
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
||||||
|
|
||||||
## Prerequisite
|
## Prerequisite
|
||||||
|
@@ -3,7 +3,7 @@ version: "3.3"
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
container_name: "traefik"
|
container_name: "traefik"
|
||||||
command:
|
command:
|
||||||
#- "--log.level=DEBUG"
|
#- "--log.level=DEBUG"
|
||||||
|
@@ -5,7 +5,7 @@ description: "Learn how to create a certificate with the Let's Encrypt TLS chall
|
|||||||
|
|
||||||
# Docker-compose with Let's Encrypt: TLS Challenge
|
# Docker-compose with Let's Encrypt: TLS Challenge
|
||||||
|
|
||||||
This guide aim to demonstrate how to create a certificate with the Let's Encrypt TLS challenge to use https on a simple service exposed with Traefik.
|
This guide aims to demonstrate how to create a certificate with the Let's Encrypt TLS challenge to use https on a simple service exposed with Traefik.
|
||||||
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
Please also read the [basic example](../basic-example) for details on how to expose such a service.
|
||||||
|
|
||||||
## Prerequisite
|
## Prerequisite
|
||||||
|
@@ -3,7 +3,7 @@ version: "3.3"
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
container_name: "traefik"
|
container_name: "traefik"
|
||||||
command:
|
command:
|
||||||
#- "--log.level=DEBUG"
|
#- "--log.level=DEBUG"
|
||||||
|
@@ -31,7 +31,7 @@ Create a `docker-compose.yml` file with the following content:
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
traefik:
|
traefik:
|
||||||
image: "traefik:v3.0"
|
image: "traefik:v3.1"
|
||||||
...
|
...
|
||||||
networks:
|
networks:
|
||||||
- traefiknet
|
- traefiknet
|
||||||
|
@@ -172,6 +172,7 @@ nav:
|
|||||||
- 'HTTP Challenge': 'user-guides/docker-compose/acme-http/index.md'
|
- 'HTTP Challenge': 'user-guides/docker-compose/acme-http/index.md'
|
||||||
- 'DNS Challenge': 'user-guides/docker-compose/acme-dns/index.md'
|
- 'DNS Challenge': 'user-guides/docker-compose/acme-dns/index.md'
|
||||||
- 'Migration':
|
- 'Migration':
|
||||||
|
- 'Traefik v3 minor migrations': 'migration/v3.md'
|
||||||
- 'Traefik v2 to v3':
|
- 'Traefik v2 to v3':
|
||||||
- 'Migration guide': 'migration/v2-to-v3.md'
|
- 'Migration guide': 'migration/v2-to-v3.md'
|
||||||
- 'Configuration changes for v3': 'migration/v2-to-v3-details.md'
|
- 'Configuration changes for v3': 'migration/v2-to-v3-details.md'
|
||||||
|
90
go.mod
90
go.mod
@@ -1,6 +1,6 @@
|
|||||||
module github.com/traefik/traefik/v3
|
module github.com/traefik/traefik/v3
|
||||||
|
|
||||||
go 1.22
|
go 1.22.4
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.4.0
|
github.com/BurntSushi/toml v1.4.0
|
||||||
@@ -22,7 +22,7 @@ require (
|
|||||||
github.com/golang/protobuf v1.5.4
|
github.com/golang/protobuf v1.5.4
|
||||||
github.com/google/go-github/v28 v28.1.1
|
github.com/google/go-github/v28 v28.1.1
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/gorilla/websocket v1.5.0
|
github.com/gorilla/websocket v1.5.1
|
||||||
github.com/hashicorp/consul/api v1.26.1
|
github.com/hashicorp/consul/api v1.26.1
|
||||||
github.com/hashicorp/go-hclog v1.6.3
|
github.com/hashicorp/go-hclog v1.6.3
|
||||||
github.com/hashicorp/go-multierror v1.1.1
|
github.com/hashicorp/go-multierror v1.1.1
|
||||||
@@ -32,6 +32,7 @@ require (
|
|||||||
github.com/http-wasm/http-wasm-host-go v0.6.0
|
github.com/http-wasm/http-wasm-host-go v0.6.0
|
||||||
github.com/influxdata/influxdb-client-go/v2 v2.7.0
|
github.com/influxdata/influxdb-client-go/v2 v2.7.0
|
||||||
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d
|
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d
|
||||||
|
github.com/juliens/wasm-goexport v0.0.6
|
||||||
github.com/klauspost/compress v1.17.2
|
github.com/klauspost/compress v1.17.2
|
||||||
github.com/kvtools/consul v1.0.2
|
github.com/kvtools/consul v1.0.2
|
||||||
github.com/kvtools/etcdv3 v1.0.2
|
github.com/kvtools/etcdv3 v1.0.2
|
||||||
@@ -47,18 +48,20 @@ require (
|
|||||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||||
github.com/pires/go-proxyproto v0.6.1
|
github.com/pires/go-proxyproto v0.6.1
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
|
||||||
github.com/prometheus/client_golang v1.17.0
|
github.com/prometheus/client_golang v1.19.1
|
||||||
github.com/prometheus/client_model v0.5.0
|
github.com/prometheus/client_model v0.5.0
|
||||||
github.com/quic-go/quic-go v0.42.0
|
github.com/quic-go/quic-go v0.45.1
|
||||||
github.com/rs/zerolog v1.29.0
|
github.com/rs/zerolog v1.29.0
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/spiffe/go-spiffe/v2 v2.1.1
|
github.com/spiffe/go-spiffe/v2 v2.1.1
|
||||||
|
github.com/stealthrocket/wasi-go v0.8.0
|
||||||
|
github.com/stealthrocket/wazergo v0.19.1
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.9.0
|
||||||
github.com/stvp/go-udp-testing v0.0.0-20191102171040-06b61409b154
|
github.com/stvp/go-udp-testing v0.0.0-20191102171040-06b61409b154
|
||||||
github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046
|
github.com/tailscale/tscert v0.0.0-20230806124524-28a91b69a046
|
||||||
github.com/testcontainers/testcontainers-go v0.30.0
|
github.com/testcontainers/testcontainers-go v0.30.0
|
||||||
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0
|
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0
|
||||||
github.com/tetratelabs/wazero v1.5.0
|
github.com/tetratelabs/wazero v1.7.2
|
||||||
github.com/tidwall/gjson v1.17.0
|
github.com/tidwall/gjson v1.17.0
|
||||||
github.com/traefik/grpc-web v0.16.0
|
github.com/traefik/grpc-web v0.16.0
|
||||||
github.com/traefik/paerser v0.2.0
|
github.com/traefik/paerser v0.2.0
|
||||||
@@ -67,19 +70,19 @@ require (
|
|||||||
github.com/unrolled/secure v1.0.9
|
github.com/unrolled/secure v1.0.9
|
||||||
github.com/vulcand/oxy/v2 v2.0.0-20230427132221-be5cf38f3c1c
|
github.com/vulcand/oxy/v2 v2.0.0-20230427132221-be5cf38f3c1c
|
||||||
github.com/vulcand/predicate v1.2.0
|
github.com/vulcand/predicate v1.2.0
|
||||||
go.opentelemetry.io/collector/pdata v1.2.0
|
go.opentelemetry.io/collector/pdata v1.10.0
|
||||||
go.opentelemetry.io/contrib/propagators/autoprop v0.52.0
|
go.opentelemetry.io/contrib/propagators/autoprop v0.52.0
|
||||||
go.opentelemetry.io/otel v1.27.0
|
go.opentelemetry.io/otel v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/metric v1.27.0
|
go.opentelemetry.io/otel/metric v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/sdk v1.27.0
|
go.opentelemetry.io/otel/sdk v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.27.0
|
go.opentelemetry.io/otel/sdk/metric v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
go.opentelemetry.io/otel/trace v1.27.0
|
go.opentelemetry.io/otel/trace v1.27.1-0.20240624175855-921eb701b175 // For security reason we need to follow semconv v1.26.0 and we can't wait for opentelemetry-go-sdk v1.28.0.
|
||||||
golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0
|
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842
|
||||||
golang.org/x/mod v0.18.0
|
golang.org/x/mod v0.18.0
|
||||||
golang.org/x/net v0.26.0
|
golang.org/x/net v0.26.0
|
||||||
golang.org/x/sys v0.21.0
|
golang.org/x/sys v0.21.0
|
||||||
@@ -88,14 +91,15 @@ require (
|
|||||||
golang.org/x/tools v0.22.0
|
golang.org/x/tools v0.22.0
|
||||||
google.golang.org/grpc v1.64.0
|
google.golang.org/grpc v1.64.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
k8s.io/api v0.29.2
|
k8s.io/api v0.30.0
|
||||||
k8s.io/apiextensions-apiserver v0.28.3
|
k8s.io/apiextensions-apiserver v0.30.0
|
||||||
k8s.io/apimachinery v0.29.2
|
k8s.io/apimachinery v0.30.0
|
||||||
k8s.io/client-go v0.29.2
|
k8s.io/client-go v0.30.0
|
||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
|
k8s.io/utils v0.0.0-20240423183400-0849a56e8f22
|
||||||
mvdan.cc/xurls/v2 v2.5.0
|
mvdan.cc/xurls/v2 v2.5.0
|
||||||
sigs.k8s.io/controller-runtime v0.16.3
|
sigs.k8s.io/controller-runtime v0.18.0
|
||||||
sigs.k8s.io/gateway-api v1.0.0
|
sigs.k8s.io/gateway-api v1.1.0
|
||||||
|
sigs.k8s.io/yaml v1.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -165,9 +169,9 @@ require (
|
|||||||
github.com/distribution/reference v0.5.0 // indirect
|
github.com/distribution/reference v0.5.0 // indirect
|
||||||
github.com/dnsimple/dnsimple-go v1.7.0 // indirect
|
github.com/dnsimple/dnsimple-go v1.7.0 // indirect
|
||||||
github.com/docker/go-units v0.5.0 // indirect
|
github.com/docker/go-units v0.5.0 // indirect
|
||||||
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
|
github.com/emicklei/go-restful/v3 v3.12.0 // indirect
|
||||||
github.com/evanphx/json-patch v5.7.0+incompatible // indirect
|
github.com/evanphx/json-patch v5.7.0+incompatible // indirect
|
||||||
github.com/evanphx/json-patch/v5 v5.7.0 // indirect
|
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
||||||
github.com/exoscale/egoscale v0.102.3 // indirect
|
github.com/exoscale/egoscale v0.102.3 // indirect
|
||||||
github.com/fatih/color v1.16.0 // indirect
|
github.com/fatih/color v1.16.0 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||||
@@ -176,13 +180,13 @@ require (
|
|||||||
github.com/go-errors/errors v1.0.1 // indirect
|
github.com/go-errors/errors v1.0.1 // indirect
|
||||||
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
|
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
|
||||||
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
||||||
github.com/go-logr/logr v1.4.1 // indirect
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-logr/zapr v1.2.4 // indirect
|
github.com/go-logr/zapr v1.3.0 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
github.com/go-openapi/jsonpointer v0.20.0 // indirect
|
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||||
github.com/go-openapi/jsonreference v0.20.2 // indirect
|
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
||||||
github.com/go-openapi/swag v0.22.4 // indirect
|
github.com/go-openapi/swag v0.23.0 // indirect
|
||||||
github.com/go-resty/resty/v2 v2.11.0 // indirect
|
github.com/go-resty/resty/v2 v2.11.0 // indirect
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
||||||
github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
|
github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
|
||||||
@@ -241,7 +245,6 @@ require (
|
|||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
|
|
||||||
github.com/mimuret/golang-iij-dpf v0.9.1 // indirect
|
github.com/mimuret/golang-iij-dpf v0.9.1 // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/mitchellh/go-ps v1.0.0 // indirect
|
github.com/mitchellh/go-ps v1.0.0 // indirect
|
||||||
@@ -280,7 +283,7 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||||
github.com/pquerna/otp v1.4.0 // indirect
|
github.com/pquerna/otp v1.4.0 // indirect
|
||||||
github.com/prometheus/common v0.45.0 // indirect
|
github.com/prometheus/common v0.48.0 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
github.com/quic-go/qpack v0.4.0 // indirect
|
github.com/quic-go/qpack v0.4.0 // indirect
|
||||||
github.com/redis/go-redis/v9 v9.2.1 // indirect
|
github.com/redis/go-redis/v9 v9.2.1 // indirect
|
||||||
@@ -316,16 +319,16 @@ require (
|
|||||||
github.com/yandex-cloud/go-sdk v0.0.0-20240318084659-dfa50323a0b4 // indirect
|
github.com/yandex-cloud/go-sdk v0.0.0-20240318084659-dfa50323a0b4 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||||
github.com/zeebo/errs v1.2.2 // indirect
|
github.com/zeebo/errs v1.2.2 // indirect
|
||||||
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
|
go.etcd.io/etcd/api/v3 v3.5.10 // indirect
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
|
go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
|
||||||
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
|
go.etcd.io/etcd/client/v3 v3.5.10 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
|
||||||
go.opentelemetry.io/contrib/propagators/aws v1.27.0 // indirect
|
go.opentelemetry.io/contrib/propagators/aws v1.27.0 // indirect
|
||||||
go.opentelemetry.io/contrib/propagators/b3 v1.27.0 // indirect
|
go.opentelemetry.io/contrib/propagators/b3 v1.27.0 // indirect
|
||||||
go.opentelemetry.io/contrib/propagators/jaeger v1.27.0 // indirect
|
go.opentelemetry.io/contrib/propagators/jaeger v1.27.0 // indirect
|
||||||
go.opentelemetry.io/contrib/propagators/ot v1.27.0 // indirect
|
go.opentelemetry.io/contrib/propagators/ot v1.27.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.2.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.11.0 // indirect
|
||||||
go.uber.org/mock v0.4.0 // indirect
|
go.uber.org/mock v0.4.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
@@ -338,21 +341,20 @@ require (
|
|||||||
golang.org/x/term v0.21.0 // indirect
|
golang.org/x/term v0.21.0 // indirect
|
||||||
google.golang.org/api v0.172.0 // indirect
|
google.golang.org/api v0.172.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d // indirect
|
||||||
google.golang.org/protobuf v1.34.1 // indirect
|
google.golang.org/protobuf v1.34.2 // indirect
|
||||||
gopkg.in/h2non/gock.v1 v1.0.16 // indirect
|
gopkg.in/h2non/gock.v1 v1.0.16 // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/ns1/ns1-go.v2 v2.9.1 // indirect
|
gopkg.in/ns1/ns1-go.v2 v2.9.1 // indirect
|
||||||
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
|
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
k8s.io/klog/v2 v2.110.1 // indirect
|
k8s.io/klog/v2 v2.120.1 // indirect
|
||||||
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
|
k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 // indirect
|
||||||
nhooyr.io/websocket v1.8.7 // indirect
|
nhooyr.io/websocket v1.8.7 // indirect
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
|
||||||
sigs.k8s.io/yaml v1.4.0 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Containous forks
|
// Containous forks
|
||||||
@@ -371,3 +373,5 @@ exclude github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible
|
|||||||
|
|
||||||
// https://github.com/docker/compose/blob/v2.19.0/go.mod#L12
|
// https://github.com/docker/compose/blob/v2.19.0/go.mod#L12
|
||||||
replace github.com/cucumber/godog => github.com/cucumber/godog v0.13.0
|
replace github.com/cucumber/godog => github.com/cucumber/godog v0.13.0
|
||||||
|
|
||||||
|
replace github.com/http-wasm/http-wasm-host-go => github.com/traefik/http-wasm-host-go v0.0.0-20240618100324-3c53dcaa1a70
|
||||||
|
188
go.sum
188
go.sum
@@ -151,7 +151,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.28.12 h1:M/1u4HBpwLuMtjlxuI2y6HoVLzF
|
|||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.12/go.mod h1:kcfd+eTdEi/40FIbLq4Hif3XMXnl5b/+t/KTfLt9xIk=
|
github.com/aws/aws-sdk-go-v2/service/sts v1.28.12/go.mod h1:kcfd+eTdEi/40FIbLq4Hif3XMXnl5b/+t/KTfLt9xIk=
|
||||||
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
|
github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
|
||||||
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
|
github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
|
||||||
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
|
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
|
||||||
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
@@ -282,8 +281,8 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP
|
|||||||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
|
||||||
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
|
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
|
||||||
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
||||||
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
|
github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk=
|
||||||
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
@@ -295,8 +294,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.
|
|||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
|
github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
|
||||||
github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc=
|
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
|
||||||
github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
|
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
|
||||||
github.com/exoscale/egoscale v0.102.3 h1:DYqN2ipoLKpiFoprRGQkp2av/Ze7sUYYlGhi1N62tfY=
|
github.com/exoscale/egoscale v0.102.3 h1:DYqN2ipoLKpiFoprRGQkp2av/Ze7sUYYlGhi1N62tfY=
|
||||||
github.com/exoscale/egoscale v0.102.3/go.mod h1:RPf2Gah6up+6kAEayHTQwqapzXlm93f0VQas/UEGU5c=
|
github.com/exoscale/egoscale v0.102.3/go.mod h1:RPf2Gah6up+6kAEayHTQwqapzXlm93f0VQas/UEGU5c=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
@@ -349,26 +348,22 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG
|
|||||||
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
|
github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
|
||||||
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
|
||||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
|
||||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||||
github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
|
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
|
||||||
github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA=
|
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
|
||||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||||
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
|
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
||||||
github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ=
|
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
||||||
github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA=
|
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
|
||||||
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
|
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
|
||||||
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
|
|
||||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||||
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
||||||
github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU=
|
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||||
github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
|
||||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||||
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
||||||
@@ -519,8 +514,8 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
|
|||||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
|
||||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
||||||
github.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf h1:C1GPyPJrOlJlIrcaBBiBpDsqZena2Ks8spa5xZqr1XQ=
|
github.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf h1:C1GPyPJrOlJlIrcaBBiBpDsqZena2Ks8spa5xZqr1XQ=
|
||||||
github.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf/go.mod h1:zXqxTI6jXDdKnlf8s+nT+3c8LrwUEy3yNpO4XJL90lA=
|
github.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf/go.mod h1:zXqxTI6jXDdKnlf8s+nT+3c8LrwUEy3yNpO4XJL90lA=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||||
@@ -597,8 +592,6 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
|
|||||||
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
|
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
|
||||||
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
|
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/http-wasm/http-wasm-host-go v0.6.0 h1:Vd4XvcFB3NMgWp2VLCQaiqYgLneN2lChbyN9NGoNDro=
|
|
||||||
github.com/http-wasm/http-wasm-host-go v0.6.0/go.mod h1:zQB3w+df4hryDEqBorGyA1DwPJ86LfKIASNLFuj6CuI=
|
|
||||||
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||||
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
|
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
|
||||||
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||||
@@ -640,6 +633,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
|
|||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
|
github.com/juliens/wasm-goexport v0.0.6 h1:YU0c+j0dF/HNy32vgYTA+K/6wnsZXgGc+ihl/UDw8iA=
|
||||||
|
github.com/juliens/wasm-goexport v0.0.6/go.mod h1:VTTpJVY3tIBet0Gv8r5TxdsNg0vDkkqXYm0Hp5hR42A=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg=
|
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213 h1:qGQQKEcAR99REcMpsXCp3lJ03zYT1PkRd3kQGPn9GVg=
|
||||||
@@ -753,8 +748,6 @@ github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
|
|||||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||||
github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
|
github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
|
|
||||||
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
|
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
|
||||||
github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
|
github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
@@ -874,8 +867,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
|
|||||||
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||||
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
|
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
|
||||||
github.com/onsi/gomega v1.31.1 h1:KYppCUK+bUgAZwHOu7EXVBKyQA6ILvOESHkn/tgoqvo=
|
github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk=
|
||||||
github.com/onsi/gomega v1.31.1/go.mod h1:y40C95dwAD1Nz36SsEnxvfFe8FFfNxzI5eJ0EYGyAy0=
|
github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg=
|
||||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
@@ -937,8 +930,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
|
|||||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||||
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||||
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
|
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
|
||||||
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
|
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
@@ -954,8 +947,8 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
|
|||||||
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||||
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||||
github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
|
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
|
||||||
github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
|
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
@@ -967,8 +960,8 @@ github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3c
|
|||||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
||||||
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
||||||
github.com/quic-go/quic-go v0.42.0 h1:uSfdap0eveIl8KXnipv9K7nlwZ5IqLlYOpJ58u5utpM=
|
github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA=
|
||||||
github.com/quic-go/quic-go v0.42.0/go.mod h1:132kz4kL3F9vxhW3CtQJLDVwcFe5wdWeJXXijhsO57M=
|
github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/redis/go-redis/v9 v9.2.1 h1:WlYJg71ODF0dVspZZCpYmoF1+U1Jjk9Rwd7pq6QmlCg=
|
github.com/redis/go-redis/v9 v9.2.1 h1:WlYJg71ODF0dVspZZCpYmoF1+U1Jjk9Rwd7pq6QmlCg=
|
||||||
github.com/redis/go-redis/v9 v9.2.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
|
github.com/redis/go-redis/v9 v9.2.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
|
||||||
@@ -1056,6 +1049,10 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q
|
|||||||
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||||
github.com/spiffe/go-spiffe/v2 v2.1.1 h1:RT9kM8MZLZIsPTH+HKQEP5yaAk3yd/VBzlINaRjXs8k=
|
github.com/spiffe/go-spiffe/v2 v2.1.1 h1:RT9kM8MZLZIsPTH+HKQEP5yaAk3yd/VBzlINaRjXs8k=
|
||||||
github.com/spiffe/go-spiffe/v2 v2.1.1/go.mod h1:5qg6rpqlwIub0JAiF1UK9IMD6BpPTmvG6yfSgDBs5lg=
|
github.com/spiffe/go-spiffe/v2 v2.1.1/go.mod h1:5qg6rpqlwIub0JAiF1UK9IMD6BpPTmvG6yfSgDBs5lg=
|
||||||
|
github.com/stealthrocket/wasi-go v0.8.0 h1:Hwnv3CUoMhhRyero9vt1vfwaYa9tu/Z5kmCW4WeAmVI=
|
||||||
|
github.com/stealthrocket/wasi-go v0.8.0/go.mod h1:PJ5oVs2E1ciOJnsTnav4nvTtEcJ4D1jUZAewS9pzuZg=
|
||||||
|
github.com/stealthrocket/wazergo v0.19.1 h1:BPrITETPgSFwiytwmToO0MbUC/+RGC39JScz1JmmG6c=
|
||||||
|
github.com/stealthrocket/wazergo v0.19.1/go.mod h1:riI0hxw4ndZA5e6z7PesHg2BtTftcZaMxRcoiGGipTs=
|
||||||
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
||||||
@@ -1091,8 +1088,8 @@ github.com/testcontainers/testcontainers-go v0.30.0 h1:jmn/XS22q4YRrcMwWg0pAwlCl
|
|||||||
github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0=
|
github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0=
|
||||||
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0 h1:Mk47J0WcLoY2ig72lPl+/w8GTPYbRCdHoWcPjV2mVr8=
|
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0 h1:Mk47J0WcLoY2ig72lPl+/w8GTPYbRCdHoWcPjV2mVr8=
|
||||||
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0/go.mod h1:CNnA3717kbp5wRxz+gU/cAwX6+4+OOispIsjHmKsEWQ=
|
github.com/testcontainers/testcontainers-go/modules/k3s v0.30.0/go.mod h1:CNnA3717kbp5wRxz+gU/cAwX6+4+OOispIsjHmKsEWQ=
|
||||||
github.com/tetratelabs/wazero v1.5.0 h1:Yz3fZHivfDiZFUXnWMPUoiW7s8tC1sjdBtlJn08qYa0=
|
github.com/tetratelabs/wazero v1.7.2 h1:1+z5nXJNwMLPAWaTePFi49SSTL0IMx/i3Fg8Yc25GDc=
|
||||||
github.com/tetratelabs/wazero v1.5.0/go.mod h1:0U0G41+ochRKoPKCJlh0jMg1CHkyfK8kDqiirMmKY8A=
|
github.com/tetratelabs/wazero v1.7.2/go.mod h1:ytl6Zuh20R/eROuyDaGPkp82O9C/DJfXAwJfQ3X6/7Y=
|
||||||
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
|
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
|
||||||
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||||
@@ -1108,6 +1105,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1
|
|||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/traefik/grpc-web v0.16.0 h1:eeUWZaFg6ZU0I9dWOYE2D5qkNzRBmXzzuRlxdltascY=
|
github.com/traefik/grpc-web v0.16.0 h1:eeUWZaFg6ZU0I9dWOYE2D5qkNzRBmXzzuRlxdltascY=
|
||||||
github.com/traefik/grpc-web v0.16.0/go.mod h1:2ttniSv7pTgBWIU2HZLokxRfFX3SA60c/DTmQQgVml4=
|
github.com/traefik/grpc-web v0.16.0/go.mod h1:2ttniSv7pTgBWIU2HZLokxRfFX3SA60c/DTmQQgVml4=
|
||||||
|
github.com/traefik/http-wasm-host-go v0.0.0-20240618100324-3c53dcaa1a70 h1:I+oBnV0orhmasb87yaX54tOAfqrV9+yKoQ1Cum5mq8w=
|
||||||
|
github.com/traefik/http-wasm-host-go v0.0.0-20240618100324-3c53dcaa1a70/go.mod h1:zQB3w+df4hryDEqBorGyA1DwPJ86LfKIASNLFuj6CuI=
|
||||||
github.com/traefik/paerser v0.2.0 h1:zqCLGSXoNlcBd+mzqSCLjon/I6phqIjeJL2xFB2ysgQ=
|
github.com/traefik/paerser v0.2.0 h1:zqCLGSXoNlcBd+mzqSCLjon/I6phqIjeJL2xFB2ysgQ=
|
||||||
github.com/traefik/paerser v0.2.0/go.mod h1:afzaVcgF8A+MpTnPG4wBr4whjanCSYA6vK5RwaYVtRc=
|
github.com/traefik/paerser v0.2.0/go.mod h1:afzaVcgF8A+MpTnPG4wBr4whjanCSYA6vK5RwaYVtRc=
|
||||||
github.com/traefik/yaegi v0.16.1 h1:f1De3DVJqIDKmnasUF6MwmWv1dSEEat0wcpXhD2On3E=
|
github.com/traefik/yaegi v0.16.1 h1:f1De3DVJqIDKmnasUF6MwmWv1dSEEat0wcpXhD2On3E=
|
||||||
@@ -1168,12 +1167,12 @@ github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtC
|
|||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs=
|
go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k=
|
go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE=
|
go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4=
|
go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
|
||||||
go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E=
|
go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
|
||||||
go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA=
|
go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
@@ -1181,8 +1180,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
|||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.opentelemetry.io/collector/pdata v1.2.0 h1:N6VdyEFYJyoHIKqHd0F372eNVD5b+AbH0ZQf7Z2jJ9I=
|
go.opentelemetry.io/collector/pdata v1.10.0 h1:oLyPLGvPTQrcRT64ZVruwvmH/u3SHTfNo01pteS4WOE=
|
||||||
go.opentelemetry.io/collector/pdata v1.2.0/go.mod h1:mKXb6527Syb8PT4P9CZOJNbkuHOHjjGTZNNwSKESJhc=
|
go.opentelemetry.io/collector/pdata v1.10.0/go.mod h1:IHxHsp+Jq/xfjORQMDJjSH6jvedOSTOyu3nbxqhWSYE=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
|
||||||
go.opentelemetry.io/contrib/propagators/autoprop v0.52.0 h1:xyRih6jMB0vroMSRdBE+uyKx20BclB/bybJt/LaCxmY=
|
go.opentelemetry.io/contrib/propagators/autoprop v0.52.0 h1:xyRih6jMB0vroMSRdBE+uyKx20BclB/bybJt/LaCxmY=
|
||||||
@@ -1195,44 +1194,41 @@ go.opentelemetry.io/contrib/propagators/jaeger v1.27.0 h1:tJPpZAEsihJgRTnXrPjY3r
|
|||||||
go.opentelemetry.io/contrib/propagators/jaeger v1.27.0/go.mod h1:5uPAMHJnlTktQbCCdWSX5PfK8CocD25mycIsZV/iFiU=
|
go.opentelemetry.io/contrib/propagators/jaeger v1.27.0/go.mod h1:5uPAMHJnlTktQbCCdWSX5PfK8CocD25mycIsZV/iFiU=
|
||||||
go.opentelemetry.io/contrib/propagators/ot v1.27.0 h1:xFPqk7ntRR87dqvl6RfeHiq9UlE8mPSuL6Dtr/zysL8=
|
go.opentelemetry.io/contrib/propagators/ot v1.27.0 h1:xFPqk7ntRR87dqvl6RfeHiq9UlE8mPSuL6Dtr/zysL8=
|
||||||
go.opentelemetry.io/contrib/propagators/ot v1.27.0/go.mod h1:nVLTPrDlSZPoVdeWRmpWBwxA73TYL6XLkC4bj72jvmg=
|
go.opentelemetry.io/contrib/propagators/ot v1.27.0/go.mod h1:nVLTPrDlSZPoVdeWRmpWBwxA73TYL6XLkC4bj72jvmg=
|
||||||
go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg=
|
go.opentelemetry.io/otel v1.27.1-0.20240624175855-921eb701b175 h1:2aQYN3ZllvztGtSIFNT2xGMrwsbPkGXj0O+KgPVsq5A=
|
||||||
go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ=
|
go.opentelemetry.io/otel v1.27.1-0.20240624175855-921eb701b175/go.mod h1:sAYY1kDqq6Qgmu9OdUrtIhBJAVKevM27kmSzEkEyyBg=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 h1:bFgvUr3/O4PHj3VQcFEuYKvRZJX1SJDQ+11JXuSB3/w=
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.1-0.20240624175855-921eb701b175 h1:awu+mcY8Zh17gkaxch+AY59ZEeZHsct61kce/JUa/Ho=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0/go.mod h1:xJntEd2KL6Qdg5lwp97HMLQDVeAhrYxmzFseAMDPQ8I=
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.1-0.20240624175855-921eb701b175/go.mod h1:wwHMT54YgLNroOkp4+XK7PRqCez5DtQayTBR9Wf1CEA=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 h1:CIHWikMsN3wO+wq1Tp5VGdVRTcON+DmOJSfDjXypKOc=
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.1-0.20240624175855-921eb701b175 h1:nNu+y3xs12BTRqNVciOBdq1bwUpqHJFs26lhXXnO8/0=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0/go.mod h1:TNupZ6cxqyFEpLXAZW7On+mLFL0/g0TE3unIYL91xWc=
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.1-0.20240624175855-921eb701b175/go.mod h1:/TESptXGTu8vZX8i19t1TSU4PGo9+gT9pGK/UNAea9I=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.1-0.20240624175855-921eb701b175 h1:ihrS8VlMvzPDy1QJ9yIsrKpcso6XnADVrj33wWxRG6k=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.1-0.20240624175855-921eb701b175/go.mod h1:O6p37S657iklDAWQZrzkHeyOooL0TRG7ADP6jZ1RpF8=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.1-0.20240624175855-921eb701b175 h1:qk6WZWPTf1MDvgLRCECyzbUzugNp2Ybc11fnrj6L/t4=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.1-0.20240624175855-921eb701b175/go.mod h1:A5CvQA6TBgKbMXLU3YrV9WB2m5xQYB50/PLkW1nJA8k=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.1-0.20240624175855-921eb701b175 h1:l47wCNFvbEdVi0U3Ojf5yD6QhrNjuK2N46N9tiCzpNE=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.1-0.20240624175855-921eb701b175/go.mod h1:vS4rxlVsjAdnvN34PmMKVPKZdQrKVxRw6Tz6qQ+NsY8=
|
||||||
go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik=
|
go.opentelemetry.io/otel/metric v1.27.1-0.20240624175855-921eb701b175 h1:YGLAewt2Wr/DFRQI6OjqqZ31B+CO3W1bcDWhsIL7r98=
|
||||||
go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak=
|
go.opentelemetry.io/otel/metric v1.27.1-0.20240624175855-921eb701b175/go.mod h1:YHVa4iPQFl9x0kF/Pxk1MYAbroRbl7zK+vT34w7VsCA=
|
||||||
go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI=
|
go.opentelemetry.io/otel/sdk v1.27.1-0.20240624175855-921eb701b175 h1:QdXgh+39hJwRYYQ3OgcI4SMawt/rPBgmQdtZYGxzdq8=
|
||||||
go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A=
|
go.opentelemetry.io/otel/sdk v1.27.1-0.20240624175855-921eb701b175/go.mod h1:Ru3JMbgJMftQARx7nhi0IJotnL2n8bv61IOrAgFpd+s=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI=
|
go.opentelemetry.io/otel/sdk/metric v1.27.1-0.20240624175855-921eb701b175 h1:GYxFdqdupCe5BEORUuWvNMRKeZliRLK8INKCgGzYLRA=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw=
|
go.opentelemetry.io/otel/sdk/metric v1.27.1-0.20240624175855-921eb701b175/go.mod h1:SRwqsyIihvNIPKOVe1CqC4owsJX2vv63U5op9Axd4fI=
|
||||||
go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw=
|
go.opentelemetry.io/otel/trace v1.27.1-0.20240624175855-921eb701b175 h1:1y2KlY7+gTBn4GZa2yMKqgcb4H2KIOrBSSrG4esCC3g=
|
||||||
go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4=
|
go.opentelemetry.io/otel/trace v1.27.1-0.20240624175855-921eb701b175/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4=
|
||||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||||
go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94=
|
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||||
go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A=
|
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
|
||||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||||
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
|
|
||||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
|
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
|
||||||
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
|
||||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
go.uber.org/ratelimit v0.3.0 h1:IdZd9wqvFXnvLvSEBo0KPcGfkoBGNkpTHlrE3Rcjkjw=
|
go.uber.org/ratelimit v0.3.0 h1:IdZd9wqvFXnvLvSEBo0KPcGfkoBGNkpTHlrE3Rcjkjw=
|
||||||
@@ -1240,7 +1236,6 @@ go.uber.org/ratelimit v0.3.0/go.mod h1:So5LG7CV1zWpY1sHe+DXTJqQvOx+FFPFaAs2SnoyB
|
|||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
|
||||||
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
|
|
||||||
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
|
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
|
||||||
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
|
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||||
@@ -1280,8 +1275,8 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL
|
|||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
||||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||||
golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8=
|
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM=
|
||||||
golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
|
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc=
|
||||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
@@ -1507,7 +1502,6 @@ golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4X
|
|||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|
||||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
@@ -1517,8 +1511,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
|||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
|
|
||||||
gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
|
|
||||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||||
gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
|
gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
|
||||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
||||||
@@ -1553,10 +1545,10 @@ google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6D
|
|||||||
google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d h1:Aqf0fiIdUQEj0Gn9mKFFXoQfTTEaNopWpfVyYADxiSg=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Od4k8V1LQSizPRUK4OzZ7TBE/20k+jPczUDAEyvn69Y=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d h1:k3zyW3BYYR30e8v3x0bTDdE9vpYFjZHK+HcyqkrppWk=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||||
@@ -1594,8 +1586,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
|
|||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
||||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@@ -1650,20 +1642,20 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
k8s.io/api v0.29.2 h1:hBC7B9+MU+ptchxEqTNW2DkUosJpp1P+Wn6YncZ474A=
|
k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA=
|
||||||
k8s.io/api v0.29.2/go.mod h1:sdIaaKuU7P44aoyyLlikSLayT6Vb7bvJNCX105xZXY0=
|
k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE=
|
||||||
k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08=
|
k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs=
|
||||||
k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc=
|
k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y=
|
||||||
k8s.io/apimachinery v0.29.2 h1:EWGpfJ856oj11C52NRCHuU7rFDwxev48z+6DSlGNsV8=
|
k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA=
|
||||||
k8s.io/apimachinery v0.29.2/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU=
|
k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
|
||||||
k8s.io/client-go v0.29.2 h1:FEg85el1TeZp+/vYJM7hkDlSTFZ+c5nnK44DJ4FyoRg=
|
k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ=
|
||||||
k8s.io/client-go v0.29.2/go.mod h1:knlvFZE58VpqbQpJNbCbctTVXcd35mMyAAwBdpt4jrA=
|
k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY=
|
||||||
k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
|
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
|
||||||
k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
|
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||||
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
|
k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/7iB8a2eSxCyxdVjJp+lLY=
|
||||||
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
|
k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
|
||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
|
k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 h1:ao5hUqGhsqdm+bYbjH/pRkCs0unBGe9UyDahzs9zQzQ=
|
||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20240423183400-0849a56e8f22/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
mvdan.cc/xurls/v2 v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
|
mvdan.cc/xurls/v2 v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
|
||||||
mvdan.cc/xurls/v2 v2.5.0/go.mod h1:yQgaGQ1rFtJUzkmKiHYSSfuQxqfYmd//X6PxvholpeE=
|
mvdan.cc/xurls/v2 v2.5.0/go.mod h1:yQgaGQ1rFtJUzkmKiHYSSfuQxqfYmd//X6PxvholpeE=
|
||||||
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
|
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
|
||||||
@@ -1671,10 +1663,10 @@ nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0
|
|||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||||
sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
|
sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME=
|
||||||
sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
|
sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw=
|
||||||
sigs.k8s.io/gateway-api v1.0.0 h1:iPTStSv41+d9p0xFydll6d7f7MOBGuqXM6p2/zVYMAs=
|
sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM=
|
||||||
sigs.k8s.io/gateway-api v1.0.0/go.mod h1:4cUgr0Lnp5FZ0Cdq8FdRwCvpiWws7LVhLHGIudLlf4c=
|
sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs=
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
|
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
|
||||||
|
File diff suppressed because it is too large
Load Diff
18317
integration/fixtures/k8s-conformance/00-experimental-v1.1.0.yml
Normal file
18317
integration/fixtures/k8s-conformance/00-experimental-v1.1.0.yml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -15,12 +15,19 @@ rules:
|
|||||||
- ""
|
- ""
|
||||||
resources:
|
resources:
|
||||||
- services
|
- services
|
||||||
- endpoints
|
|
||||||
- secrets
|
- secrets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- discovery.k8s.io
|
||||||
|
resources:
|
||||||
|
- endpointslices
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- gateway.networking.k8s.io
|
- gateway.networking.k8s.io
|
||||||
resources:
|
resources:
|
||||||
|
@@ -48,17 +48,20 @@ spec:
|
|||||||
- --api.insecure
|
- --api.insecure
|
||||||
- --entrypoints.web.address=:80
|
- --entrypoints.web.address=:80
|
||||||
- --entrypoints.websecure.address=:443
|
- --entrypoints.websecure.address=:443
|
||||||
- --experimental.kubernetesgateway
|
- --entrypoints.web8080.address=:8080
|
||||||
|
- --entrypoints.traefik.address=:9000
|
||||||
- --providers.kubernetesgateway.experimentalChannel
|
- --providers.kubernetesgateway.experimentalChannel
|
||||||
- --providers.kubernetesgateway.statusaddress.service.namespace=traefik
|
- --providers.kubernetesgateway.statusaddress.service.namespace=traefik
|
||||||
- --providers.kubernetesgateway.statusaddress.service.name=traefik
|
- --providers.kubernetesgateway.statusaddress.service.name=traefik
|
||||||
ports:
|
ports:
|
||||||
- name: web
|
- name: web
|
||||||
containerPort: 80
|
containerPort: 80
|
||||||
- name: admin
|
|
||||||
containerPort: 8080
|
|
||||||
- name: websecure
|
- name: websecure
|
||||||
containerPort: 443
|
containerPort: 443
|
||||||
|
- name: web8080
|
||||||
|
containerPort: 8080
|
||||||
|
- name: traefik
|
||||||
|
containerPort: 9000
|
||||||
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -78,5 +81,8 @@ spec:
|
|||||||
name: websecure
|
name: websecure
|
||||||
targetPort: websecure
|
targetPort: websecure
|
||||||
- port: 8080
|
- port: 8080
|
||||||
name: admin
|
name: web8080
|
||||||
targetPort: admin
|
targetPort: web8080
|
||||||
|
- port: 9000
|
||||||
|
name: traefik
|
||||||
|
targetPort: traefik
|
||||||
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -63,12 +63,12 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: |-
|
description: |-
|
||||||
Middlewares defines the list of references to Middleware resources.
|
Middlewares defines the list of references to Middleware resources.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-middleware
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-middleware
|
||||||
items:
|
items:
|
||||||
description: MiddlewareRef is a reference to a Middleware
|
description: MiddlewareRef is a reference to a Middleware
|
||||||
resource.
|
resource.
|
||||||
@@ -88,7 +88,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -98,6 +98,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be
|
||||||
|
sent to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for
|
||||||
|
the health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme
|
||||||
|
for the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -120,6 +181,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -161,7 +229,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -209,7 +277,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- kind
|
- kind
|
||||||
@@ -219,18 +287,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration.
|
TLS defines the TLS configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -249,17 +317,17 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSOption.
|
Name defines the name of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSOption.
|
Namespace defines the namespace of the referenced TLSOption.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
@@ -276,12 +344,12 @@ spec:
|
|||||||
name:
|
name:
|
||||||
description: |-
|
description: |-
|
||||||
Name defines the name of the referenced TLSStore.
|
Name defines the name of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
namespace:
|
namespace:
|
||||||
description: |-
|
description: |-
|
||||||
Namespace defines the namespace of the referenced TLSStore.
|
Namespace defines the namespace of the referenced TLSStore.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- name
|
- name
|
||||||
@@ -341,7 +409,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -354,7 +422,7 @@ spec:
|
|||||||
match:
|
match:
|
||||||
description: |-
|
description: |-
|
||||||
Match defines the router's rule.
|
Match defines the router's rule.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rule_1
|
||||||
type: string
|
type: string
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares defines the list of references to MiddlewareTCP
|
description: Middlewares defines the list of references to MiddlewareTCP
|
||||||
@@ -378,7 +446,7 @@ spec:
|
|||||||
priority:
|
priority:
|
||||||
description: |-
|
description: |-
|
||||||
Priority defines the router's priority.
|
Priority defines the router's priority.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#priority_1
|
||||||
type: integer
|
type: integer
|
||||||
services:
|
services:
|
||||||
description: Services defines the list of TCP services.
|
description: Services defines the list of TCP services.
|
||||||
@@ -401,6 +469,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -412,7 +487,7 @@ spec:
|
|||||||
proxyProtocol:
|
proxyProtocol:
|
||||||
description: |-
|
description: |-
|
||||||
ProxyProtocol defines the PROXY protocol configuration.
|
ProxyProtocol defines the PROXY protocol configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#proxy-protocol
|
||||||
properties:
|
properties:
|
||||||
version:
|
version:
|
||||||
description: Version defines the PROXY Protocol version
|
description: Version defines the PROXY Protocol version
|
||||||
@@ -450,7 +525,7 @@ spec:
|
|||||||
syntax:
|
syntax:
|
||||||
description: |-
|
description: |-
|
||||||
Syntax defines the router's rule syntax.
|
Syntax defines the router's rule syntax.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rulesyntax_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#rulesyntax_1
|
||||||
type: string
|
type: string
|
||||||
required:
|
required:
|
||||||
- match
|
- match
|
||||||
@@ -459,18 +534,18 @@ spec:
|
|||||||
tls:
|
tls:
|
||||||
description: |-
|
description: |-
|
||||||
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#tls_1
|
||||||
properties:
|
properties:
|
||||||
certResolver:
|
certResolver:
|
||||||
description: |-
|
description: |-
|
||||||
CertResolver defines the name of the certificate resolver to use.
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
Cert resolvers have to be configured in the static configuration.
|
Cert resolvers have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers
|
More info: https://doc.traefik.io/traefik/v3.1/https/acme/#certificate-resolvers
|
||||||
type: string
|
type: string
|
||||||
domains:
|
domains:
|
||||||
description: |-
|
description: |-
|
||||||
Domains defines the list of domains that will be used to issue certificates.
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains
|
More info: https://doc.traefik.io/traefik/v3.1/routing/routers/#domains
|
||||||
items:
|
items:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
@@ -489,7 +564,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
If not defined, the `default` TLSOption is used.
|
If not defined, the `default` TLSOption is used.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
description: Name defines the name of the referenced Traefik
|
description: Name defines the name of the referenced Traefik
|
||||||
@@ -581,7 +656,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
EntryPoints defines the list of entry point names to bind to.
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
Entry points have to be configured in the static configuration.
|
Entry points have to be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/
|
More info: https://doc.traefik.io/traefik/v3.1/routing/entrypoints/
|
||||||
Default: all.
|
Default: all.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -612,6 +687,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
port:
|
port:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -661,7 +743,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
Middleware is the CRD implementation of a Traefik Middleware.
|
Middleware is the CRD implementation of a Traefik Middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -687,7 +769,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
AddPrefix holds the add prefix middleware configuration.
|
AddPrefix holds the add prefix middleware configuration.
|
||||||
This middleware updates the path of a request before forwarding it.
|
This middleware updates the path of a request before forwarding it.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/addprefix/
|
||||||
properties:
|
properties:
|
||||||
prefix:
|
prefix:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -699,12 +781,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
BasicAuth holds the basic auth middleware configuration.
|
BasicAuth holds the basic auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -725,7 +807,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Buffering holds the buffering middleware configuration.
|
Buffering holds the buffering middleware configuration.
|
||||||
This middleware retries or limits the size of requests that can be forwarded to backends.
|
This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
properties:
|
properties:
|
||||||
maxRequestBodyBytes:
|
maxRequestBodyBytes:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -757,14 +839,14 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RetryExpression defines the retry conditions.
|
RetryExpression defines the retry conditions.
|
||||||
It is a logical combination of functions with operators AND (&&) and OR (||).
|
It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#retryexpression
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
chain:
|
chain:
|
||||||
description: |-
|
description: |-
|
||||||
Chain holds the configuration of the chain middleware.
|
Chain holds the configuration of the chain middleware.
|
||||||
This middleware enables to define reusable combinations of other pieces of middleware.
|
This middleware enables to define reusable combinations of other pieces of middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/chain/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/chain/
|
||||||
properties:
|
properties:
|
||||||
middlewares:
|
middlewares:
|
||||||
description: Middlewares is the list of MiddlewareRef which composes
|
description: Middlewares is the list of MiddlewareRef which composes
|
||||||
@@ -823,7 +905,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Compress holds the compress middleware configuration.
|
Compress holds the compress middleware configuration.
|
||||||
This middleware compresses responses before sending them to the client, using gzip compression.
|
This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/compress/
|
||||||
properties:
|
properties:
|
||||||
defaultEncoding:
|
defaultEncoding:
|
||||||
description: DefaultEncoding specifies the default encoding if
|
description: DefaultEncoding specifies the default encoding if
|
||||||
@@ -866,12 +948,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
DigestAuth holds the digest auth middleware configuration.
|
DigestAuth holds the digest auth middleware configuration.
|
||||||
This middleware restricts access to your services to known users.
|
This middleware restricts access to your services to known users.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/digestauth/
|
||||||
properties:
|
properties:
|
||||||
headerField:
|
headerField:
|
||||||
description: |-
|
description: |-
|
||||||
HeaderField defines a header field to store the authenticated user.
|
HeaderField defines a header field to store the authenticated user.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
type: string
|
type: string
|
||||||
realm:
|
realm:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -891,7 +973,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ErrorPage holds the custom error middleware configuration.
|
ErrorPage holds the custom error middleware configuration.
|
||||||
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/
|
||||||
properties:
|
properties:
|
||||||
query:
|
query:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -901,8 +983,69 @@ spec:
|
|||||||
service:
|
service:
|
||||||
description: |-
|
description: |-
|
||||||
Service defines the reference to a Kubernetes Service that will serve the error page.
|
Service defines the reference to a Kubernetes Service that will serve the error page.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/#service
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/errorpages/#service
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in
|
||||||
|
the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -925,6 +1068,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -966,7 +1116,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -1024,7 +1174,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ForwardAuth holds the forward auth middleware configuration.
|
ForwardAuth holds the forward auth middleware configuration.
|
||||||
This middleware delegates the request authentication to a Service.
|
This middleware delegates the request authentication to a Service.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/
|
||||||
properties:
|
properties:
|
||||||
addAuthCookiesToResponse:
|
addAuthCookiesToResponse:
|
||||||
description: AddAuthCookiesToResponse defines the list of cookies
|
description: AddAuthCookiesToResponse defines the list of cookies
|
||||||
@@ -1052,7 +1202,7 @@ spec:
|
|||||||
authResponseHeadersRegex:
|
authResponseHeadersRegex:
|
||||||
description: |-
|
description: |-
|
||||||
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
type: string
|
type: string
|
||||||
tls:
|
tls:
|
||||||
description: TLS defines the configuration used to secure the
|
description: TLS defines the configuration used to secure the
|
||||||
@@ -1099,7 +1249,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
Headers holds the headers middleware configuration.
|
Headers holds the headers middleware configuration.
|
||||||
This middleware manages the requests and responses headers.
|
This middleware manages the requests and responses headers.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/headers/#customrequestheaders
|
||||||
properties:
|
properties:
|
||||||
accessControlAllowCredentials:
|
accessControlAllowCredentials:
|
||||||
description: AccessControlAllowCredentials defines whether the
|
description: AccessControlAllowCredentials defines whether the
|
||||||
@@ -1159,6 +1309,10 @@ spec:
|
|||||||
description: ContentSecurityPolicy defines the Content-Security-Policy
|
description: ContentSecurityPolicy defines the Content-Security-Policy
|
||||||
header value.
|
header value.
|
||||||
type: string
|
type: string
|
||||||
|
contentSecurityPolicyReportOnly:
|
||||||
|
description: ContentSecurityPolicyReportOnly defines the Content-Security-Policy-Report-Only
|
||||||
|
header value.
|
||||||
|
type: string
|
||||||
contentTypeNosniff:
|
contentTypeNosniff:
|
||||||
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
||||||
header with the nosniff value.
|
header with the nosniff value.
|
||||||
@@ -1266,7 +1420,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
InFlightReq holds the in-flight request middleware configuration.
|
InFlightReq holds the in-flight request middleware configuration.
|
||||||
This middleware limits the number of requests being processed and served concurrently.
|
This middleware limits the number of requests being processed and served concurrently.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/
|
||||||
properties:
|
properties:
|
||||||
amount:
|
amount:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1279,12 +1433,12 @@ spec:
|
|||||||
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
If several strategies are defined at the same time, an error will be raised.
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
If none are set, the default is to use the requestHost.
|
If none are set, the default is to use the requestHost.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/#sourcecriterion
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1313,12 +1467,12 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList holds the IP allowlist middleware configuration.
|
IPAllowList holds the IP allowlist middleware configuration.
|
||||||
This middleware limits allowed requests based on the client IP.
|
This middleware limits allowed requests based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1350,7 +1504,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1375,7 +1529,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
This middleware adds the selected data from the passed client TLS certificate to a header.
|
This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/passtlsclientcert/
|
||||||
properties:
|
properties:
|
||||||
info:
|
info:
|
||||||
description: Info selects the specific client certificate details
|
description: Info selects the specific client certificate details
|
||||||
@@ -1484,7 +1638,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RateLimit holds the rate limit configuration.
|
RateLimit holds the rate limit configuration.
|
||||||
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ratelimit/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ratelimit/
|
||||||
properties:
|
properties:
|
||||||
average:
|
average:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1517,7 +1671,7 @@ spec:
|
|||||||
ipStrategy:
|
ipStrategy:
|
||||||
description: |-
|
description: |-
|
||||||
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
properties:
|
properties:
|
||||||
depth:
|
depth:
|
||||||
description: Depth tells Traefik to use the X-Forwarded-For
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
@@ -1546,7 +1700,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectRegex holds the redirect regex middleware configuration.
|
RedirectRegex holds the redirect regex middleware configuration.
|
||||||
This middleware redirects a request using regex matching and replacement.
|
This middleware redirects a request using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectregex/#regex
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -1565,7 +1719,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
RedirectScheme holds the redirect scheme middleware configuration.
|
RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
This middleware redirects requests from a scheme/port to another.
|
This middleware redirects requests from a scheme/port to another.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectscheme/
|
||||||
properties:
|
properties:
|
||||||
permanent:
|
permanent:
|
||||||
description: Permanent defines whether the redirection is permanent
|
description: Permanent defines whether the redirection is permanent
|
||||||
@@ -1582,7 +1736,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePath holds the replace path middleware configuration.
|
ReplacePath holds the replace path middleware configuration.
|
||||||
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepath/
|
||||||
properties:
|
properties:
|
||||||
path:
|
path:
|
||||||
description: Path defines the path to use as replacement in the
|
description: Path defines the path to use as replacement in the
|
||||||
@@ -1593,7 +1747,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
ReplacePathRegex holds the replace path regex middleware configuration.
|
ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
This middleware replaces the path of a URL using regex matching and replacement.
|
This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepathregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression used to match
|
description: Regex defines the regular expression used to match
|
||||||
@@ -1609,7 +1763,7 @@ spec:
|
|||||||
Retry holds the retry middleware configuration.
|
Retry holds the retry middleware configuration.
|
||||||
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/retry/
|
||||||
properties:
|
properties:
|
||||||
attempts:
|
attempts:
|
||||||
description: Attempts defines how many times the request should
|
description: Attempts defines how many times the request should
|
||||||
@@ -1631,7 +1785,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefix holds the strip prefix middleware configuration.
|
StripPrefix holds the strip prefix middleware configuration.
|
||||||
This middleware removes the specified prefixes from the URL path.
|
This middleware removes the specified prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefix/
|
||||||
properties:
|
properties:
|
||||||
forceSlash:
|
forceSlash:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1650,7 +1804,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
This middleware removes the matching prefixes from the URL path.
|
This middleware removes the matching prefixes from the URL path.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefixregex/
|
||||||
properties:
|
properties:
|
||||||
regex:
|
regex:
|
||||||
description: Regex defines the regular expression to match the
|
description: Regex defines the regular expression to match the
|
||||||
@@ -1687,7 +1841,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/overview/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/overview/
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1723,7 +1877,7 @@ spec:
|
|||||||
description: |-
|
description: |-
|
||||||
IPAllowList defines the IPAllowList middleware configuration.
|
IPAllowList defines the IPAllowList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipallowlist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipallowlist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
@@ -1737,7 +1891,7 @@ spec:
|
|||||||
IPWhiteList defines the IPWhiteList middleware configuration.
|
IPWhiteList defines the IPWhiteList middleware configuration.
|
||||||
This middleware accepts/refuses connections based on the client IP.
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
Deprecated: please use IPAllowList instead.
|
Deprecated: please use IPAllowList instead.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipwhitelist/
|
More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipwhitelist/
|
||||||
properties:
|
properties:
|
||||||
sourceRange:
|
sourceRange:
|
||||||
description: SourceRange defines the allowed IPs (or ranges of
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
@@ -1776,7 +1930,7 @@ spec:
|
|||||||
ServersTransport is the CRD implementation of a ServersTransport.
|
ServersTransport is the CRD implementation of a ServersTransport.
|
||||||
If no serversTransport is specified, the default@internal will be used.
|
If no serversTransport is specified, the default@internal will be used.
|
||||||
The default@internal serversTransport is created from the static configuration.
|
The default@internal serversTransport is created from the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_1
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_1
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -1915,7 +2069,7 @@ spec:
|
|||||||
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
||||||
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
||||||
The default@internal tcpServersTransport can be configured in the static configuration.
|
The default@internal tcpServersTransport can be configured in the static configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_3
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#serverstransport_3
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2033,7 +2187,7 @@ spec:
|
|||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: |-
|
description: |-
|
||||||
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#tls-options
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2058,14 +2212,14 @@ spec:
|
|||||||
alpnProtocols:
|
alpnProtocols:
|
||||||
description: |-
|
description: |-
|
||||||
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#alpn-protocols
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#alpn-protocols
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
cipherSuites:
|
cipherSuites:
|
||||||
description: |-
|
description: |-
|
||||||
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#cipher-suites
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#cipher-suites
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
@@ -2093,7 +2247,7 @@ spec:
|
|||||||
curvePreferences:
|
curvePreferences:
|
||||||
description: |-
|
description: |-
|
||||||
CurvePreferences defines the preferred elliptic curves in a specific order.
|
CurvePreferences defines the preferred elliptic curves in a specific order.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#curve-preferences
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#curve-preferences
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
@@ -2149,7 +2303,7 @@ spec:
|
|||||||
TLSStore is the CRD implementation of a Traefik TLS Store.
|
TLSStore is the CRD implementation of a Traefik TLS Store.
|
||||||
For the time being, only the TLSStore named default is supported.
|
For the time being, only the TLSStore named default is supported.
|
||||||
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/https/tls/#certificates-stores
|
More info: https://doc.traefik.io/traefik/v3.1/https/tls/#certificates-stores
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2247,7 +2401,7 @@ spec:
|
|||||||
TraefikService object allows to:
|
TraefikService object allows to:
|
||||||
- Apply weight to Services on load-balancing
|
- Apply weight to Services on load-balancing
|
||||||
- Mirror traffic on services
|
- Mirror traffic on services
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-traefikservice
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-traefikservice
|
||||||
properties:
|
properties:
|
||||||
apiVersion:
|
apiVersion:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -2272,6 +2426,67 @@ spec:
|
|||||||
mirroring:
|
mirroring:
|
||||||
description: Mirroring defines the Mirroring service configuration.
|
description: Mirroring defines the Mirroring service configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent to
|
||||||
|
the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname in the
|
||||||
|
Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the health
|
||||||
|
check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the health
|
||||||
|
check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status code
|
||||||
|
of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2291,6 +2506,67 @@ spec:
|
|||||||
items:
|
items:
|
||||||
description: MirrorService holds the mirror configuration.
|
description: MirrorService holds the mirror configuration.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2313,6 +2589,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2359,7 +2642,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2419,6 +2702,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2459,7 +2749,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2511,6 +2801,67 @@ spec:
|
|||||||
description: Service defines an upstream HTTP service to proxy
|
description: Service defines an upstream HTTP service to proxy
|
||||||
traffic to.
|
traffic to.
|
||||||
properties:
|
properties:
|
||||||
|
healthCheck:
|
||||||
|
description: Healthcheck defines health checks for ExternalName
|
||||||
|
services.
|
||||||
|
properties:
|
||||||
|
followRedirects:
|
||||||
|
description: |-
|
||||||
|
FollowRedirects defines whether redirects should be followed during the health check calls.
|
||||||
|
Default: true
|
||||||
|
type: boolean
|
||||||
|
headers:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: Headers defines custom headers to be sent
|
||||||
|
to the health check endpoint.
|
||||||
|
type: object
|
||||||
|
hostname:
|
||||||
|
description: Hostname defines the value of hostname
|
||||||
|
in the Host header of the health check request.
|
||||||
|
type: string
|
||||||
|
interval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Interval defines the frequency of the health check calls.
|
||||||
|
Default: 30s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
method:
|
||||||
|
description: Method defines the healthcheck method.
|
||||||
|
type: string
|
||||||
|
mode:
|
||||||
|
description: |-
|
||||||
|
Mode defines the health check mode.
|
||||||
|
If defined to grpc, will use the gRPC health check protocol to probe the server.
|
||||||
|
Default: http
|
||||||
|
type: string
|
||||||
|
path:
|
||||||
|
description: Path defines the server URL path for the
|
||||||
|
health check endpoint.
|
||||||
|
type: string
|
||||||
|
port:
|
||||||
|
description: Port defines the server URL port for the
|
||||||
|
health check endpoint.
|
||||||
|
type: integer
|
||||||
|
scheme:
|
||||||
|
description: Scheme replaces the server URL scheme for
|
||||||
|
the health check endpoint.
|
||||||
|
type: string
|
||||||
|
status:
|
||||||
|
description: Status defines the expected HTTP status
|
||||||
|
code of the response to the health check request.
|
||||||
|
type: integer
|
||||||
|
timeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Timeout defines the maximum duration Traefik will wait for a health check request before considering the server unhealthy.
|
||||||
|
Default: 5s
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
kind:
|
kind:
|
||||||
description: Kind defines the kind of the Service.
|
description: Kind defines the kind of the Service.
|
||||||
enum:
|
enum:
|
||||||
@@ -2533,6 +2884,13 @@ spec:
|
|||||||
The Kubernetes Service itself does load-balance to the pods.
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
By default, NativeLB is false.
|
By default, NativeLB is false.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
nodePortLB:
|
||||||
|
description: |-
|
||||||
|
NodePortLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the nodes internal IPs using the nodePort when the service type is NodePort.
|
||||||
|
It allows services to be reachable when Traefik runs externally from the Kubernetes cluster but within the same network of the nodes.
|
||||||
|
By default, NodePortLB is false.
|
||||||
|
type: boolean
|
||||||
passHostHeader:
|
passHostHeader:
|
||||||
description: |-
|
description: |-
|
||||||
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
@@ -2574,7 +2932,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines the sticky sessions configuration.
|
Sticky defines the sticky sessions configuration.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions
|
More info: https://doc.traefik.io/traefik/v3.1/routing/services/#sticky-sessions
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
@@ -2621,7 +2979,7 @@ spec:
|
|||||||
sticky:
|
sticky:
|
||||||
description: |-
|
description: |-
|
||||||
Sticky defines whether sticky sessions are enabled.
|
Sticky defines whether sticky sessions are enabled.
|
||||||
More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
More info: https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
||||||
properties:
|
properties:
|
||||||
cookie:
|
cookie:
|
||||||
description: Cookie defines the sticky cookie configuration.
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"slices"
|
"slices"
|
||||||
@@ -17,7 +18,7 @@ import (
|
|||||||
"github.com/testcontainers/testcontainers-go/network"
|
"github.com/testcontainers/testcontainers-go/network"
|
||||||
"github.com/traefik/traefik/v3/integration/try"
|
"github.com/traefik/traefik/v3/integration/try"
|
||||||
"github.com/traefik/traefik/v3/pkg/version"
|
"github.com/traefik/traefik/v3/pkg/version"
|
||||||
"gopkg.in/yaml.v3"
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
kclientset "k8s.io/client-go/kubernetes"
|
kclientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
@@ -27,10 +28,13 @@ import (
|
|||||||
gatev1 "sigs.k8s.io/gateway-api/apis/v1"
|
gatev1 "sigs.k8s.io/gateway-api/apis/v1"
|
||||||
gatev1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
|
gatev1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
|
||||||
gatev1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
|
gatev1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
|
||||||
conformanceV1alpha1 "sigs.k8s.io/gateway-api/conformance/apis/v1alpha1"
|
"sigs.k8s.io/gateway-api/conformance"
|
||||||
|
v1 "sigs.k8s.io/gateway-api/conformance/apis/v1"
|
||||||
"sigs.k8s.io/gateway-api/conformance/tests"
|
"sigs.k8s.io/gateway-api/conformance/tests"
|
||||||
"sigs.k8s.io/gateway-api/conformance/utils/config"
|
"sigs.k8s.io/gateway-api/conformance/utils/config"
|
||||||
ksuite "sigs.k8s.io/gateway-api/conformance/utils/suite"
|
ksuite "sigs.k8s.io/gateway-api/conformance/utils/suite"
|
||||||
|
"sigs.k8s.io/gateway-api/pkg/features"
|
||||||
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -84,7 +88,7 @@ func (s *K8sConformanceSuite) SetupSuite() {
|
|||||||
|
|
||||||
s.k3sContainer, err = k3s.RunContainer(ctx,
|
s.k3sContainer, err = k3s.RunContainer(ctx,
|
||||||
testcontainers.WithImage(k3sImage),
|
testcontainers.WithImage(k3sImage),
|
||||||
k3s.WithManifest("./fixtures/k8s-conformance/00-experimental-v1.0.0.yml"),
|
k3s.WithManifest("./fixtures/k8s-conformance/00-experimental-v1.1.0.yml"),
|
||||||
k3s.WithManifest("./fixtures/k8s-conformance/01-rbac.yml"),
|
k3s.WithManifest("./fixtures/k8s-conformance/01-rbac.yml"),
|
||||||
k3s.WithManifest("./fixtures/k8s-conformance/02-traefik.yml"),
|
k3s.WithManifest("./fixtures/k8s-conformance/02-traefik.yml"),
|
||||||
network.WithNetwork(nil, s.network),
|
network.WithNetwork(nil, s.network),
|
||||||
@@ -122,15 +126,19 @@ func (s *K8sConformanceSuite) SetupSuite() {
|
|||||||
s.T().Fatalf("Error initializing Kubernetes REST client: %v", err)
|
s.T().Fatalf("Error initializing Kubernetes REST client: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = gatev1alpha2.AddToScheme(s.kubeClient.Scheme()); err != nil {
|
if err = gatev1alpha2.Install(s.kubeClient.Scheme()); err != nil {
|
||||||
s.T().Fatal(err)
|
s.T().Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = gatev1beta1.AddToScheme(s.kubeClient.Scheme()); err != nil {
|
if err = gatev1beta1.Install(s.kubeClient.Scheme()); err != nil {
|
||||||
s.T().Fatal(err)
|
s.T().Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = gatev1.AddToScheme(s.kubeClient.Scheme()); err != nil {
|
if err = gatev1.Install(s.kubeClient.Scheme()); err != nil {
|
||||||
|
s.T().Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = apiextensionsv1.AddToScheme(s.kubeClient.Scheme()); err != nil {
|
||||||
s.T().Fatal(err)
|
s.T().Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,103 +174,63 @@ func (s *K8sConformanceSuite) TestK8sGatewayAPIConformance() {
|
|||||||
k3sContainerIP, err := s.k3sContainer.ContainerIP(context.Background())
|
k3sContainerIP, err := s.k3sContainer.ContainerIP(context.Background())
|
||||||
require.NoError(s.T(), err)
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
err = try.GetRequest("http://"+k3sContainerIP+":8080/api/entrypoints", 10*time.Second, try.BodyContains(`"name":"web"`))
|
err = try.GetRequest("http://"+k3sContainerIP+":9000/api/entrypoints", 10*time.Second, try.BodyContains(`"name":"web"`))
|
||||||
require.NoError(s.T(), err)
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
opts := ksuite.Options{
|
cSuite, err := ksuite.NewConformanceTestSuite(ksuite.ConformanceOptions{
|
||||||
Client: s.kubeClient,
|
Client: s.kubeClient,
|
||||||
Clientset: s.clientSet,
|
Clientset: s.clientSet,
|
||||||
GatewayClassName: "traefik",
|
GatewayClassName: "traefik",
|
||||||
Debug: true,
|
Debug: true,
|
||||||
CleanupBaseResources: true,
|
CleanupBaseResources: true,
|
||||||
TimeoutConfig: config.TimeoutConfig{
|
TimeoutConfig: config.DefaultTimeoutConfig(),
|
||||||
CreateTimeout: 5 * time.Second,
|
ManifestFS: []fs.FS{&conformance.Manifests},
|
||||||
DeleteTimeout: 5 * time.Second,
|
|
||||||
GetTimeout: 5 * time.Second,
|
|
||||||
GatewayMustHaveAddress: 5 * time.Second,
|
|
||||||
GatewayMustHaveCondition: 5 * time.Second,
|
|
||||||
GatewayStatusMustHaveListeners: 10 * time.Second,
|
|
||||||
GatewayListenersMustHaveCondition: 5 * time.Second,
|
|
||||||
GWCMustBeAccepted: 60 * time.Second, // Pod creation in k3s cluster can be long.
|
|
||||||
HTTPRouteMustNotHaveParents: 5 * time.Second,
|
|
||||||
HTTPRouteMustHaveCondition: 5 * time.Second,
|
|
||||||
TLSRouteMustHaveCondition: 5 * time.Second,
|
|
||||||
RouteMustHaveParents: 5 * time.Second,
|
|
||||||
ManifestFetchTimeout: 5 * time.Second,
|
|
||||||
MaxTimeToConsistency: 5 * time.Second,
|
|
||||||
NamespacesMustBeReady: 60 * time.Second, // Pod creation in k3s cluster can be long.
|
|
||||||
RequestTimeout: 5 * time.Second,
|
|
||||||
LatestObservedGenerationSet: 5 * time.Second,
|
|
||||||
RequiredConsecutiveSuccesses: 0,
|
|
||||||
},
|
|
||||||
SupportedFeatures: sets.New[ksuite.SupportedFeature]().
|
|
||||||
Insert(ksuite.GatewayCoreFeatures.UnsortedList()...).
|
|
||||||
Insert(ksuite.ReferenceGrantCoreFeatures.UnsortedList()...),
|
|
||||||
EnableAllSupportedFeatures: false,
|
EnableAllSupportedFeatures: false,
|
||||||
RunTest: *k8sConformanceRunTest,
|
RunTest: *k8sConformanceRunTest,
|
||||||
// Until the feature are all supported, following tests are skipped.
|
Implementation: v1.Implementation{
|
||||||
SkipTests: []string{
|
|
||||||
"HTTPExactPathMatching",
|
|
||||||
"HTTPRouteHostnameIntersection",
|
|
||||||
"HTTPRouteListenerHostnameMatching",
|
|
||||||
"HTTPRouteRequestHeaderModifier",
|
|
||||||
"GatewayClassObservedGenerationBump",
|
|
||||||
"HTTPRouteInvalidNonExistentBackendRef",
|
|
||||||
"GatewayWithAttachedRoutes",
|
|
||||||
"HTTPRouteCrossNamespace",
|
|
||||||
"HTTPRouteDisallowedKind",
|
|
||||||
"HTTPRouteInvalidReferenceGrant",
|
|
||||||
"HTTPRouteObservedGenerationBump",
|
|
||||||
"TLSRouteSimpleSameNamespace",
|
|
||||||
"TLSRouteInvalidReferenceGrant",
|
|
||||||
"HTTPRouteInvalidCrossNamespaceParentRef",
|
|
||||||
"HTTPRouteInvalidParentRefNotMatchingSectionName",
|
|
||||||
"GatewayModifyListeners",
|
|
||||||
"GatewayInvalidTLSConfiguration",
|
|
||||||
"HTTPRouteInvalidCrossNamespaceBackendRef",
|
|
||||||
"HTTPRouteMatchingAcrossRoutes",
|
|
||||||
"HTTPRoutePartiallyInvalidViaInvalidReferenceGrant",
|
|
||||||
"HTTPRouteRedirectHostAndStatus",
|
|
||||||
"HTTPRouteInvalidBackendRefUnknownKind",
|
|
||||||
"HTTPRoutePathMatchOrder",
|
|
||||||
"HTTPRouteSimpleSameNamespace",
|
|
||||||
"HTTPRouteMatching",
|
|
||||||
"HTTPRouteHeaderMatching",
|
|
||||||
"HTTPRouteReferenceGrant",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
cSuite, err := ksuite.NewExperimentalConformanceTestSuite(ksuite.ExperimentalConformanceOptions{
|
|
||||||
Options: opts,
|
|
||||||
Implementation: conformanceV1alpha1.Implementation{
|
|
||||||
Organization: "traefik",
|
Organization: "traefik",
|
||||||
Project: "traefik",
|
Project: "traefik",
|
||||||
URL: "https://traefik.io/",
|
URL: "https://traefik.io/",
|
||||||
Version: version.Version,
|
Version: version.Version,
|
||||||
Contact: []string{"@traefik/maintainers"},
|
Contact: []string{"@traefik/maintainers"},
|
||||||
},
|
},
|
||||||
ConformanceProfiles: sets.New[ksuite.ConformanceProfileName](
|
ConformanceProfiles: sets.New(ksuite.GatewayHTTPConformanceProfileName),
|
||||||
ksuite.HTTPConformanceProfileName,
|
SupportedFeatures: sets.New(
|
||||||
ksuite.TLSConformanceProfileName,
|
features.SupportGateway,
|
||||||
|
features.SupportGatewayPort8080,
|
||||||
|
features.SupportHTTPRoute,
|
||||||
|
features.SupportHTTPRouteQueryParamMatching,
|
||||||
|
features.SupportHTTPRouteMethodMatching,
|
||||||
|
features.SupportHTTPRoutePortRedirect,
|
||||||
|
features.SupportHTTPRouteSchemeRedirect,
|
||||||
|
features.SupportHTTPRouteHostRewrite,
|
||||||
|
features.SupportHTTPRoutePathRewrite,
|
||||||
|
features.SupportHTTPRoutePathRedirect,
|
||||||
|
),
|
||||||
|
ExemptFeatures: sets.New(
|
||||||
|
features.SupportHTTPRouteRequestTimeout,
|
||||||
|
features.SupportHTTPRouteBackendTimeout,
|
||||||
|
features.SupportHTTPRouteResponseHeaderModification,
|
||||||
|
features.SupportHTTPRouteRequestMirror,
|
||||||
|
features.SupportHTTPRouteRequestMultipleMirrors,
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
require.NoError(s.T(), err)
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
cSuite.Setup(s.T())
|
cSuite.Setup(s.T(), tests.ConformanceTests)
|
||||||
|
|
||||||
err = cSuite.Run(s.T(), tests.ConformanceTests)
|
err = cSuite.Run(s.T(), tests.ConformanceTests)
|
||||||
require.NoError(s.T(), err)
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
report, err := cSuite.Report()
|
report, err := cSuite.Report()
|
||||||
require.NoError(s.T(), err, "failed generating conformance report")
|
require.NoError(s.T(), err, "failed generating conformance report")
|
||||||
|
|
||||||
report.GatewayAPIVersion = "1.0.0"
|
|
||||||
|
|
||||||
rawReport, err := yaml.Marshal(report)
|
rawReport, err := yaml.Marshal(report)
|
||||||
require.NoError(s.T(), err)
|
require.NoError(s.T(), err)
|
||||||
s.T().Logf("Conformance report:\n%s", string(rawReport))
|
s.T().Logf("Conformance report:\n%s", string(rawReport))
|
||||||
|
|
||||||
require.NoError(s.T(), os.MkdirAll("./conformance-reports", 0o755))
|
require.NoError(s.T(), os.MkdirAll("./conformance-reports", 0o755))
|
||||||
outFile := filepath.Join("conformance-reports", fmt.Sprintf("traefik-traefik-%d.yaml", time.Now().UnixNano()))
|
outFile := filepath.Join("conformance-reports", fmt.Sprintf("%s-%s-%s-report.yaml", report.GatewayAPIChannel, report.Version, report.Mode))
|
||||||
require.NoError(s.T(), os.WriteFile(outFile, rawReport, 0o600))
|
require.NoError(s.T(), os.WriteFile(outFile, rawReport, 0o600))
|
||||||
s.T().Logf("Report written to: %s", outFile)
|
s.T().Logf("Report written to: %s", outFile)
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
version: "3.8"
|
version: "3.8"
|
||||||
services:
|
services:
|
||||||
server:
|
server:
|
||||||
image: rancher/k3s:v1.20.15-k3s1
|
image: rancher/k3s:v1.21.14-k3s1
|
||||||
privileged: true
|
privileged: true
|
||||||
command:
|
command:
|
||||||
- server
|
- server
|
||||||
@@ -26,7 +26,7 @@ services:
|
|||||||
- ./fixtures/k8s:/var/lib/rancher/k3s/server/manifests
|
- ./fixtures/k8s:/var/lib/rancher/k3s/server/manifests
|
||||||
|
|
||||||
node:
|
node:
|
||||||
image: rancher/k3s:v1.20.15-k3s1
|
image: rancher/k3s:v1.21.14-k3s1
|
||||||
privileged: true
|
privileged: true
|
||||||
environment:
|
environment:
|
||||||
K3S_TOKEN: somethingtotallyrandom
|
K3S_TOKEN: somethingtotallyrandom
|
||||||
|
@@ -7,7 +7,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./fixtures/tracing/tempo.yaml:/etc/tempo.yaml
|
- ./fixtures/tracing/tempo.yaml:/etc/tempo.yaml
|
||||||
otel-collector:
|
otel-collector:
|
||||||
image: otel/opentelemetry-collector-contrib:0.89.0
|
image: otel/opentelemetry-collector-contrib:0.103.0
|
||||||
volumes:
|
volumes:
|
||||||
- ./fixtures/tracing/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
|
- ./fixtures/tracing/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
|
||||||
whoami:
|
whoami:
|
||||||
|
36
integration/testdata/rawdata-gateway.json
vendored
36
integration/testdata/rawdata-gateway.json
vendored
@@ -30,27 +30,27 @@
|
|||||||
"traefik"
|
"traefik"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-http-app-1-my-gateway-web-1c0cf64bde37d9d0df06@kubernetesgateway": {
|
"default-http-app-1-my-gateway-web-0-1c0cf64bde37d9d0df06@kubernetesgateway": {
|
||||||
"entryPoints": [
|
"entryPoints": [
|
||||||
"web"
|
"web"
|
||||||
],
|
],
|
||||||
"service": "default-http-app-1-my-gateway-web-1c0cf64bde37d9d0df06-wrr",
|
"service": "default-http-app-1-my-gateway-web-0-wrr",
|
||||||
"rule": "Host(`foo.com`) \u0026\u0026 Path(`/bar`)",
|
"rule": "Host(`foo.com`) \u0026\u0026 Path(`/bar`)",
|
||||||
"ruleSyntax": "v3",
|
"ruleSyntax": "v3",
|
||||||
"priority": 31,
|
"priority": 100008,
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"using": [
|
"using": [
|
||||||
"web"
|
"web"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-http-app-1-my-https-gateway-websecure-1c0cf64bde37d9d0df06@kubernetesgateway": {
|
"default-http-app-1-my-https-gateway-websecure-0-1c0cf64bde37d9d0df06@kubernetesgateway": {
|
||||||
"entryPoints": [
|
"entryPoints": [
|
||||||
"websecure"
|
"websecure"
|
||||||
],
|
],
|
||||||
"service": "default-http-app-1-my-https-gateway-websecure-1c0cf64bde37d9d0df06-wrr",
|
"service": "default-http-app-1-my-https-gateway-websecure-0-wrr",
|
||||||
"rule": "Host(`foo.com`) \u0026\u0026 Path(`/bar`)",
|
"rule": "Host(`foo.com`) \u0026\u0026 Path(`/bar`)",
|
||||||
"ruleSyntax": "v3",
|
"ruleSyntax": "v3",
|
||||||
"priority": 31,
|
"priority": 100008,
|
||||||
"tls": {},
|
"tls": {},
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"using": [
|
"using": [
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
"dashboard@internal"
|
"dashboard@internal"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-http-app-1-my-gateway-web-1c0cf64bde37d9d0df06-wrr@kubernetesgateway": {
|
"default-http-app-1-my-gateway-web-0-wrr@kubernetesgateway": {
|
||||||
"weighted": {
|
"weighted": {
|
||||||
"services": [
|
"services": [
|
||||||
{
|
{
|
||||||
@@ -107,10 +107,10 @@
|
|||||||
},
|
},
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"usedBy": [
|
"usedBy": [
|
||||||
"default-http-app-1-my-gateway-web-1c0cf64bde37d9d0df06@kubernetesgateway"
|
"default-http-app-1-my-gateway-web-0-1c0cf64bde37d9d0df06@kubernetesgateway"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-http-app-1-my-https-gateway-websecure-1c0cf64bde37d9d0df06-wrr@kubernetesgateway": {
|
"default-http-app-1-my-https-gateway-websecure-0-wrr@kubernetesgateway": {
|
||||||
"weighted": {
|
"weighted": {
|
||||||
"services": [
|
"services": [
|
||||||
{
|
{
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
},
|
},
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"usedBy": [
|
"usedBy": [
|
||||||
"default-http-app-1-my-https-gateway-websecure-1c0cf64bde37d9d0df06@kubernetesgateway"
|
"default-http-app-1-my-https-gateway-websecure-0-1c0cf64bde37d9d0df06@kubernetesgateway"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-whoami-80@kubernetesgateway": {
|
"default-whoami-80@kubernetesgateway": {
|
||||||
@@ -150,11 +150,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tcpRouters": {
|
"tcpRouters": {
|
||||||
"default-tcp-app-1-my-tcp-gateway-footcp-e3b0c44298fc1c149afb@kubernetesgateway": {
|
"default-tcp-app-1-my-tcp-gateway-footcp@kubernetesgateway": {
|
||||||
"entryPoints": [
|
"entryPoints": [
|
||||||
"footcp"
|
"footcp"
|
||||||
],
|
],
|
||||||
"service": "default-tcp-app-1-my-tcp-gateway-footcp-e3b0c44298fc1c149afb-wrr-0",
|
"service": "default-tcp-app-1-my-tcp-gateway-footcp-wrr-0",
|
||||||
"rule": "HostSNI(`*`)",
|
"rule": "HostSNI(`*`)",
|
||||||
"ruleSyntax": "v3",
|
"ruleSyntax": "v3",
|
||||||
"priority": -1,
|
"priority": -1,
|
||||||
@@ -163,11 +163,11 @@
|
|||||||
"footcp"
|
"footcp"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-tcp-app-1-my-tls-gateway-footlsterminate-e3b0c44298fc1c149afb@kubernetesgateway": {
|
"default-tcp-app-1-my-tls-gateway-footlsterminate@kubernetesgateway": {
|
||||||
"entryPoints": [
|
"entryPoints": [
|
||||||
"footlsterminate"
|
"footlsterminate"
|
||||||
],
|
],
|
||||||
"service": "default-tcp-app-1-my-tls-gateway-footlsterminate-e3b0c44298fc1c149afb-wrr-0",
|
"service": "default-tcp-app-1-my-tls-gateway-footlsterminate-wrr-0",
|
||||||
"rule": "HostSNI(`*`)",
|
"rule": "HostSNI(`*`)",
|
||||||
"ruleSyntax": "v3",
|
"ruleSyntax": "v3",
|
||||||
"priority": -1,
|
"priority": -1,
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tcpServices": {
|
"tcpServices": {
|
||||||
"default-tcp-app-1-my-tcp-gateway-footcp-e3b0c44298fc1c149afb-wrr-0@kubernetesgateway": {
|
"default-tcp-app-1-my-tcp-gateway-footcp-wrr-0@kubernetesgateway": {
|
||||||
"weighted": {
|
"weighted": {
|
||||||
"services": [
|
"services": [
|
||||||
{
|
{
|
||||||
@@ -208,10 +208,10 @@
|
|||||||
},
|
},
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"usedBy": [
|
"usedBy": [
|
||||||
"default-tcp-app-1-my-tcp-gateway-footcp-e3b0c44298fc1c149afb@kubernetesgateway"
|
"default-tcp-app-1-my-tcp-gateway-footcp@kubernetesgateway"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-tcp-app-1-my-tls-gateway-footlsterminate-e3b0c44298fc1c149afb-wrr-0@kubernetesgateway": {
|
"default-tcp-app-1-my-tls-gateway-footlsterminate-wrr-0@kubernetesgateway": {
|
||||||
"weighted": {
|
"weighted": {
|
||||||
"services": [
|
"services": [
|
||||||
{
|
{
|
||||||
@@ -222,7 +222,7 @@
|
|||||||
},
|
},
|
||||||
"status": "enabled",
|
"status": "enabled",
|
||||||
"usedBy": [
|
"usedBy": [
|
||||||
"default-tcp-app-1-my-tls-gateway-footlsterminate-e3b0c44298fc1c149afb@kubernetesgateway"
|
"default-tcp-app-1-my-tls-gateway-footlsterminate@kubernetesgateway"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"default-tls-app-1-my-tls-gateway-footlspassthrough-2279fe75c5156dc5eb26-wrr-0@kubernetesgateway": {
|
"default-tls-app-1-my-tls-gateway-footlspassthrough-2279fe75c5156dc5eb26-wrr-0@kubernetesgateway": {
|
||||||
|
@@ -2,7 +2,9 @@ package integration
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@@ -96,27 +98,46 @@ func (s *TracingSuite) TestOpentelemetryBasic_HTTP() {
|
|||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_SERVER",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/basic",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/basic", net.JoinHostPort(s.whoamiIP, "80")),
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router0@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.3.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.3.name": "Router",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.router.name\").value.stringValue": "router0@file",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.route\").value.stringValue": "Path(`/basic`)",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.4.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.5.name": "EntryPoint",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_SERVER",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"url.path\").value.stringValue": "/basic",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"url.query\").value.stringValue": "",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,27 +166,35 @@ func (s *TracingSuite) TestOpentelemetryBasic_gRPC() {
|
|||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_SERVER",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/basic",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/basic", net.JoinHostPort(s.whoamiIP, "80")),
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router0@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.3.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.3.name": "Router",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.service.name\").value.stringValue": "service0@file",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.router.name\").value.stringValue": "router0@file",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.route\").value.stringValue": "Path(`/basic`)",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.4.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,54 +244,75 @@ func (s *TracingSuite) TestOpentelemetryRateLimit() {
|
|||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "RateLimiter",
|
||||||
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_SERVER",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/ratelimit",
|
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router1@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.2.name": "Retry",
|
"batches.0.scopeSpans.0.spans.2.name": "RateLimiter",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.3.name": "RateLimiter",
|
"batches.0.scopeSpans.0.spans.3.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.request.resend_count\").value.intValue": "1",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.4.name": "Service",
|
"batches.0.scopeSpans.0.spans.4.name": "RateLimiter",
|
||||||
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.5.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.5.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.request.resend_count\").value.intValue": "2",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
|
||||||
|
"batches.0.scopeSpans.0.spans.6.name": "Router",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.router.name\").value.stringValue": "router1@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"http.route\").value.stringValue": "Path(`/ratelimit`)",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.7.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.8.name": "EntryPoint",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.kind": "SPAN_KIND_SERVER",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"url.path\").value.stringValue": "/ratelimit",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"url.query\").value.stringValue": "",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.response.status_code\").value.intValue": "429",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_SERVER",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/ratelimit",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/ratelimit", net.JoinHostPort(s.whoamiIP, "80")),
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "429",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router1@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.2.name": "Retry",
|
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.3.name": "RateLimiter",
|
"batches.0.scopeSpans.0.spans.3.name": "RateLimiter",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
@@ -271,20 +321,27 @@ func (s *TracingSuite) TestOpentelemetryRateLimit() {
|
|||||||
"batches.0.scopeSpans.0.spans.4.name": "Retry",
|
"batches.0.scopeSpans.0.spans.4.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"http.resend_count\").value.intValue": "1",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.5.name": "RateLimiter",
|
"batches.0.scopeSpans.0.spans.5.name": "Router",
|
||||||
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.service.name\").value.stringValue": "service1@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.router.name\").value.stringValue": "router1@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.route\").value.stringValue": "Path(`/ratelimit`)",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.6.name": "Retry",
|
"batches.0.scopeSpans.0.spans.6.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"http.resend_count\").value.intValue": "2",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.7.name": "RateLimiter",
|
"batches.0.scopeSpans.0.spans.7.name": "EntryPoint",
|
||||||
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_SERVER",
|
||||||
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "ratelimit-1@file",
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"url.path\").value.stringValue": "/ratelimit",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"url.query\").value.stringValue": "",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,60 +369,102 @@ func (s *TracingSuite) TestOpentelemetryRetry() {
|
|||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/retry",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
"batches.0.scopeSpans.0.spans.0.status.code": "STATUS_CODE_ERROR",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/retry", net.JoinHostPort(s.whoamiIP, "81")),
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router2@file",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.2.name": "Retry",
|
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.3.name": "Service",
|
"batches.0.scopeSpans.0.spans.3.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.4.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.4.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/retry", net.JoinHostPort(s.whoamiIP, "81")),
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"network.peer.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"server.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.5.name": "Retry",
|
"batches.0.scopeSpans.0.spans.5.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.resend_count\").value.intValue": "1",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.6.name": "Service",
|
"batches.0.scopeSpans.0.spans.6.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.7.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.7.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.request.resend_count\").value.intValue": "1",
|
||||||
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.8.name": "Retry",
|
"batches.0.scopeSpans.0.spans.8.name": "ReverseProxy",
|
||||||
"batches.0.scopeSpans.0.spans.8.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.8.kind": "SPAN_KIND_CLIENT",
|
||||||
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.resend_count\").value.intValue": "2",
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"network.protocol.version\").value.stringValue": "1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://%s/retry", net.JoinHostPort(s.whoamiIP, "81")),
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"network.peer.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"server.port\").value.intValue": "81",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.9.name": "Service",
|
"batches.0.scopeSpans.0.spans.9.name": "Metrics",
|
||||||
"batches.0.scopeSpans.0.spans.9.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.9.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.9.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
"batches.0.scopeSpans.0.spans.9.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.10.name": "ReverseProxy",
|
"batches.0.scopeSpans.0.spans.10.name": "Service",
|
||||||
"batches.0.scopeSpans.0.spans.10.kind": "SPAN_KIND_CLIENT",
|
"batches.0.scopeSpans.0.spans.10.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.10.attributes.#(key=\"url.scheme\").value.stringValue": "http",
|
"batches.0.scopeSpans.0.spans.10.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
||||||
"batches.0.scopeSpans.0.spans.10.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
|
||||||
"batches.0.scopeSpans.0.spans.10.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
"batches.0.scopeSpans.0.spans.11.name": "Retry",
|
||||||
|
"batches.0.scopeSpans.0.spans.11.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.11.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.11.attributes.#(key=\"http.request.resend_count\").value.intValue": "2",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.12.name": "Router",
|
||||||
|
"batches.0.scopeSpans.0.spans.12.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.12.attributes.#(key=\"traefik.service.name\").value.stringValue": "service2@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.12.attributes.#(key=\"traefik.router.name\").value.stringValue": "router2@file",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.13.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.13.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.13.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.14.name": "EntryPoint",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.kind": "SPAN_KIND_SERVER",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"url.path\").value.stringValue": "/retry",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"url.query\").value.stringValue": "",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.14.attributes.#(key=\"http.response.status_code\").value.intValue": "502",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,21 +492,131 @@ func (s *TracingSuite) TestOpentelemetryAuth() {
|
|||||||
{
|
{
|
||||||
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.0.name": "EntryPoint",
|
"batches.0.scopeSpans.0.spans.0.name": "BasicAuth",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
"batches.0.scopeSpans.0.spans.0.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.path\").value.stringValue": "/auth",
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "basic-auth@file",
|
||||||
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "401",
|
"batches.0.scopeSpans.0.spans.0.status.message": "Authentication failed",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
"batches.0.scopeSpans.0.spans.1.name": "Router",
|
"batches.0.scopeSpans.0.spans.1.name": "Retry",
|
||||||
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.router.name\").value.stringValue": "router3@file",
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.service.name\").value.stringValue": "service3@file",
|
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.2.name": "BasicAuth",
|
||||||
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "basic-auth@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.2.status.message": "Authentication failed",
|
||||||
|
"batches.0.scopeSpans.0.spans.2.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.3.name": "Retry",
|
||||||
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"http.request.resend_count\").value.intValue": "1",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.4.name": "BasicAuth",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "basic-auth@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.status.message": "Authentication failed",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.status.code": "STATUS_CODE_ERROR",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.5.name": "Retry",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.request.resend_count\").value.intValue": "2",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.6.name": "Router",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.service.name\").value.stringValue": "service3@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.router.name\").value.stringValue": "router3@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"http.route\").value.stringValue": "Path(`/auth`)",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.7.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.8.name": "EntryPoint",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.kind": "SPAN_KIND_SERVER",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"url.path\").value.stringValue": "/auth",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"url.query\").value.stringValue": "",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.8.attributes.#(key=\"http.response.status_code\").value.intValue": "401",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
s.checkTraceContent(contains)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *TracingSuite) TestOpentelemetrySafeURL() {
|
||||||
|
file := s.adaptFile("fixtures/tracing/simple-opentelemetry.toml", TracingTemplate{
|
||||||
|
WhoamiIP: s.whoamiIP,
|
||||||
|
WhoamiPort: s.whoamiPort,
|
||||||
|
IP: s.otelCollectorIP,
|
||||||
|
})
|
||||||
|
defer os.Remove(file)
|
||||||
|
|
||||||
|
s.traefikCmd(withConfigFile(file))
|
||||||
|
|
||||||
|
// wait for traefik
|
||||||
|
err := try.GetRequest("http://127.0.0.1:8080/api/rawdata", time.Second, try.BodyContains("basic-auth"))
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
|
err = try.GetRequest("http://test:test@127.0.0.1:8000/auth?api_key=powpow", 500*time.Millisecond, try.StatusCodeIs(http.StatusOK))
|
||||||
|
require.NoError(s.T(), err)
|
||||||
|
|
||||||
|
contains := []map[string]string{
|
||||||
|
{
|
||||||
|
"batches.0.scopeSpans.0.scope.name": "github.com/traefik/traefik",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.0.name": "ReverseProxy",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"url.full\").value.stringValue": fmt.Sprintf("http://REDACTED:REDACTED@%s/auth?api_key=REDACTED", net.JoinHostPort(s.whoamiIP, "80")),
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"network.peer.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.address\").value.stringValue": s.whoamiIP,
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"server.port\").value.intValue": "80",
|
||||||
|
"batches.0.scopeSpans.0.spans.0.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.1.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.1.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.1.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-service",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.2.name": "Service",
|
||||||
|
"batches.0.scopeSpans.0.spans.2.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.2.attributes.#(key=\"traefik.service.name\").value.stringValue": "service3@file",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.3.name": "BasicAuth",
|
||||||
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
"batches.0.scopeSpans.0.spans.3.kind": "SPAN_KIND_INTERNAL",
|
||||||
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "basic-auth@file",
|
"batches.0.scopeSpans.0.spans.3.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "basic-auth@file",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.4.name": "Retry",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.4.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "retry@file",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.5.name": "Router",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.service.name\").value.stringValue": "service3@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"traefik.router.name\").value.stringValue": "router3@file",
|
||||||
|
"batches.0.scopeSpans.0.spans.5.attributes.#(key=\"http.route\").value.stringValue": "Path(`/auth`)",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.6.name": "Metrics",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.kind": "SPAN_KIND_INTERNAL",
|
||||||
|
"batches.0.scopeSpans.0.spans.6.attributes.#(key=\"traefik.middleware.name\").value.stringValue": "metrics-entrypoint",
|
||||||
|
|
||||||
|
"batches.0.scopeSpans.0.spans.7.name": "EntryPoint",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.kind": "SPAN_KIND_SERVER",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"entry_point\").value.stringValue": "web",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.request.method\").value.stringValue": "GET",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"url.path\").value.stringValue": "/auth",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"url.query\").value.stringValue": "api_key=REDACTED",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"user_agent.original\").value.stringValue": "Go-http-client/1.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"server.address\").value.stringValue": "127.0.0.1:8000",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"network.peer.address\").value.stringValue": "127.0.0.1",
|
||||||
|
"batches.0.scopeSpans.0.spans.7.attributes.#(key=\"http.response.status_code\").value.intValue": "200",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,12 +726,22 @@ func (s *TracingSuite) checkTraceContent(expectedJSON []map[string]string) {
|
|||||||
contents = append(contents, string(content))
|
contents = append(contents, string(content))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var missingElements []string
|
||||||
for _, expected := range expectedJSON {
|
for _, expected := range expectedJSON {
|
||||||
containsAll(expected, contents)
|
missingElements = append(missingElements, contains(expected, contents)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("Contents: [%s]\n", strings.Join(contents, ","))
|
||||||
|
for _, element := range missingElements {
|
||||||
|
log.Printf("Missing elements:\n%s\n", element)
|
||||||
|
}
|
||||||
|
|
||||||
|
require.Empty(s.T(), missingElements)
|
||||||
}
|
}
|
||||||
|
|
||||||
func containsAll(expectedJSON map[string]string, contents []string) {
|
func contains(expectedJSON map[string]string, contents []string) []string {
|
||||||
|
var missingElements []string
|
||||||
|
|
||||||
for k, v := range expectedJSON {
|
for k, v := range expectedJSON {
|
||||||
found := false
|
found := false
|
||||||
for _, content := range contents {
|
for _, content := range contents {
|
||||||
@@ -531,12 +750,12 @@ func containsAll(expectedJSON map[string]string, contents []string) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
log.Info().Msgf("[" + strings.Join(contents, ",") + "]")
|
missingElements = append(missingElements, "Key: "+k+", Value: "+v)
|
||||||
log.Error().Msgf("missing element: \nKey: %q\nValue: %q ", k, v)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return missingElements
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraceResponse contains a list of traces.
|
// TraceResponse contains a list of traces.
|
||||||
|
@@ -194,7 +194,7 @@ func (c *configuration) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if c.Pilot != nil {
|
if c.Pilot != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Pilot configuration has been removed in v3, please remove all Pilot-related static configuration for Traefik to start." +
|
logger.Error().Msg("Pilot configuration has been removed in v3, please remove all Pilot-related static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#pilot")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#pilot")
|
||||||
}
|
}
|
||||||
|
|
||||||
incompatibleExperimental := c.Experimental.deprecationNotice(logger)
|
incompatibleExperimental := c.Experimental.deprecationNotice(logger)
|
||||||
@@ -226,13 +226,13 @@ func (p *providers) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if p.Marathon != nil {
|
if p.Marathon != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Marathon provider has been removed in v3, please remove all Marathon-related static configuration for Traefik to start." +
|
logger.Error().Msg("Marathon provider has been removed in v3, please remove all Marathon-related static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#marathon-provider")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#marathon-provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Rancher != nil {
|
if p.Rancher != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Rancher provider has been removed in v3, please remove all Rancher-related static configuration for Traefik to start." +
|
logger.Error().Msg("Rancher provider has been removed in v3, please remove all Rancher-related static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#rancher-v1-provider")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#rancher-v1-provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
dockerIncompatible := p.Docker.deprecationNotice(logger)
|
dockerIncompatible := p.Docker.deprecationNotice(logger)
|
||||||
@@ -273,14 +273,14 @@ func (d *docker) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if d.SwarmMode != nil {
|
if d.SwarmMode != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Docker provider `swarmMode` option has been removed in v3, please use the Swarm Provider instead." +
|
logger.Error().Msg("Docker provider `swarmMode` option has been removed in v3, please use the Swarm Provider instead." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#docker-docker-swarm")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#docker-docker-swarm")
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.TLS != nil && d.TLS.CAOptional != nil {
|
if d.TLS != nil && d.TLS.CAOptional != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Docker provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("Docker provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tlscaoptional")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tlscaoptional")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -321,7 +321,7 @@ func (e *etcd) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("ETCD provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("ETCD provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tlscaoptional_3")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tlscaoptional_3")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -342,7 +342,7 @@ func (r *redis) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Redis provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("Redis provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tlscaoptional_4")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tlscaoptional_4")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -363,14 +363,14 @@ func (c *consul) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if c.Namespace != nil {
|
if c.Namespace != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Consul provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
logger.Error().Msg("Consul provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#consul-provider")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#consul-provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.TLS != nil && c.TLS.CAOptional != nil {
|
if c.TLS != nil && c.TLS.CAOptional != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Consul provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("Consul provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tlscaoptional_1")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tlscaoptional_1")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -395,14 +395,14 @@ func (c *consulCatalog) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if c.Namespace != nil {
|
if c.Namespace != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("ConsulCatalog provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
logger.Error().Msg("ConsulCatalog provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#consulcatalog-provider")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#consulcatalog-provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Endpoint != nil && c.Endpoint.TLS != nil && c.Endpoint.TLS.CAOptional != nil {
|
if c.Endpoint != nil && c.Endpoint.TLS != nil && c.Endpoint.TLS.CAOptional != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("ConsulCatalog provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("ConsulCatalog provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#endpointtlscaoptional")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#endpointtlscaoptional")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -423,14 +423,14 @@ func (n *nomad) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if n.Namespace != nil {
|
if n.Namespace != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Nomad provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
logger.Error().Msg("Nomad provider `namespace` option has been removed, please use the `namespaces` option instead." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#nomad-provider")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#nomad-provider")
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.Endpoint != nil && n.Endpoint.TLS != nil && n.Endpoint.TLS.CAOptional != nil {
|
if n.Endpoint != nil && n.Endpoint.TLS != nil && n.Endpoint.TLS.CAOptional != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Nomad provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("Nomad provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#endpointtlscaoptional_1")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#endpointtlscaoptional_1")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
@@ -451,14 +451,15 @@ func (h *http) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("HTTP provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
logger.Error().Msg("HTTP provider `tls.CAOptional` option has been removed in v3, as TLS client authentication is a server side option (see https://github.com/golang/go/blob/740a490f71d026bb7d2d13cb8fa2d6d6e0572b70/src/crypto/tls/common.go#L634)." +
|
||||||
"Please remove all occurrences from the static configuration for Traefik to start." +
|
"Please remove all occurrences from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tlscaoptional_2")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tlscaoptional_2")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
}
|
}
|
||||||
|
|
||||||
type experimental struct {
|
type experimental struct {
|
||||||
HTTP3 *bool `json:"http3,omitempty" toml:"http3,omitempty" yaml:"http3,omitempty"`
|
HTTP3 *bool `json:"http3,omitempty" toml:"http3,omitempty" yaml:"http3,omitempty"`
|
||||||
|
KubernetesGateway *bool `json:"kubernetesGateway,omitempty" toml:"kubernetesGateway,omitempty" yaml:"kubernetesGateway,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *experimental) deprecationNotice(logger zerolog.Logger) bool {
|
func (e *experimental) deprecationNotice(logger zerolog.Logger) bool {
|
||||||
@@ -469,11 +470,17 @@ func (e *experimental) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if e.HTTP3 != nil {
|
if e.HTTP3 != nil {
|
||||||
logger.Error().Msg("HTTP3 is not an experimental feature in v3 and the associated enablement has been removed." +
|
logger.Error().Msg("HTTP3 is not an experimental feature in v3 and the associated enablement has been removed." +
|
||||||
"Please remove its usage from the static configuration for Traefik to start." +
|
"Please remove its usage from the static configuration for Traefik to start." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#http3-experimental-configuration")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3-details/#http3")
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if e.KubernetesGateway != nil {
|
||||||
|
logger.Error().Msg("KubernetesGateway provider is not an experimental feature starting with v3.1." +
|
||||||
|
"Please remove its usage from the static configuration." +
|
||||||
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v3/#gateway-api-kubernetesgateway-provider")
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,49 +502,49 @@ func (t *tracing) deprecationNotice(logger zerolog.Logger) bool {
|
|||||||
if t.SpanNameLimit != nil {
|
if t.SpanNameLimit != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("SpanNameLimit option for Tracing has been removed in v3, as Span names are now of a fixed length." +
|
logger.Error().Msg("SpanNameLimit option for Tracing has been removed in v3, as Span names are now of a fixed length." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Jaeger != nil {
|
if t.Jaeger != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Jaeger Tracing backend has been removed in v3, please remove all Jaeger-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Jaeger Tracing backend has been removed in v3, please remove all Jaeger-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Zipkin != nil {
|
if t.Zipkin != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Zipkin Tracing backend has been removed in v3, please remove all Zipkin-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Zipkin Tracing backend has been removed in v3, please remove all Zipkin-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Datadog != nil {
|
if t.Datadog != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Datadog Tracing backend has been removed in v3, please remove all Datadog-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Datadog Tracing backend has been removed in v3, please remove all Datadog-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Instana != nil {
|
if t.Instana != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Instana Tracing backend has been removed in v3, please remove all Instana-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Instana Tracing backend has been removed in v3, please remove all Instana-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Haystack != nil {
|
if t.Haystack != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Haystack Tracing backend has been removed in v3, please remove all Haystack-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Haystack Tracing backend has been removed in v3, please remove all Haystack-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.Elastic != nil {
|
if t.Elastic != nil {
|
||||||
incompatible = true
|
incompatible = true
|
||||||
logger.Error().Msg("Elastic Tracing backend has been removed in v3, please remove all Elastic-related Tracing static configuration for Traefik to start." +
|
logger.Error().Msg("Elastic Tracing backend has been removed in v3, please remove all Elastic-related Tracing static configuration for Traefik to start." +
|
||||||
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
"In v3, Open Telemetry replaces specific tracing backend implementations, and an collector/exporter can be used to export metrics in a vendor specific format." +
|
||||||
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/#tracing")
|
"For more information please read the migration guide: https://doc.traefik.io/traefik/v3.1/migration/v2-to-v3/#tracing")
|
||||||
}
|
}
|
||||||
|
|
||||||
return incompatible
|
return incompatible
|
||||||
|
@@ -17,8 +17,9 @@ func ptr[T any](t T) *T {
|
|||||||
|
|
||||||
func TestDeprecationNotice(t *testing.T) {
|
func TestDeprecationNotice(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
desc string
|
desc string
|
||||||
config configuration
|
config configuration
|
||||||
|
wantCompatible bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
desc: "Docker provider swarmMode option is incompatible",
|
desc: "Docker provider swarmMode option is incompatible",
|
||||||
@@ -196,6 +197,15 @@ func TestDeprecationNotice(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "Experimental KubernetesGateway enablement configuration is compatible",
|
||||||
|
config: configuration{
|
||||||
|
Experimental: &experimental{
|
||||||
|
KubernetesGateway: ptr(true),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantCompatible: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "Tracing SpanNameLimit option is incompatible",
|
desc: "Tracing SpanNameLimit option is incompatible",
|
||||||
config: configuration{
|
config: configuration{
|
||||||
@@ -278,7 +288,8 @@ func TestDeprecationNotice(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
logger := log.With().Logger().Hook(testHook)
|
logger := log.With().Logger().Hook(testHook)
|
||||||
assert.True(t, test.config.deprecationNotice(logger))
|
|
||||||
|
assert.Equal(t, !test.wantCompatible, test.config.deprecationNotice(logger))
|
||||||
assert.True(t, gotLog)
|
assert.True(t, gotLog)
|
||||||
assert.Equal(t, zerolog.ErrorLevel, gotLevel)
|
assert.Equal(t, zerolog.ErrorLevel, gotLevel)
|
||||||
})
|
})
|
||||||
|
@@ -330,6 +330,7 @@
|
|||||||
browserXssFilter = true
|
browserXssFilter = true
|
||||||
customBrowserXSSValue = "foobar"
|
customBrowserXSSValue = "foobar"
|
||||||
contentSecurityPolicy = "foobar"
|
contentSecurityPolicy = "foobar"
|
||||||
|
contentSecurityPolicyReportOnly = "foobar"
|
||||||
publicKey = "foobar"
|
publicKey = "foobar"
|
||||||
referrerPolicy = "foobar"
|
referrerPolicy = "foobar"
|
||||||
isDevelopment = true
|
isDevelopment = true
|
||||||
|
@@ -128,6 +128,10 @@ type WeightedRoundRobin struct {
|
|||||||
type WRRService struct {
|
type WRRService struct {
|
||||||
Name string `json:"name,omitempty" toml:"name,omitempty" yaml:"name,omitempty" export:"true"`
|
Name string `json:"name,omitempty" toml:"name,omitempty" yaml:"name,omitempty" export:"true"`
|
||||||
Weight *int `json:"weight,omitempty" toml:"weight,omitempty" yaml:"weight,omitempty" export:"true"`
|
Weight *int `json:"weight,omitempty" toml:"weight,omitempty" yaml:"weight,omitempty" export:"true"`
|
||||||
|
|
||||||
|
// Status defines an HTTP status code that should be returned when calling the service.
|
||||||
|
// This is required by the Gateway API implementation which expects specific HTTP status to be returned.
|
||||||
|
Status *int `json:"-" toml:"-" yaml:"-" label:"-" file:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDefaults Default values for a WRRService.
|
// SetDefaults Default values for a WRRService.
|
||||||
@@ -250,7 +254,7 @@ type ServerHealthCheck struct {
|
|||||||
Interval ptypes.Duration `json:"interval,omitempty" toml:"interval,omitempty" yaml:"interval,omitempty" export:"true"`
|
Interval ptypes.Duration `json:"interval,omitempty" toml:"interval,omitempty" yaml:"interval,omitempty" export:"true"`
|
||||||
Timeout ptypes.Duration `json:"timeout,omitempty" toml:"timeout,omitempty" yaml:"timeout,omitempty" export:"true"`
|
Timeout ptypes.Duration `json:"timeout,omitempty" toml:"timeout,omitempty" yaml:"timeout,omitempty" export:"true"`
|
||||||
Hostname string `json:"hostname,omitempty" toml:"hostname,omitempty" yaml:"hostname,omitempty"`
|
Hostname string `json:"hostname,omitempty" toml:"hostname,omitempty" yaml:"hostname,omitempty"`
|
||||||
FollowRedirects *bool `json:"followRedirects" toml:"followRedirects" yaml:"followRedirects" export:"true"`
|
FollowRedirects *bool `json:"followRedirects,omitempty" toml:"followRedirects,omitempty" yaml:"followRedirects,omitempty" export:"true"`
|
||||||
Headers map[string]string `json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" export:"true"`
|
Headers map[string]string `json:"headers,omitempty" toml:"headers,omitempty" yaml:"headers,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -42,6 +42,8 @@ type Middleware struct {
|
|||||||
|
|
||||||
// Gateway API HTTPRoute filters middlewares.
|
// Gateway API HTTPRoute filters middlewares.
|
||||||
RequestHeaderModifier *RequestHeaderModifier `json:"requestHeaderModifier,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-" export:"true"`
|
RequestHeaderModifier *RequestHeaderModifier `json:"requestHeaderModifier,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-" export:"true"`
|
||||||
|
RequestRedirect *RequestRedirect `json:"requestRedirect,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-" export:"true"`
|
||||||
|
URLRewrite *URLRewrite `json:"URLRewrite,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
@@ -69,7 +71,7 @@ type ContentType struct {
|
|||||||
|
|
||||||
// AddPrefix holds the add prefix middleware configuration.
|
// AddPrefix holds the add prefix middleware configuration.
|
||||||
// This middleware updates the path of a request before forwarding it.
|
// This middleware updates the path of a request before forwarding it.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/addprefix/
|
||||||
type AddPrefix struct {
|
type AddPrefix struct {
|
||||||
// Prefix is the string to add before the current path in the requested URL.
|
// Prefix is the string to add before the current path in the requested URL.
|
||||||
// It should include a leading slash (/).
|
// It should include a leading slash (/).
|
||||||
@@ -80,7 +82,7 @@ type AddPrefix struct {
|
|||||||
|
|
||||||
// BasicAuth holds the basic auth middleware configuration.
|
// BasicAuth holds the basic auth middleware configuration.
|
||||||
// This middleware restricts access to your services to known users.
|
// This middleware restricts access to your services to known users.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/
|
||||||
type BasicAuth struct {
|
type BasicAuth struct {
|
||||||
// Users is an array of authorized users.
|
// Users is an array of authorized users.
|
||||||
// Each user must be declared using the name:hashed-password format.
|
// Each user must be declared using the name:hashed-password format.
|
||||||
@@ -95,7 +97,7 @@ type BasicAuth struct {
|
|||||||
// Default: false.
|
// Default: false.
|
||||||
RemoveHeader bool `json:"removeHeader,omitempty" toml:"removeHeader,omitempty" yaml:"removeHeader,omitempty" export:"true"`
|
RemoveHeader bool `json:"removeHeader,omitempty" toml:"removeHeader,omitempty" yaml:"removeHeader,omitempty" export:"true"`
|
||||||
// HeaderField defines a header field to store the authenticated user.
|
// HeaderField defines a header field to store the authenticated user.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
HeaderField string `json:"headerField,omitempty" toml:"headerField,omitempty" yaml:"headerField,omitempty" export:"true"`
|
HeaderField string `json:"headerField,omitempty" toml:"headerField,omitempty" yaml:"headerField,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +105,7 @@ type BasicAuth struct {
|
|||||||
|
|
||||||
// Buffering holds the buffering middleware configuration.
|
// Buffering holds the buffering middleware configuration.
|
||||||
// This middleware retries or limits the size of requests that can be forwarded to backends.
|
// This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
type Buffering struct {
|
type Buffering struct {
|
||||||
// MaxRequestBodyBytes defines the maximum allowed body size for the request (in bytes).
|
// MaxRequestBodyBytes defines the maximum allowed body size for the request (in bytes).
|
||||||
// If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a 413 (Request Entity Too Large) response.
|
// If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a 413 (Request Entity Too Large) response.
|
||||||
@@ -121,7 +123,7 @@ type Buffering struct {
|
|||||||
MemResponseBodyBytes int64 `json:"memResponseBodyBytes,omitempty" toml:"memResponseBodyBytes,omitempty" yaml:"memResponseBodyBytes,omitempty" export:"true"`
|
MemResponseBodyBytes int64 `json:"memResponseBodyBytes,omitempty" toml:"memResponseBodyBytes,omitempty" yaml:"memResponseBodyBytes,omitempty" export:"true"`
|
||||||
// RetryExpression defines the retry conditions.
|
// RetryExpression defines the retry conditions.
|
||||||
// It is a logical combination of functions with operators AND (&&) and OR (||).
|
// It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/buffering/#retryexpression
|
||||||
RetryExpression string `json:"retryExpression,omitempty" toml:"retryExpression,omitempty" yaml:"retryExpression,omitempty" export:"true"`
|
RetryExpression string `json:"retryExpression,omitempty" toml:"retryExpression,omitempty" yaml:"retryExpression,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +140,7 @@ type Chain struct {
|
|||||||
|
|
||||||
// CircuitBreaker holds the circuit breaker middleware configuration.
|
// CircuitBreaker holds the circuit breaker middleware configuration.
|
||||||
// This middleware protects the system from stacking requests to unhealthy services, resulting in cascading failures.
|
// This middleware protects the system from stacking requests to unhealthy services, resulting in cascading failures.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/circuitbreaker/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/circuitbreaker/
|
||||||
type CircuitBreaker struct {
|
type CircuitBreaker struct {
|
||||||
// Expression defines the expression that, once matched, opens the circuit breaker and applies the fallback mechanism instead of calling the services.
|
// Expression defines the expression that, once matched, opens the circuit breaker and applies the fallback mechanism instead of calling the services.
|
||||||
Expression string `json:"expression,omitempty" toml:"expression,omitempty" yaml:"expression,omitempty" export:"true"`
|
Expression string `json:"expression,omitempty" toml:"expression,omitempty" yaml:"expression,omitempty" export:"true"`
|
||||||
@@ -164,7 +166,7 @@ func (c *CircuitBreaker) SetDefaults() {
|
|||||||
|
|
||||||
// Compress holds the compress middleware configuration.
|
// Compress holds the compress middleware configuration.
|
||||||
// This middleware compresses responses before sending them to the client, using gzip compression.
|
// This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/compress/
|
||||||
type Compress struct {
|
type Compress struct {
|
||||||
// ExcludedContentTypes defines the list of content types to compare the Content-Type header of the incoming requests and responses before compressing.
|
// ExcludedContentTypes defines the list of content types to compare the Content-Type header of the incoming requests and responses before compressing.
|
||||||
// `application/grpc` is always excluded.
|
// `application/grpc` is always excluded.
|
||||||
@@ -182,7 +184,7 @@ type Compress struct {
|
|||||||
|
|
||||||
// DigestAuth holds the digest auth middleware configuration.
|
// DigestAuth holds the digest auth middleware configuration.
|
||||||
// This middleware restricts access to your services to known users.
|
// This middleware restricts access to your services to known users.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/digestauth/
|
||||||
type DigestAuth struct {
|
type DigestAuth struct {
|
||||||
// Users defines the authorized users.
|
// Users defines the authorized users.
|
||||||
// Each user should be declared using the name:realm:encoded-password format.
|
// Each user should be declared using the name:realm:encoded-password format.
|
||||||
@@ -195,7 +197,7 @@ type DigestAuth struct {
|
|||||||
// Default: traefik.
|
// Default: traefik.
|
||||||
Realm string `json:"realm,omitempty" toml:"realm,omitempty" yaml:"realm,omitempty"`
|
Realm string `json:"realm,omitempty" toml:"realm,omitempty" yaml:"realm,omitempty"`
|
||||||
// HeaderField defines a header field to store the authenticated user.
|
// HeaderField defines a header field to store the authenticated user.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/basicauth/#headerfield
|
||||||
HeaderField string `json:"headerField,omitempty" toml:"headerField,omitempty" yaml:"headerField,omitempty" export:"true"`
|
HeaderField string `json:"headerField,omitempty" toml:"headerField,omitempty" yaml:"headerField,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +223,7 @@ type ErrorPage struct {
|
|||||||
|
|
||||||
// ForwardAuth holds the forward auth middleware configuration.
|
// ForwardAuth holds the forward auth middleware configuration.
|
||||||
// This middleware delegates the request authentication to a Service.
|
// This middleware delegates the request authentication to a Service.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/
|
||||||
type ForwardAuth struct {
|
type ForwardAuth struct {
|
||||||
// Address defines the authentication server address.
|
// Address defines the authentication server address.
|
||||||
Address string `json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty"`
|
Address string `json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty"`
|
||||||
@@ -232,7 +234,7 @@ type ForwardAuth struct {
|
|||||||
// AuthResponseHeaders defines the list of headers to copy from the authentication server response and set on forwarded request, replacing any existing conflicting headers.
|
// AuthResponseHeaders defines the list of headers to copy from the authentication server response and set on forwarded request, replacing any existing conflicting headers.
|
||||||
AuthResponseHeaders []string `json:"authResponseHeaders,omitempty" toml:"authResponseHeaders,omitempty" yaml:"authResponseHeaders,omitempty" export:"true"`
|
AuthResponseHeaders []string `json:"authResponseHeaders,omitempty" toml:"authResponseHeaders,omitempty" yaml:"authResponseHeaders,omitempty" export:"true"`
|
||||||
// AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
// AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
AuthResponseHeadersRegex string `json:"authResponseHeadersRegex,omitempty" toml:"authResponseHeadersRegex,omitempty" yaml:"authResponseHeadersRegex,omitempty" export:"true"`
|
AuthResponseHeadersRegex string `json:"authResponseHeadersRegex,omitempty" toml:"authResponseHeadersRegex,omitempty" yaml:"authResponseHeadersRegex,omitempty" export:"true"`
|
||||||
// AuthRequestHeaders defines the list of the headers to copy from the request to the authentication server.
|
// AuthRequestHeaders defines the list of the headers to copy from the request to the authentication server.
|
||||||
// If not set or empty then all request headers are passed.
|
// If not set or empty then all request headers are passed.
|
||||||
@@ -259,7 +261,7 @@ type ClientTLS struct {
|
|||||||
|
|
||||||
// Headers holds the headers middleware configuration.
|
// Headers holds the headers middleware configuration.
|
||||||
// This middleware manages the requests and responses headers.
|
// This middleware manages the requests and responses headers.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/headers/#customrequestheaders
|
||||||
type Headers struct {
|
type Headers struct {
|
||||||
// CustomRequestHeaders defines the header names and values to apply to the request.
|
// CustomRequestHeaders defines the header names and values to apply to the request.
|
||||||
CustomRequestHeaders map[string]string `json:"customRequestHeaders,omitempty" toml:"customRequestHeaders,omitempty" yaml:"customRequestHeaders,omitempty" export:"true"`
|
CustomRequestHeaders map[string]string `json:"customRequestHeaders,omitempty" toml:"customRequestHeaders,omitempty" yaml:"customRequestHeaders,omitempty" export:"true"`
|
||||||
@@ -312,6 +314,8 @@ type Headers struct {
|
|||||||
CustomBrowserXSSValue string `json:"customBrowserXSSValue,omitempty" toml:"customBrowserXSSValue,omitempty" yaml:"customBrowserXSSValue,omitempty"`
|
CustomBrowserXSSValue string `json:"customBrowserXSSValue,omitempty" toml:"customBrowserXSSValue,omitempty" yaml:"customBrowserXSSValue,omitempty"`
|
||||||
// ContentSecurityPolicy defines the Content-Security-Policy header value.
|
// ContentSecurityPolicy defines the Content-Security-Policy header value.
|
||||||
ContentSecurityPolicy string `json:"contentSecurityPolicy,omitempty" toml:"contentSecurityPolicy,omitempty" yaml:"contentSecurityPolicy,omitempty"`
|
ContentSecurityPolicy string `json:"contentSecurityPolicy,omitempty" toml:"contentSecurityPolicy,omitempty" yaml:"contentSecurityPolicy,omitempty"`
|
||||||
|
// ContentSecurityPolicyReportOnly defines the Content-Security-Policy-Report-Only header value.
|
||||||
|
ContentSecurityPolicyReportOnly string `json:"contentSecurityPolicyReportOnly,omitempty" toml:"contentSecurityPolicyReportOnly,omitempty" yaml:"contentSecurityPolicyReportOnly,omitempty"`
|
||||||
// PublicKey is the public key that implements HPKP to prevent MITM attacks with forged certificates.
|
// PublicKey is the public key that implements HPKP to prevent MITM attacks with forged certificates.
|
||||||
PublicKey string `json:"publicKey,omitempty" toml:"publicKey,omitempty" yaml:"publicKey,omitempty"`
|
PublicKey string `json:"publicKey,omitempty" toml:"publicKey,omitempty" yaml:"publicKey,omitempty"`
|
||||||
// ReferrerPolicy defines the Referrer-Policy header value.
|
// ReferrerPolicy defines the Referrer-Policy header value.
|
||||||
@@ -375,6 +379,7 @@ func (h *Headers) HasSecureHeadersDefined() bool {
|
|||||||
h.BrowserXSSFilter ||
|
h.BrowserXSSFilter ||
|
||||||
h.CustomBrowserXSSValue != "" ||
|
h.CustomBrowserXSSValue != "" ||
|
||||||
h.ContentSecurityPolicy != "" ||
|
h.ContentSecurityPolicy != "" ||
|
||||||
|
h.ContentSecurityPolicyReportOnly != "" ||
|
||||||
h.PublicKey != "" ||
|
h.PublicKey != "" ||
|
||||||
h.ReferrerPolicy != "" ||
|
h.ReferrerPolicy != "" ||
|
||||||
(h.FeaturePolicy != nil && *h.FeaturePolicy != "") ||
|
(h.FeaturePolicy != nil && *h.FeaturePolicy != "") ||
|
||||||
@@ -385,7 +390,7 @@ func (h *Headers) HasSecureHeadersDefined() bool {
|
|||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
|
|
||||||
// IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
// IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/#ipstrategy
|
||||||
type IPStrategy struct {
|
type IPStrategy struct {
|
||||||
// Depth tells Traefik to use the X-Forwarded-For header and take the IP located at the depth position (starting from the right).
|
// Depth tells Traefik to use the X-Forwarded-For header and take the IP located at the depth position (starting from the right).
|
||||||
Depth int `json:"depth,omitempty" toml:"depth,omitempty" yaml:"depth,omitempty" export:"true"`
|
Depth int `json:"depth,omitempty" toml:"depth,omitempty" yaml:"depth,omitempty" export:"true"`
|
||||||
@@ -426,7 +431,7 @@ func (s *IPStrategy) Get() (ip.Strategy, error) {
|
|||||||
|
|
||||||
// IPWhiteList holds the IP whitelist middleware configuration.
|
// IPWhiteList holds the IP whitelist middleware configuration.
|
||||||
// This middleware limits allowed requests based on the client IP.
|
// This middleware limits allowed requests based on the client IP.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipwhitelist/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipwhitelist/
|
||||||
// Deprecated: please use IPAllowList instead.
|
// Deprecated: please use IPAllowList instead.
|
||||||
type IPWhiteList struct {
|
type IPWhiteList struct {
|
||||||
// SourceRange defines the set of allowed IPs (or ranges of allowed IPs by using CIDR notation). Required.
|
// SourceRange defines the set of allowed IPs (or ranges of allowed IPs by using CIDR notation). Required.
|
||||||
@@ -438,7 +443,7 @@ type IPWhiteList struct {
|
|||||||
|
|
||||||
// IPAllowList holds the IP allowlist middleware configuration.
|
// IPAllowList holds the IP allowlist middleware configuration.
|
||||||
// This middleware limits allowed requests based on the client IP.
|
// This middleware limits allowed requests based on the client IP.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/ipallowlist/
|
||||||
type IPAllowList struct {
|
type IPAllowList struct {
|
||||||
// SourceRange defines the set of allowed IPs (or ranges of allowed IPs by using CIDR notation).
|
// SourceRange defines the set of allowed IPs (or ranges of allowed IPs by using CIDR notation).
|
||||||
SourceRange []string `json:"sourceRange,omitempty" toml:"sourceRange,omitempty" yaml:"sourceRange,omitempty"`
|
SourceRange []string `json:"sourceRange,omitempty" toml:"sourceRange,omitempty" yaml:"sourceRange,omitempty"`
|
||||||
@@ -452,7 +457,7 @@ type IPAllowList struct {
|
|||||||
|
|
||||||
// InFlightReq holds the in-flight request middleware configuration.
|
// InFlightReq holds the in-flight request middleware configuration.
|
||||||
// This middleware limits the number of requests being processed and served concurrently.
|
// This middleware limits the number of requests being processed and served concurrently.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/
|
||||||
type InFlightReq struct {
|
type InFlightReq struct {
|
||||||
// Amount defines the maximum amount of allowed simultaneous in-flight request.
|
// Amount defines the maximum amount of allowed simultaneous in-flight request.
|
||||||
// The middleware responds with HTTP 429 Too Many Requests if there are already amount requests in progress (based on the same sourceCriterion strategy).
|
// The middleware responds with HTTP 429 Too Many Requests if there are already amount requests in progress (based on the same sourceCriterion strategy).
|
||||||
@@ -460,7 +465,7 @@ type InFlightReq struct {
|
|||||||
// SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
// SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
// If several strategies are defined at the same time, an error will be raised.
|
// If several strategies are defined at the same time, an error will be raised.
|
||||||
// If none are set, the default is to use the requestHost.
|
// If none are set, the default is to use the requestHost.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/inflightreq/#sourcecriterion
|
||||||
SourceCriterion *SourceCriterion `json:"sourceCriterion,omitempty" toml:"sourceCriterion,omitempty" yaml:"sourceCriterion,omitempty" export:"true"`
|
SourceCriterion *SourceCriterion `json:"sourceCriterion,omitempty" toml:"sourceCriterion,omitempty" yaml:"sourceCriterion,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -468,7 +473,7 @@ type InFlightReq struct {
|
|||||||
|
|
||||||
// PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
// PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
// This middleware adds the selected data from the passed client TLS certificate to a header.
|
// This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/passtlsclientcert/
|
||||||
type PassTLSClientCert struct {
|
type PassTLSClientCert struct {
|
||||||
// PEM sets the X-Forwarded-Tls-Client-Cert header with the certificate.
|
// PEM sets the X-Forwarded-Tls-Client-Cert header with the certificate.
|
||||||
PEM bool `json:"pem,omitempty" toml:"pem,omitempty" yaml:"pem,omitempty" export:"true"`
|
PEM bool `json:"pem,omitempty" toml:"pem,omitempty" yaml:"pem,omitempty" export:"true"`
|
||||||
@@ -524,7 +529,7 @@ func (r *RateLimit) SetDefaults() {
|
|||||||
|
|
||||||
// RedirectRegex holds the redirect regex middleware configuration.
|
// RedirectRegex holds the redirect regex middleware configuration.
|
||||||
// This middleware redirects a request using regex matching and replacement.
|
// This middleware redirects a request using regex matching and replacement.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectregex/#regex
|
||||||
type RedirectRegex struct {
|
type RedirectRegex struct {
|
||||||
// Regex defines the regex used to match and capture elements from the request URL.
|
// Regex defines the regex used to match and capture elements from the request URL.
|
||||||
Regex string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty"`
|
Regex string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty"`
|
||||||
@@ -538,7 +543,7 @@ type RedirectRegex struct {
|
|||||||
|
|
||||||
// RedirectScheme holds the redirect scheme middleware configuration.
|
// RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
// This middleware redirects requests from a scheme/port to another.
|
// This middleware redirects requests from a scheme/port to another.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/redirectscheme/
|
||||||
type RedirectScheme struct {
|
type RedirectScheme struct {
|
||||||
// Scheme defines the scheme of the new URL.
|
// Scheme defines the scheme of the new URL.
|
||||||
Scheme string `json:"scheme,omitempty" toml:"scheme,omitempty" yaml:"scheme,omitempty" export:"true"`
|
Scheme string `json:"scheme,omitempty" toml:"scheme,omitempty" yaml:"scheme,omitempty" export:"true"`
|
||||||
@@ -552,7 +557,7 @@ type RedirectScheme struct {
|
|||||||
|
|
||||||
// ReplacePath holds the replace path middleware configuration.
|
// ReplacePath holds the replace path middleware configuration.
|
||||||
// This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
// This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepath/
|
||||||
type ReplacePath struct {
|
type ReplacePath struct {
|
||||||
// Path defines the path to use as replacement in the request URL.
|
// Path defines the path to use as replacement in the request URL.
|
||||||
Path string `json:"path,omitempty" toml:"path,omitempty" yaml:"path,omitempty" export:"true"`
|
Path string `json:"path,omitempty" toml:"path,omitempty" yaml:"path,omitempty" export:"true"`
|
||||||
@@ -562,7 +567,7 @@ type ReplacePath struct {
|
|||||||
|
|
||||||
// ReplacePathRegex holds the replace path regex middleware configuration.
|
// ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
// This middleware replaces the path of a URL using regex matching and replacement.
|
// This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/replacepathregex/
|
||||||
type ReplacePathRegex struct {
|
type ReplacePathRegex struct {
|
||||||
// Regex defines the regular expression used to match and capture the path from the request URL.
|
// Regex defines the regular expression used to match and capture the path from the request URL.
|
||||||
Regex string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty" export:"true"`
|
Regex string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty" export:"true"`
|
||||||
@@ -575,7 +580,7 @@ type ReplacePathRegex struct {
|
|||||||
// Retry holds the retry middleware configuration.
|
// Retry holds the retry middleware configuration.
|
||||||
// This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
// This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
// As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
// As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/retry/
|
||||||
type Retry struct {
|
type Retry struct {
|
||||||
// Attempts defines how many times the request should be retried.
|
// Attempts defines how many times the request should be retried.
|
||||||
Attempts int `json:"attempts,omitempty" toml:"attempts,omitempty" yaml:"attempts,omitempty" export:"true"`
|
Attempts int `json:"attempts,omitempty" toml:"attempts,omitempty" yaml:"attempts,omitempty" export:"true"`
|
||||||
@@ -591,7 +596,7 @@ type Retry struct {
|
|||||||
|
|
||||||
// StripPrefix holds the strip prefix middleware configuration.
|
// StripPrefix holds the strip prefix middleware configuration.
|
||||||
// This middleware removes the specified prefixes from the URL path.
|
// This middleware removes the specified prefixes from the URL path.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefix/
|
||||||
type StripPrefix struct {
|
type StripPrefix struct {
|
||||||
// Prefixes defines the prefixes to strip from the request URL.
|
// Prefixes defines the prefixes to strip from the request URL.
|
||||||
Prefixes []string `json:"prefixes,omitempty" toml:"prefixes,omitempty" yaml:"prefixes,omitempty" export:"true"`
|
Prefixes []string `json:"prefixes,omitempty" toml:"prefixes,omitempty" yaml:"prefixes,omitempty" export:"true"`
|
||||||
@@ -606,7 +611,7 @@ type StripPrefix struct {
|
|||||||
|
|
||||||
// StripPrefixRegex holds the strip prefix regex middleware configuration.
|
// StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
// This middleware removes the matching prefixes from the URL path.
|
// This middleware removes the matching prefixes from the URL path.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/http/stripprefixregex/
|
||||||
type StripPrefixRegex struct {
|
type StripPrefixRegex struct {
|
||||||
// Regex defines the regular expression to match the path prefix from the request URL.
|
// Regex defines the regular expression to match the path prefix from the request URL.
|
||||||
Regex []string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty" export:"true"`
|
Regex []string `json:"regex,omitempty" toml:"regex,omitempty" yaml:"regex,omitempty" export:"true"`
|
||||||
@@ -687,3 +692,24 @@ type RequestHeaderModifier struct {
|
|||||||
Add map[string]string `json:"add,omitempty"`
|
Add map[string]string `json:"add,omitempty"`
|
||||||
Remove []string `json:"remove,omitempty"`
|
Remove []string `json:"remove,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen=true
|
||||||
|
|
||||||
|
// RequestRedirect holds the request redirect middleware configuration.
|
||||||
|
type RequestRedirect struct {
|
||||||
|
Scheme *string `json:"scheme,omitempty"`
|
||||||
|
Hostname *string `json:"hostname,omitempty"`
|
||||||
|
Port *string `json:"port,omitempty"`
|
||||||
|
Path *string `json:"path,omitempty"`
|
||||||
|
PathPrefix *string `json:"pathPrefix,omitempty"`
|
||||||
|
StatusCode int `json:"statusCode,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen=true
|
||||||
|
|
||||||
|
// URLRewrite holds the URL rewrite middleware configuration.
|
||||||
|
type URLRewrite struct {
|
||||||
|
Hostname *string `json:"hostname,omitempty"`
|
||||||
|
Path *string `json:"path,omitempty"`
|
||||||
|
PathPrefix *string `json:"pathPrefix,omitempty"`
|
||||||
|
}
|
||||||
|
@@ -125,7 +125,7 @@ type TCPServer struct {
|
|||||||
// +k8s:deepcopy-gen=true
|
// +k8s:deepcopy-gen=true
|
||||||
|
|
||||||
// ProxyProtocol holds the PROXY Protocol configuration.
|
// ProxyProtocol holds the PROXY Protocol configuration.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol
|
// More info: https://doc.traefik.io/traefik/v3.1/routing/services/#proxy-protocol
|
||||||
type ProxyProtocol struct {
|
type ProxyProtocol struct {
|
||||||
// Version defines the PROXY Protocol version to use.
|
// Version defines the PROXY Protocol version to use.
|
||||||
Version int `json:"version,omitempty" toml:"version,omitempty" yaml:"version,omitempty" export:"true"`
|
Version int `json:"version,omitempty" toml:"version,omitempty" yaml:"version,omitempty" export:"true"`
|
||||||
|
@@ -15,7 +15,7 @@ type TCPMiddleware struct {
|
|||||||
// TCPInFlightConn holds the TCP InFlightConn middleware configuration.
|
// TCPInFlightConn holds the TCP InFlightConn middleware configuration.
|
||||||
// This middleware prevents services from being overwhelmed with high load,
|
// This middleware prevents services from being overwhelmed with high load,
|
||||||
// by limiting the number of allowed simultaneous connections for one IP.
|
// by limiting the number of allowed simultaneous connections for one IP.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/inflightconn/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/inflightconn/
|
||||||
type TCPInFlightConn struct {
|
type TCPInFlightConn struct {
|
||||||
// Amount defines the maximum amount of allowed simultaneous connections.
|
// Amount defines the maximum amount of allowed simultaneous connections.
|
||||||
// The middleware closes the connection if there are already amount connections opened.
|
// The middleware closes the connection if there are already amount connections opened.
|
||||||
@@ -35,7 +35,7 @@ type TCPIPWhiteList struct {
|
|||||||
|
|
||||||
// TCPIPAllowList holds the TCP IPAllowList middleware configuration.
|
// TCPIPAllowList holds the TCP IPAllowList middleware configuration.
|
||||||
// This middleware limits allowed requests based on the client IP.
|
// This middleware limits allowed requests based on the client IP.
|
||||||
// More info: https://doc.traefik.io/traefik/v3.0/middlewares/tcp/ipallowlist/
|
// More info: https://doc.traefik.io/traefik/v3.1/middlewares/tcp/ipallowlist/
|
||||||
type TCPIPAllowList struct {
|
type TCPIPAllowList struct {
|
||||||
// SourceRange defines the allowed IPs (or ranges of allowed IPs by using CIDR notation).
|
// SourceRange defines the allowed IPs (or ranges of allowed IPs by using CIDR notation).
|
||||||
SourceRange []string `json:"sourceRange,omitempty" toml:"sourceRange,omitempty" yaml:"sourceRange,omitempty"`
|
SourceRange []string `json:"sourceRange,omitempty" toml:"sourceRange,omitempty" yaml:"sourceRange,omitempty"`
|
||||||
|
@@ -864,6 +864,16 @@ func (in *Middleware) DeepCopyInto(out *Middleware) {
|
|||||||
*out = new(RequestHeaderModifier)
|
*out = new(RequestHeaderModifier)
|
||||||
(*in).DeepCopyInto(*out)
|
(*in).DeepCopyInto(*out)
|
||||||
}
|
}
|
||||||
|
if in.RequestRedirect != nil {
|
||||||
|
in, out := &in.RequestRedirect, &out.RequestRedirect
|
||||||
|
*out = new(RequestRedirect)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
|
if in.URLRewrite != nil {
|
||||||
|
in, out := &in.URLRewrite, &out.URLRewrite
|
||||||
|
*out = new(URLRewrite)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1107,6 +1117,47 @@ func (in *RequestHeaderModifier) DeepCopy() *RequestHeaderModifier {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *RequestRedirect) DeepCopyInto(out *RequestRedirect) {
|
||||||
|
*out = *in
|
||||||
|
if in.Scheme != nil {
|
||||||
|
in, out := &in.Scheme, &out.Scheme
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.Hostname != nil {
|
||||||
|
in, out := &in.Hostname, &out.Hostname
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.Port != nil {
|
||||||
|
in, out := &in.Port, &out.Port
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.Path != nil {
|
||||||
|
in, out := &in.Path, &out.Path
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.PathPrefix != nil {
|
||||||
|
in, out := &in.PathPrefix, &out.PathPrefix
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequestRedirect.
|
||||||
|
func (in *RequestRedirect) DeepCopy() *RequestRedirect {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(RequestRedirect)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ResponseForwarding) DeepCopyInto(out *ResponseForwarding) {
|
func (in *ResponseForwarding) DeepCopyInto(out *ResponseForwarding) {
|
||||||
*out = *in
|
*out = *in
|
||||||
@@ -2159,6 +2210,37 @@ func (in *UDPWeightedRoundRobin) DeepCopy() *UDPWeightedRoundRobin {
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *URLRewrite) DeepCopyInto(out *URLRewrite) {
|
||||||
|
*out = *in
|
||||||
|
if in.Hostname != nil {
|
||||||
|
in, out := &in.Hostname, &out.Hostname
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.Path != nil {
|
||||||
|
in, out := &in.Path, &out.Path
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
if in.PathPrefix != nil {
|
||||||
|
in, out := &in.PathPrefix, &out.PathPrefix
|
||||||
|
*out = new(string)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new URLRewrite.
|
||||||
|
func (in *URLRewrite) DeepCopy() *URLRewrite {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(URLRewrite)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in Users) DeepCopyInto(out *Users) {
|
func (in Users) DeepCopyInto(out *Users) {
|
||||||
{
|
{
|
||||||
@@ -2187,6 +2269,11 @@ func (in *WRRService) DeepCopyInto(out *WRRService) {
|
|||||||
*out = new(int)
|
*out = new(int)
|
||||||
**out = **in
|
**out = **in
|
||||||
}
|
}
|
||||||
|
if in.Status != nil {
|
||||||
|
in, out := &in.Status, &out.Status
|
||||||
|
*out = new(int)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -63,6 +63,7 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
"traefik.http.middlewares.Middleware8.headers.addvaryheader": "true",
|
"traefik.http.middlewares.Middleware8.headers.addvaryheader": "true",
|
||||||
"traefik.http.middlewares.Middleware8.headers.browserxssfilter": "true",
|
"traefik.http.middlewares.Middleware8.headers.browserxssfilter": "true",
|
||||||
"traefik.http.middlewares.Middleware8.headers.contentsecuritypolicy": "foobar",
|
"traefik.http.middlewares.Middleware8.headers.contentsecuritypolicy": "foobar",
|
||||||
|
"traefik.http.middlewares.Middleware8.headers.contentsecuritypolicyreportonly": "foobar",
|
||||||
"traefik.http.middlewares.Middleware8.headers.contenttypenosniff": "true",
|
"traefik.http.middlewares.Middleware8.headers.contenttypenosniff": "true",
|
||||||
"traefik.http.middlewares.Middleware8.headers.custombrowserxssvalue": "foobar",
|
"traefik.http.middlewares.Middleware8.headers.custombrowserxssvalue": "foobar",
|
||||||
"traefik.http.middlewares.Middleware8.headers.customframeoptionsvalue": "foobar",
|
"traefik.http.middlewares.Middleware8.headers.customframeoptionsvalue": "foobar",
|
||||||
@@ -611,22 +612,23 @@ func TestDecodeConfiguration(t *testing.T) {
|
|||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
},
|
},
|
||||||
SSLForceHost: Bool(true),
|
SSLForceHost: Bool(true),
|
||||||
STSSeconds: 42,
|
STSSeconds: 42,
|
||||||
STSIncludeSubdomains: true,
|
STSIncludeSubdomains: true,
|
||||||
STSPreload: true,
|
STSPreload: true,
|
||||||
ForceSTSHeader: true,
|
ForceSTSHeader: true,
|
||||||
FrameDeny: true,
|
FrameDeny: true,
|
||||||
CustomFrameOptionsValue: "foobar",
|
CustomFrameOptionsValue: "foobar",
|
||||||
ContentTypeNosniff: true,
|
ContentTypeNosniff: true,
|
||||||
BrowserXSSFilter: true,
|
BrowserXSSFilter: true,
|
||||||
CustomBrowserXSSValue: "foobar",
|
CustomBrowserXSSValue: "foobar",
|
||||||
ContentSecurityPolicy: "foobar",
|
ContentSecurityPolicy: "foobar",
|
||||||
PublicKey: "foobar",
|
ContentSecurityPolicyReportOnly: "foobar",
|
||||||
ReferrerPolicy: "foobar",
|
PublicKey: "foobar",
|
||||||
FeaturePolicy: String("foobar"),
|
ReferrerPolicy: "foobar",
|
||||||
PermissionsPolicy: "foobar",
|
FeaturePolicy: String("foobar"),
|
||||||
IsDevelopment: true,
|
PermissionsPolicy: "foobar",
|
||||||
|
IsDevelopment: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Middleware9": {
|
"Middleware9": {
|
||||||
@@ -1134,22 +1136,23 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
"name0": "foobar",
|
"name0": "foobar",
|
||||||
"name1": "foobar",
|
"name1": "foobar",
|
||||||
},
|
},
|
||||||
SSLForceHost: Bool(true),
|
SSLForceHost: Bool(true),
|
||||||
STSSeconds: 42,
|
STSSeconds: 42,
|
||||||
STSIncludeSubdomains: true,
|
STSIncludeSubdomains: true,
|
||||||
STSPreload: true,
|
STSPreload: true,
|
||||||
ForceSTSHeader: true,
|
ForceSTSHeader: true,
|
||||||
FrameDeny: true,
|
FrameDeny: true,
|
||||||
CustomFrameOptionsValue: "foobar",
|
CustomFrameOptionsValue: "foobar",
|
||||||
ContentTypeNosniff: true,
|
ContentTypeNosniff: true,
|
||||||
BrowserXSSFilter: true,
|
BrowserXSSFilter: true,
|
||||||
CustomBrowserXSSValue: "foobar",
|
CustomBrowserXSSValue: "foobar",
|
||||||
ContentSecurityPolicy: "foobar",
|
ContentSecurityPolicy: "foobar",
|
||||||
PublicKey: "foobar",
|
ContentSecurityPolicyReportOnly: "foobar",
|
||||||
ReferrerPolicy: "foobar",
|
PublicKey: "foobar",
|
||||||
FeaturePolicy: String("foobar"),
|
ReferrerPolicy: "foobar",
|
||||||
PermissionsPolicy: "foobar",
|
FeaturePolicy: String("foobar"),
|
||||||
IsDevelopment: true,
|
PermissionsPolicy: "foobar",
|
||||||
|
IsDevelopment: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Middleware9": {
|
"Middleware9": {
|
||||||
@@ -1299,6 +1302,7 @@ func TestEncodeConfiguration(t *testing.T) {
|
|||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.AllowedHosts": "foobar, fiibar",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.AllowedHosts": "foobar, fiibar",
|
||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.BrowserXSSFilter": "true",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.BrowserXSSFilter": "true",
|
||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.ContentSecurityPolicy": "foobar",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.ContentSecurityPolicy": "foobar",
|
||||||
|
"traefik.HTTP.Middlewares.Middleware8.Headers.ContentSecurityPolicyReportOnly": "foobar",
|
||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.ContentTypeNosniff": "true",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.ContentTypeNosniff": "true",
|
||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.CustomBrowserXSSValue": "foobar",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.CustomBrowserXSSValue": "foobar",
|
||||||
"traefik.HTTP.Middlewares.Middleware8.Headers.CustomFrameOptionsValue": "foobar",
|
"traefik.HTTP.Middlewares.Middleware8.Headers.CustomFrameOptionsValue": "foobar",
|
||||||
|
@@ -7,5 +7,6 @@ type Experimental struct {
|
|||||||
Plugins map[string]plugins.Descriptor `description:"Plugins configuration." json:"plugins,omitempty" toml:"plugins,omitempty" yaml:"plugins,omitempty" export:"true"`
|
Plugins map[string]plugins.Descriptor `description:"Plugins configuration." json:"plugins,omitempty" toml:"plugins,omitempty" yaml:"plugins,omitempty" export:"true"`
|
||||||
LocalPlugins map[string]plugins.LocalDescriptor `description:"Local plugins configuration." json:"localPlugins,omitempty" toml:"localPlugins,omitempty" yaml:"localPlugins,omitempty" export:"true"`
|
LocalPlugins map[string]plugins.LocalDescriptor `description:"Local plugins configuration." json:"localPlugins,omitempty" toml:"localPlugins,omitempty" yaml:"localPlugins,omitempty" export:"true"`
|
||||||
|
|
||||||
KubernetesGateway bool `description:"Allow the Kubernetes gateway api provider usage." json:"kubernetesGateway,omitempty" toml:"kubernetesGateway,omitempty" yaml:"kubernetesGateway,omitempty" export:"true"`
|
// Deprecated: KubernetesGateway provider is not an experimental feature starting with v3.1. Please remove its usage from the static configuration.
|
||||||
|
KubernetesGateway bool `description:"(Deprecated) Allow the Kubernetes gateway api provider usage." json:"kubernetesGateway,omitempty" toml:"kubernetesGateway,omitempty" yaml:"kubernetesGateway,omitempty" export:"true"`
|
||||||
}
|
}
|
||||||
|
@@ -201,6 +201,7 @@ type Tracing struct {
|
|||||||
GlobalAttributes map[string]string `description:"Defines additional attributes (key:value) on all spans." json:"globalAttributes,omitempty" toml:"globalAttributes,omitempty" yaml:"globalAttributes,omitempty" export:"true"`
|
GlobalAttributes map[string]string `description:"Defines additional attributes (key:value) on all spans." json:"globalAttributes,omitempty" toml:"globalAttributes,omitempty" yaml:"globalAttributes,omitempty" export:"true"`
|
||||||
CapturedRequestHeaders []string `description:"Request headers to add as attributes for server and client spans." json:"capturedRequestHeaders,omitempty" toml:"capturedRequestHeaders,omitempty" yaml:"capturedRequestHeaders,omitempty" export:"true"`
|
CapturedRequestHeaders []string `description:"Request headers to add as attributes for server and client spans." json:"capturedRequestHeaders,omitempty" toml:"capturedRequestHeaders,omitempty" yaml:"capturedRequestHeaders,omitempty" export:"true"`
|
||||||
CapturedResponseHeaders []string `description:"Response headers to add as attributes for server and client spans." json:"capturedResponseHeaders,omitempty" toml:"capturedResponseHeaders,omitempty" yaml:"capturedResponseHeaders,omitempty" export:"true"`
|
CapturedResponseHeaders []string `description:"Response headers to add as attributes for server and client spans." json:"capturedResponseHeaders,omitempty" toml:"capturedResponseHeaders,omitempty" yaml:"capturedResponseHeaders,omitempty" export:"true"`
|
||||||
|
SafeQueryParams []string `description:"Query params to not redact." json:"safeQueryParams,omitempty" toml:"safeQueryParams,omitempty" yaml:"safeQueryParams,omitempty" export:"true"`
|
||||||
SampleRate float64 `description:"Sets the rate between 0.0 and 1.0 of requests to trace." json:"sampleRate,omitempty" toml:"sampleRate,omitempty" yaml:"sampleRate,omitempty" export:"true"`
|
SampleRate float64 `description:"Sets the rate between 0.0 and 1.0 of requests to trace." json:"sampleRate,omitempty" toml:"sampleRate,omitempty" yaml:"sampleRate,omitempty" export:"true"`
|
||||||
AddInternals bool `description:"Enables tracing for internal services (ping, dashboard, etc...)." json:"addInternals,omitempty" toml:"addInternals,omitempty" yaml:"addInternals,omitempty" export:"true"`
|
AddInternals bool `description:"Enables tracing for internal services (ping, dashboard, etc...)." json:"addInternals,omitempty" toml:"addInternals,omitempty" yaml:"addInternals,omitempty" export:"true"`
|
||||||
|
|
||||||
@@ -279,14 +280,8 @@ func (c *Configuration) SetEffectiveConfiguration() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable Gateway API provider if not enabled in experimental.
|
|
||||||
if c.Experimental == nil || !c.Experimental.KubernetesGateway {
|
|
||||||
c.Providers.KubernetesGateway = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure Gateway API provider
|
// Configure Gateway API provider
|
||||||
if c.Providers.KubernetesGateway != nil {
|
if c.Providers.KubernetesGateway != nil {
|
||||||
log.Debug().Msg("Experimental Kubernetes Gateway provider has been activated")
|
|
||||||
entryPoints := make(map[string]gateway.Entrypoint)
|
entryPoints := make(map[string]gateway.Entrypoint)
|
||||||
for epName, entryPoint := range c.EntryPoints {
|
for epName, entryPoint := range c.EntryPoints {
|
||||||
entryPoints[epName] = gateway.Entrypoint{Address: entryPoint.GetAddress(), HasHTTPTLSConf: entryPoint.HTTP.TLS != nil}
|
entryPoints[epName] = gateway.Entrypoint{Address: entryPoint.GetAddress(), HasHTTPTLSConf: entryPoint.HTTP.TLS != nil}
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
"net/netip"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -91,10 +92,11 @@ func (ip *Checker) ContainsIP(addr net.IP) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parseIP(addr string) (net.IP, error) {
|
func parseIP(addr string) (net.IP, error) {
|
||||||
userIP := net.ParseIP(addr)
|
parsedAddr, err := netip.ParseAddr(addr)
|
||||||
if userIP == nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't parse IP from address %s", addr)
|
return nil, fmt.Errorf("can't parse IP from address %s", addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
return userIP, nil
|
ip := parsedAddr.As16()
|
||||||
|
return ip[:], nil
|
||||||
}
|
}
|
||||||
|
@@ -258,6 +258,7 @@ func TestContainsIsAllowed(t *testing.T) {
|
|||||||
"2a03:4000:6:d080::42",
|
"2a03:4000:6:d080::42",
|
||||||
"fe80::1",
|
"fe80::1",
|
||||||
"fe80:aa00:00bb:4232:ff00:eeee:00ff:1111",
|
"fe80:aa00:00bb:4232:ff00:eeee:00ff:1111",
|
||||||
|
"fe80:aa00:00bb:4232:ff00:eeee:00ff:1111%vEthernet",
|
||||||
"fe80::fe80",
|
"fe80::fe80",
|
||||||
"1.2.3.1",
|
"1.2.3.1",
|
||||||
"1.2.3.32",
|
"1.2.3.32",
|
||||||
@@ -271,6 +272,7 @@ func TestContainsIsAllowed(t *testing.T) {
|
|||||||
rejectIPs: []string{
|
rejectIPs: []string{
|
||||||
"2a03:4000:7:d080::",
|
"2a03:4000:7:d080::",
|
||||||
"2a03:4000:7:d080::1",
|
"2a03:4000:7:d080::1",
|
||||||
|
"2a03:4000:7:d080::1%vmnet1",
|
||||||
"4242::1",
|
"4242::1",
|
||||||
"1.2.16.1",
|
"1.2.16.1",
|
||||||
"1.2.32.1",
|
"1.2.32.1",
|
||||||
|
@@ -20,7 +20,7 @@ import (
|
|||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
|
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
|
||||||
"go.opentelemetry.io/otel/sdk/resource"
|
"go.opentelemetry.io/otel/sdk/resource"
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
|
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/encoding/gzip"
|
"google.golang.org/grpc/encoding/gzip"
|
||||||
)
|
)
|
||||||
@@ -58,16 +58,16 @@ func NewSemConvMetricRegistry(ctx context.Context, config *types.OTLP) (*SemConv
|
|||||||
meter := otel.Meter("github.com/traefik/traefik",
|
meter := otel.Meter("github.com/traefik/traefik",
|
||||||
metric.WithInstrumentationVersion(version.Version))
|
metric.WithInstrumentationVersion(version.Version))
|
||||||
|
|
||||||
httpServerRequestDuration, err := meter.Float64Histogram("http.server.request.duration",
|
httpServerRequestDuration, err := meter.Float64Histogram(semconv.HTTPServerRequestDurationName,
|
||||||
metric.WithDescription("Duration of HTTP server requests."),
|
metric.WithDescription(semconv.HTTPServerRequestDurationDescription),
|
||||||
metric.WithUnit("s"),
|
metric.WithUnit("s"),
|
||||||
metric.WithExplicitBucketBoundaries(config.ExplicitBoundaries...))
|
metric.WithExplicitBucketBoundaries(config.ExplicitBoundaries...))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't build httpServerRequestDuration histogram: %w", err)
|
return nil, fmt.Errorf("can't build httpServerRequestDuration histogram: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
httpClientRequestDuration, err := meter.Float64Histogram("http.client.request.duration",
|
httpClientRequestDuration, err := meter.Float64Histogram(semconv.HTTPClientRequestDurationName,
|
||||||
metric.WithDescription("Duration of HTTP client requests."),
|
metric.WithDescription(semconv.HTTPClientRequestDurationDescription),
|
||||||
metric.WithUnit("s"),
|
metric.WithUnit("s"),
|
||||||
metric.WithExplicitBucketBoundaries(config.ExplicitBoundaries...))
|
metric.WithExplicitBucketBoundaries(config.ExplicitBoundaries...))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -513,7 +513,7 @@ func TestForwardAuthTracing(t *testing.T) {
|
|||||||
attribute.String("url.scheme", "http"),
|
attribute.String("url.scheme", "http"),
|
||||||
attribute.String("user_agent.original", ""),
|
attribute.String("user_agent.original", ""),
|
||||||
attribute.String("network.peer.address", "127.0.0.1"),
|
attribute.String("network.peer.address", "127.0.0.1"),
|
||||||
attribute.String("network.peer.port", serverPort),
|
attribute.Int64("network.peer.port", int64(serverPortInt)),
|
||||||
attribute.String("server.address", "127.0.0.1"),
|
attribute.String("server.address", "127.0.0.1"),
|
||||||
attribute.Int64("server.port", int64(serverPortInt)),
|
attribute.Int64("server.port", int64(serverPortInt)),
|
||||||
attribute.StringSlice("http.request.header.x-foo", []string{"foo", "bar"}),
|
attribute.StringSlice("http.request.header.x-foo", []string{"foo", "bar"}),
|
||||||
@@ -546,7 +546,7 @@ func TestForwardAuthTracing(t *testing.T) {
|
|||||||
otel.SetTextMapPropagator(autoprop.NewTextMapPropagator())
|
otel.SetTextMapPropagator(autoprop.NewTextMapPropagator())
|
||||||
|
|
||||||
mockTracer := &mockTracer{}
|
mockTracer := &mockTracer{}
|
||||||
tracer := tracing.NewTracer(mockTracer, []string{"X-Foo"}, []string{"X-Bar"})
|
tracer := tracing.NewTracer(mockTracer, []string{"X-Foo"}, []string{"X-Bar"}, []string{"q"})
|
||||||
initialCtx, initialSpan := tracer.Start(req.Context(), "initial")
|
initialCtx, initialSpan := tracer.Start(req.Context(), "initial")
|
||||||
defer initialSpan.End()
|
defer initialSpan.End()
|
||||||
req = req.WithContext(initialCtx)
|
req = req.WithContext(initialCtx)
|
||||||
|
@@ -11,6 +11,7 @@ const acceptEncodingHeader = "Accept-Encoding"
|
|||||||
const (
|
const (
|
||||||
brotliName = "br"
|
brotliName = "br"
|
||||||
gzipName = "gzip"
|
gzipName = "gzip"
|
||||||
|
zstdName = "zstd"
|
||||||
identityName = "identity"
|
identityName = "identity"
|
||||||
wildcardName = "*"
|
wildcardName = "*"
|
||||||
notAcceptable = "not_acceptable"
|
notAcceptable = "not_acceptable"
|
||||||
@@ -51,7 +52,7 @@ func getCompressionType(acceptEncoding []string, defaultType string) string {
|
|||||||
return encoding.Type
|
return encoding.Type
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dt := range []string{brotliName, gzipName} {
|
for _, dt := range []string{zstdName, brotliName, gzipName} {
|
||||||
if slices.ContainsFunc(encodings, func(e Encoding) bool { return e.Type == dt }) {
|
if slices.ContainsFunc(encodings, func(e Encoding) bool { return e.Type == dt }) {
|
||||||
return dt
|
return dt
|
||||||
}
|
}
|
||||||
@@ -76,7 +77,7 @@ func parseAcceptEncoding(acceptEncoding []string) ([]Encoding, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch parsed[0] {
|
switch parsed[0] {
|
||||||
case brotliName, gzipName, identityName, wildcardName:
|
case zstdName, brotliName, gzipName, identityName, wildcardName:
|
||||||
// supported encoding
|
// supported encoding
|
||||||
default:
|
default:
|
||||||
continue
|
continue
|
||||||
|
@@ -18,6 +18,11 @@ func Test_getCompressionType(t *testing.T) {
|
|||||||
values: []string{"gzip, br"},
|
values: []string{"gzip, br"},
|
||||||
expected: brotliName,
|
expected: brotliName,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "zstd > br > gzip (no weight)",
|
||||||
|
values: []string{"zstd, gzip, br"},
|
||||||
|
expected: zstdName,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "known compression type (no weight)",
|
desc: "known compression type (no weight)",
|
||||||
values: []string{"compress, gzip"},
|
values: []string{"compress, gzip"},
|
||||||
@@ -49,6 +54,11 @@ func Test_getCompressionType(t *testing.T) {
|
|||||||
values: []string{"compress;q=1.0, gzip;q=0.5"},
|
values: []string{"compress;q=1.0, gzip;q=0.5"},
|
||||||
expected: gzipName,
|
expected: gzipName,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "fallback on non-zero compression type",
|
||||||
|
values: []string{"compress;q=1.0, gzip, identity;q=0"},
|
||||||
|
expected: gzipName,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "not acceptable (identity)",
|
desc: "not acceptable (identity)",
|
||||||
values: []string{"compress;q=1.0, identity;q=0"},
|
values: []string{"compress;q=1.0, identity;q=0"},
|
||||||
@@ -86,9 +96,10 @@ func Test_parseAcceptEncoding(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
desc: "weight",
|
desc: "weight",
|
||||||
values: []string{"br;q=1.0, gzip;q=0.8, *;q=0.1"},
|
values: []string{"br;q=1.0, zstd;q=0.9, gzip;q=0.8, *;q=0.1"},
|
||||||
expected: []Encoding{
|
expected: []Encoding{
|
||||||
{Type: brotliName, Weight: ptr[float64](1)},
|
{Type: brotliName, Weight: ptr[float64](1)},
|
||||||
|
{Type: zstdName, Weight: ptr(0.9)},
|
||||||
{Type: gzipName, Weight: ptr(0.8)},
|
{Type: gzipName, Weight: ptr(0.8)},
|
||||||
{Type: wildcardName, Weight: ptr(0.1)},
|
{Type: wildcardName, Weight: ptr(0.1)},
|
||||||
},
|
},
|
||||||
@@ -96,9 +107,10 @@ func Test_parseAcceptEncoding(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "mixed",
|
desc: "mixed",
|
||||||
values: []string{"gzip, br;q=1.0, *;q=0"},
|
values: []string{"zstd,gzip, br;q=1.0, *;q=0"},
|
||||||
expected: []Encoding{
|
expected: []Encoding{
|
||||||
{Type: brotliName, Weight: ptr[float64](1)},
|
{Type: brotliName, Weight: ptr[float64](1)},
|
||||||
|
{Type: zstdName},
|
||||||
{Type: gzipName},
|
{Type: gzipName},
|
||||||
{Type: wildcardName, Weight: ptr[float64](0)},
|
{Type: wildcardName, Weight: ptr[float64](0)},
|
||||||
},
|
},
|
||||||
@@ -106,8 +118,9 @@ func Test_parseAcceptEncoding(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "no weight",
|
desc: "no weight",
|
||||||
values: []string{"gzip, br, *"},
|
values: []string{"zstd, gzip, br, *"},
|
||||||
expected: []Encoding{
|
expected: []Encoding{
|
||||||
|
{Type: zstdName},
|
||||||
{Type: gzipName},
|
{Type: gzipName},
|
||||||
{Type: brotliName},
|
{Type: brotliName},
|
||||||
{Type: wildcardName},
|
{Type: wildcardName},
|
||||||
|
@@ -11,7 +11,6 @@ import (
|
|||||||
"github.com/klauspost/compress/gzhttp"
|
"github.com/klauspost/compress/gzhttp"
|
||||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||||
"github.com/traefik/traefik/v3/pkg/middlewares"
|
"github.com/traefik/traefik/v3/pkg/middlewares"
|
||||||
"github.com/traefik/traefik/v3/pkg/middlewares/compress/brotli"
|
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -32,6 +31,7 @@ type compress struct {
|
|||||||
|
|
||||||
brotliHandler http.Handler
|
brotliHandler http.Handler
|
||||||
gzipHandler http.Handler
|
gzipHandler http.Handler
|
||||||
|
zstdHandler http.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new compress middleware.
|
// New creates a new compress middleware.
|
||||||
@@ -77,7 +77,13 @@ func New(ctx context.Context, next http.Handler, conf dynamic.Compress, name str
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
c.brotliHandler, err = c.newBrotliHandler()
|
|
||||||
|
c.zstdHandler, err = c.newCompressionHandler(zstdName, name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
c.brotliHandler, err = c.newCompressionHandler(brotliName, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -130,6 +136,8 @@ func (c *compress) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
func (c *compress) chooseHandler(typ string, rw http.ResponseWriter, req *http.Request) {
|
func (c *compress) chooseHandler(typ string, rw http.ResponseWriter, req *http.Request) {
|
||||||
switch typ {
|
switch typ {
|
||||||
|
case zstdName:
|
||||||
|
c.zstdHandler.ServeHTTP(rw, req)
|
||||||
case brotliName:
|
case brotliName:
|
||||||
c.brotliHandler.ServeHTTP(rw, req)
|
c.brotliHandler.ServeHTTP(rw, req)
|
||||||
case gzipName:
|
case gzipName:
|
||||||
@@ -166,18 +174,13 @@ func (c *compress) newGzipHandler() (http.Handler, error) {
|
|||||||
return wrapper(c.next), nil
|
return wrapper(c.next), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *compress) newBrotliHandler() (http.Handler, error) {
|
func (c *compress) newCompressionHandler(algo string, middlewareName string) (http.Handler, error) {
|
||||||
cfg := brotli.Config{MinSize: c.minSize}
|
cfg := Config{MinSize: c.minSize, Algorithm: algo, MiddlewareName: middlewareName}
|
||||||
if len(c.includes) > 0 {
|
if len(c.includes) > 0 {
|
||||||
cfg.IncludedContentTypes = c.includes
|
cfg.IncludedContentTypes = c.includes
|
||||||
} else {
|
} else {
|
||||||
cfg.ExcludedContentTypes = c.excludes
|
cfg.ExcludedContentTypes = c.excludes
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapper, err := brotli.NewWrapper(cfg)
|
return NewCompressionHandler(cfg, c.next)
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("new brotli wrapper: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return wrapper(c.next), nil
|
|
||||||
}
|
}
|
||||||
|
@@ -41,32 +41,52 @@ func TestNegotiation(t *testing.T) {
|
|||||||
{
|
{
|
||||||
desc: "accept any header",
|
desc: "accept any header",
|
||||||
acceptEncHeader: "*",
|
acceptEncHeader: "*",
|
||||||
expEncoding: "br",
|
expEncoding: brotliName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "gzip accept header",
|
desc: "gzip accept header",
|
||||||
acceptEncHeader: "gzip",
|
acceptEncHeader: "gzip",
|
||||||
expEncoding: "gzip",
|
expEncoding: gzipName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "br accept header",
|
desc: "br accept header",
|
||||||
acceptEncHeader: "br",
|
acceptEncHeader: "br",
|
||||||
expEncoding: "br",
|
expEncoding: brotliName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "multi accept header, prefer br",
|
desc: "multi accept header, prefer br",
|
||||||
acceptEncHeader: "br;q=0.8, gzip;q=0.6",
|
acceptEncHeader: "br;q=0.8, gzip;q=0.6",
|
||||||
expEncoding: "br",
|
expEncoding: brotliName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "multi accept header, prefer gzip",
|
desc: "multi accept header, prefer gzip",
|
||||||
acceptEncHeader: "gzip;q=1.0, br;q=0.8",
|
acceptEncHeader: "gzip;q=1.0, br;q=0.8",
|
||||||
expEncoding: "gzip",
|
expEncoding: gzipName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "multi accept header list, prefer br",
|
desc: "multi accept header list, prefer br",
|
||||||
acceptEncHeader: "gzip, br",
|
acceptEncHeader: "gzip, br",
|
||||||
expEncoding: "br",
|
expEncoding: brotliName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "zstd accept header",
|
||||||
|
acceptEncHeader: "zstd",
|
||||||
|
expEncoding: zstdName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "multi accept header, prefer zstd",
|
||||||
|
acceptEncHeader: "zstd;q=0.9, br;q=0.8, gzip;q=0.6",
|
||||||
|
expEncoding: zstdName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "multi accept header, prefer gzip",
|
||||||
|
acceptEncHeader: "gzip;q=1.0, br;q=0.8, zstd;q=0.7",
|
||||||
|
expEncoding: gzipName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "multi accept header list, prefer zstd",
|
||||||
|
acceptEncHeader: "gzip, br, zstd",
|
||||||
|
expEncoding: zstdName,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package brotli
|
package compress
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
@@ -10,6 +10,9 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/andybalholm/brotli"
|
"github.com/andybalholm/brotli"
|
||||||
|
"github.com/klauspost/compress/zstd"
|
||||||
|
"github.com/traefik/traefik/v3/pkg/middlewares"
|
||||||
|
"github.com/traefik/traefik/v3/pkg/middlewares/observability"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -30,10 +33,26 @@ type Config struct {
|
|||||||
IncludedContentTypes []string
|
IncludedContentTypes []string
|
||||||
// MinSize is the minimum size (in bytes) required to enable compression.
|
// MinSize is the minimum size (in bytes) required to enable compression.
|
||||||
MinSize int
|
MinSize int
|
||||||
|
// Algorithm used for the compression (currently Brotli and Zstandard)
|
||||||
|
Algorithm string
|
||||||
|
// MiddlewareName use for logging purposes
|
||||||
|
MiddlewareName string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWrapper returns a new Brotli compressing wrapper.
|
// CompressionHandler handles Brolti and Zstd compression.
|
||||||
func NewWrapper(cfg Config) (func(http.Handler) http.HandlerFunc, error) {
|
type CompressionHandler struct {
|
||||||
|
cfg Config
|
||||||
|
excludedContentTypes []parsedContentType
|
||||||
|
includedContentTypes []parsedContentType
|
||||||
|
next http.Handler
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCompressionHandler returns a new compressing handler.
|
||||||
|
func NewCompressionHandler(cfg Config, next http.Handler) (http.Handler, error) {
|
||||||
|
if cfg.Algorithm == "" {
|
||||||
|
return nil, errors.New("compression algorithm undefined")
|
||||||
|
}
|
||||||
|
|
||||||
if cfg.MinSize < 0 {
|
if cfg.MinSize < 0 {
|
||||||
return nil, errors.New("minimum size must be greater than or equal to zero")
|
return nil, errors.New("minimum size must be greater than or equal to zero")
|
||||||
}
|
}
|
||||||
@@ -62,30 +81,89 @@ func NewWrapper(cfg Config) (func(http.Handler) http.HandlerFunc, error) {
|
|||||||
includedContentTypes = append(includedContentTypes, parsedContentType{mediaType, params})
|
includedContentTypes = append(includedContentTypes, parsedContentType{mediaType, params})
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(h http.Handler) http.HandlerFunc {
|
return &CompressionHandler{
|
||||||
return func(rw http.ResponseWriter, r *http.Request) {
|
cfg: cfg,
|
||||||
rw.Header().Add(vary, acceptEncoding)
|
excludedContentTypes: excludedContentTypes,
|
||||||
|
includedContentTypes: includedContentTypes,
|
||||||
brw := &responseWriter{
|
next: next,
|
||||||
rw: rw,
|
|
||||||
bw: brotli.NewWriter(rw),
|
|
||||||
minSize: cfg.MinSize,
|
|
||||||
statusCode: http.StatusOK,
|
|
||||||
excludedContentTypes: excludedContentTypes,
|
|
||||||
includedContentTypes: includedContentTypes,
|
|
||||||
}
|
|
||||||
defer brw.close()
|
|
||||||
|
|
||||||
h.ServeHTTP(brw, r)
|
|
||||||
}
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CompressionHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||||
|
rw.Header().Add(vary, acceptEncoding)
|
||||||
|
|
||||||
|
compressionWriter, err := newCompressionWriter(c.cfg.Algorithm, rw)
|
||||||
|
if err != nil {
|
||||||
|
logger := middlewares.GetLogger(r.Context(), c.cfg.MiddlewareName, typeName)
|
||||||
|
logMessage := fmt.Sprintf("create compression handler: %v", err)
|
||||||
|
logger.Debug().Msg(logMessage)
|
||||||
|
observability.SetStatusErrorf(r.Context(), logMessage)
|
||||||
|
rw.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
responseWriter := &responseWriter{
|
||||||
|
rw: rw,
|
||||||
|
compressionWriter: compressionWriter,
|
||||||
|
minSize: c.cfg.MinSize,
|
||||||
|
statusCode: http.StatusOK,
|
||||||
|
excludedContentTypes: c.excludedContentTypes,
|
||||||
|
includedContentTypes: c.includedContentTypes,
|
||||||
|
}
|
||||||
|
defer responseWriter.close()
|
||||||
|
|
||||||
|
c.next.ServeHTTP(responseWriter, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
type compression interface {
|
||||||
|
// Write data to the encoder.
|
||||||
|
// Input data will be buffered and as the buffer fills up
|
||||||
|
// content will be compressed and written to the output.
|
||||||
|
// When done writing, use Close to flush the remaining output
|
||||||
|
// and write CRC if requested.
|
||||||
|
Write(p []byte) (n int, err error)
|
||||||
|
// Flush will send the currently written data to output
|
||||||
|
// and block until everything has been written.
|
||||||
|
// This should only be used on rare occasions where pushing the currently queued data is critical.
|
||||||
|
Flush() error
|
||||||
|
// Close closes the underlying writers if/when appropriate.
|
||||||
|
// Note that the compressed writer should not be closed if we never used it,
|
||||||
|
// as it would otherwise send some extra "end of compression" bytes.
|
||||||
|
// Close also makes sure to flush whatever was left to write from the buffer.
|
||||||
|
Close() error
|
||||||
|
}
|
||||||
|
|
||||||
|
type compressionWriter struct {
|
||||||
|
compression
|
||||||
|
alg string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newCompressionWriter(algo string, in io.Writer) (*compressionWriter, error) {
|
||||||
|
switch algo {
|
||||||
|
case brotliName:
|
||||||
|
return &compressionWriter{compression: brotli.NewWriter(in), alg: algo}, nil
|
||||||
|
|
||||||
|
case zstdName:
|
||||||
|
writer, err := zstd.NewWriter(in)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("creating zstd writer: %w", err)
|
||||||
|
}
|
||||||
|
return &compressionWriter{compression: writer, alg: algo}, nil
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unknown compression algo: %s", algo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *compressionWriter) ContentEncoding() string {
|
||||||
|
return c.alg
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: check whether we want to implement content-type sniffing (as gzip does)
|
// TODO: check whether we want to implement content-type sniffing (as gzip does)
|
||||||
// TODO: check whether we should support Accept-Ranges (as gzip does, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges)
|
// TODO: check whether we should support Accept-Ranges (as gzip does, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges)
|
||||||
type responseWriter struct {
|
type responseWriter struct {
|
||||||
rw http.ResponseWriter
|
rw http.ResponseWriter
|
||||||
bw *brotli.Writer
|
compressionWriter *compressionWriter
|
||||||
|
|
||||||
minSize int
|
minSize int
|
||||||
excludedContentTypes []parsedContentType
|
excludedContentTypes []parsedContentType
|
||||||
@@ -133,7 +211,7 @@ func (r *responseWriter) Write(p []byte) (int, error) {
|
|||||||
// We are now in compression cruise mode until the end of times.
|
// We are now in compression cruise mode until the end of times.
|
||||||
if r.compressionStarted {
|
if r.compressionStarted {
|
||||||
// If compressionStarted we assume we have sent headers already
|
// If compressionStarted we assume we have sent headers already
|
||||||
return r.bw.Write(p)
|
return r.compressionWriter.Write(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we detect a contentEncoding, we know we are never going to compress.
|
// If we detect a contentEncoding, we know we are never going to compress.
|
||||||
@@ -187,13 +265,13 @@ func (r *responseWriter) Write(p []byte) (int, error) {
|
|||||||
// Since we know we are going to compress we will never be able to know the actual length.
|
// Since we know we are going to compress we will never be able to know the actual length.
|
||||||
r.rw.Header().Del(contentLength)
|
r.rw.Header().Del(contentLength)
|
||||||
|
|
||||||
r.rw.Header().Set(contentEncoding, "br")
|
r.rw.Header().Set(contentEncoding, r.compressionWriter.ContentEncoding())
|
||||||
r.rw.WriteHeader(r.statusCode)
|
r.rw.WriteHeader(r.statusCode)
|
||||||
r.headersSent = true
|
r.headersSent = true
|
||||||
|
|
||||||
// Start with sending what we have previously buffered, before actually writing
|
// Start with sending what we have previously buffered, before actually writing
|
||||||
// the bytes in argument.
|
// the bytes in argument.
|
||||||
n, err := r.bw.Write(r.buf)
|
n, err := r.compressionWriter.Write(r.buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.buf = r.buf[n:]
|
r.buf = r.buf[n:]
|
||||||
// Return zero because we haven't taken care of the bytes in argument yet.
|
// Return zero because we haven't taken care of the bytes in argument yet.
|
||||||
@@ -212,7 +290,7 @@ func (r *responseWriter) Write(p []byte) (int, error) {
|
|||||||
r.buf = r.buf[:0]
|
r.buf = r.buf[:0]
|
||||||
|
|
||||||
// Now that we emptied the buffer, we can actually write the given bytes.
|
// Now that we emptied the buffer, we can actually write the given bytes.
|
||||||
return r.bw.Write(p)
|
return r.compressionWriter.Write(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush flushes data to the appropriate underlying writer(s), although it does
|
// Flush flushes data to the appropriate underlying writer(s), although it does
|
||||||
@@ -250,7 +328,7 @@ func (r *responseWriter) Flush() {
|
|||||||
// we have to do it ourselves.
|
// we have to do it ourselves.
|
||||||
defer func() {
|
defer func() {
|
||||||
// because we also ignore the error returned by Write anyway
|
// because we also ignore the error returned by Write anyway
|
||||||
_ = r.bw.Flush()
|
_ = r.compressionWriter.Flush()
|
||||||
|
|
||||||
if rw, ok := r.rw.(http.Flusher); ok {
|
if rw, ok := r.rw.(http.Flusher); ok {
|
||||||
rw.Flush()
|
rw.Flush()
|
||||||
@@ -258,7 +336,7 @@ func (r *responseWriter) Flush() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// We empty whatever is left of the buffer that Write never took care of.
|
// We empty whatever is left of the buffer that Write never took care of.
|
||||||
n, err := r.bw.Write(r.buf)
|
n, err := r.compressionWriter.Write(r.buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -313,7 +391,7 @@ func (r *responseWriter) close() error {
|
|||||||
|
|
||||||
if len(r.buf) == 0 {
|
if len(r.buf) == 0 {
|
||||||
// If we got here we know compression has started, so we can safely flush on bw.
|
// If we got here we know compression has started, so we can safely flush on bw.
|
||||||
return r.bw.Close()
|
return r.compressionWriter.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// There is still data in the buffer, because we never reached minSize (to
|
// There is still data in the buffer, because we never reached minSize (to
|
||||||
@@ -331,16 +409,16 @@ func (r *responseWriter) close() error {
|
|||||||
|
|
||||||
// There is still data in the buffer, simply because Write did not take care of it all.
|
// There is still data in the buffer, simply because Write did not take care of it all.
|
||||||
// We flush it to the compressed writer.
|
// We flush it to the compressed writer.
|
||||||
n, err := r.bw.Write(r.buf)
|
n, err := r.compressionWriter.Write(r.buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.bw.Close()
|
r.compressionWriter.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if n < len(r.buf) {
|
if n < len(r.buf) {
|
||||||
r.bw.Close()
|
r.compressionWriter.Close()
|
||||||
return io.ErrShortWrite
|
return io.ErrShortWrite
|
||||||
}
|
}
|
||||||
return r.bw.Close()
|
return r.compressionWriter.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// parsedContentType is the parsed representation of one of the inputs to ContentTypes.
|
// parsedContentType is the parsed representation of one of the inputs to ContentTypes.
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user