mirror of
				https://github.com/containous/traefik.git
				synced 2025-10-30 20:24:28 +03:00 
			
		
		
		
	Compare commits
	
		
			42 Commits
		
	
	
		
			v2.11.30
			...
			v3.0.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 519ed8bde5 | ||
|  | 46a61ce9c8 | ||
|  | c57876c116 | ||
|  | 0d81fac3fc | ||
|  | db287c4d31 | ||
|  | 4d86668af3 | ||
|  | b93141992e | ||
|  | a3e4c85ec0 | ||
|  | bee86b5ac7 | ||
|  | 0ba51d62fa | ||
|  | 268d1edc8f | ||
|  | 580e7fa774 | ||
|  | 46c266661c | ||
|  | 61325d7b91 | ||
|  | 3f8aa13e68 | ||
|  | 08279047ae | ||
|  | 3dd4968c41 | ||
|  | ba1ca68977 | ||
|  | 56f7515ecd | ||
|  | 27c02b5a56 | ||
|  | 630de7481e | ||
|  | fadee5e87b | ||
|  | 67d9c8da0b | ||
|  | 1a1cfd1adc | ||
|  | 240fb871b6 | ||
|  | d131ef57da | ||
|  | 281fa25844 | ||
|  | bd3eaf4f5e | ||
|  | 7a6bfd3336 | ||
|  | 1b9873cae9 | ||
|  | e86f21ae7b | ||
|  | 194247caae | ||
|  | cd0654026a | ||
|  | b39ce8cc58 | ||
|  | 33f0aed5ea | ||
|  | 188ef84c4f | ||
|  | a5c520664a | ||
|  | 38d7011487 | ||
|  | 033fccccc7 | ||
|  | df99a9fb57 | ||
|  | d6b69e1347 | ||
|  | 4bd055cf97 | 
							
								
								
									
										8
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @@ -2,16 +2,16 @@ | ||||
| PLEASE READ THIS MESSAGE. | ||||
|  | ||||
| Documentation fixes or enhancements: | ||||
| - for Traefik v1: use branch v1.7 | ||||
| - for Traefik v2: use branch v2.9 | ||||
| - for Traefik v3: use branch master | ||||
|  | ||||
| Bug fixes: | ||||
| - for Traefik v1: use branch v1.7 | ||||
| - for Traefik v2: use branch v2.9 | ||||
| - for Traefik v3: use branch master | ||||
|  | ||||
| Enhancements: | ||||
| - for Traefik v1: we only accept bug fixes | ||||
| - for Traefik v2: use branch master | ||||
| - for Traefik v2: we only accept bug fixes | ||||
| - for Traefik v3: use branch master | ||||
|  | ||||
| HOW TO WRITE A GOOD PULL REQUEST? https://doc.traefik.io/traefik/contributing/submitting-pull-requests/ | ||||
|  | ||||
|   | ||||
| @@ -134,14 +134,6 @@ issues: | ||||
|   exclude: | ||||
|     - 'Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked' | ||||
|     - "should have a package comment, unless it's in another file for this package" | ||||
|     - 'SA1019: http.CloseNotifier has been deprecated' # FIXME must be fixed | ||||
|     - 'SA1019: cfg.SSLRedirect is deprecated' | ||||
|     - 'SA1019: cfg.SSLTemporaryRedirect is deprecated' | ||||
|     - 'SA1019: cfg.SSLHost is deprecated' | ||||
|     - 'SA1019: cfg.SSLForceHost is deprecated' | ||||
|     - 'SA1019: cfg.FeaturePolicy is deprecated' | ||||
|     - 'SA1019: c.Providers.ConsulCatalog.Namespace is deprecated' | ||||
|     - 'SA1019: c.Providers.Consul.Namespace is deprecated' | ||||
|   exclude-rules: | ||||
|     - path: '(.+)_test.go' | ||||
|       linters: | ||||
| @@ -162,7 +154,7 @@ issues: | ||||
|       text: "Function 'buildConstructor' has too many statements" | ||||
|       linters: | ||||
|         - funlen | ||||
|     - path: pkg/tracing/haystack/logger.go | ||||
|     - path: pkg/logs/haystack.go | ||||
|       linters: | ||||
|         - goprintffuncname | ||||
|     - path: pkg/tracing/tracing.go | ||||
|   | ||||
| @@ -64,7 +64,7 @@ blocks: | ||||
|         - name: GH_VERSION | ||||
|           value: 1.12.1 | ||||
|         - name: CODENAME | ||||
|           value: "banon" | ||||
|           value: "beaufort" | ||||
|         - name: IN_DOCKER | ||||
|           value: "" | ||||
|       prologue: | ||||
|   | ||||
							
								
								
									
										46
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,49 @@ | ||||
| ## [v3.0.0-beta1](https://github.com/traefik/traefik/tree/v3.0.0-beta1) (2022-12-05) | ||||
| [All Commits](https://github.com/traefik/traefik/compare/v2.9.0-rc1...v3.0.0-beta1) | ||||
|  | ||||
| **Enhancements:** | ||||
| - **[ecs]** Add option to keep only healthy ECS tasks ([#8027](https://github.com/traefik/traefik/pull/8027) by [Michampt](https://github.com/Michampt)) | ||||
| - **[healthcheck]** Support gRPC healthcheck ([#8583](https://github.com/traefik/traefik/pull/8583) by [jjacque](https://github.com/jjacque)) | ||||
| - **[healthcheck]** Add a status option to the service health check ([#9463](https://github.com/traefik/traefik/pull/9463) by [guoard](https://github.com/guoard)) | ||||
| - **[http]** Support custom headers when fetching configuration through HTTP ([#9421](https://github.com/traefik/traefik/pull/9421) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - **[logs,performance]** New logger for the Traefik logs ([#9515](https://github.com/traefik/traefik/pull/9515) by [ldez](https://github.com/ldez)) | ||||
| - **[logs,plugins]** Retry on plugin API calls ([#9530](https://github.com/traefik/traefik/pull/9530) by [ldez](https://github.com/ldez)) | ||||
| - **[logs,provider]** Improve provider logs ([#9562](https://github.com/traefik/traefik/pull/9562) by [ldez](https://github.com/ldez)) | ||||
| - **[logs]** Improve test logger assertions ([#9533](https://github.com/traefik/traefik/pull/9533) by [ldez](https://github.com/ldez)) | ||||
| - **[metrics]** Support gRPC and gRPC-Web protocol in metrics ([#9483](https://github.com/traefik/traefik/pull/9483) by [longit644](https://github.com/longit644)) | ||||
| - **[middleware,accesslogs]** Log TLS client subject ([#9285](https://github.com/traefik/traefik/pull/9285) by [xmessi](https://github.com/xmessi)) | ||||
| - **[middleware,metrics,tracing]** Add OpenTelemetry tracing and metrics support ([#8999](https://github.com/traefik/traefik/pull/8999) by [tomMoulard](https://github.com/tomMoulard)) | ||||
| - **[middleware]** Disable Content-Type auto-detection by default ([#9546](https://github.com/traefik/traefik/pull/9546) by [sdelicata](https://github.com/sdelicata)) | ||||
| - **[middleware]** Add gRPC-Web middleware ([#9451](https://github.com/traefik/traefik/pull/9451) by [juliens](https://github.com/juliens)) | ||||
| - **[middleware]** Add support for Brotli ([#9387](https://github.com/traefik/traefik/pull/9387) by [glinton](https://github.com/glinton)) | ||||
| - **[middleware]** Renaming IPWhiteList to IPAllowList  ([#9457](https://github.com/traefik/traefik/pull/9457) by [wxmbugu](https://github.com/wxmbugu)) | ||||
| - **[nomad]** Support multiple namespaces in the Nomad Provider ([#9332](https://github.com/traefik/traefik/pull/9332) by [0teh](https://github.com/0teh)) | ||||
| - **[rules]** Update routing syntax ([#9531](https://github.com/traefik/traefik/pull/9531) by [skwair](https://github.com/skwair)) | ||||
| - **[server]** Rework servers load-balancer to use the WRR ([#9431](https://github.com/traefik/traefik/pull/9431) by [juliens](https://github.com/juliens)) | ||||
| - **[server]** Allow default entrypoints definition ([#9100](https://github.com/traefik/traefik/pull/9100) by [jilleJr](https://github.com/jilleJr)) | ||||
| - **[tls,service]** Support SPIFFE mTLS between Traefik and Backend servers ([#9394](https://github.com/traefik/traefik/pull/9394) by [jlevesy](https://github.com/jlevesy)) | ||||
| - **[tls]** Add Tailscale certificate resolver ([#9237](https://github.com/traefik/traefik/pull/9237) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - **[tls]** Support SNI routing with Postgres STARTTLS connections ([#9377](https://github.com/traefik/traefik/pull/9377) by [rtribotte](https://github.com/rtribotte)) | ||||
| - Remove deprecated options ([#9527](https://github.com/traefik/traefik/pull/9527) by [sdelicata](https://github.com/sdelicata)) | ||||
|  | ||||
| **Bug fixes:** | ||||
| - **[logs]** Fix log level ([#9545](https://github.com/traefik/traefik/pull/9545) by [ldez](https://github.com/ldez)) | ||||
| - **[metrics]** Fix ServerUp metric ([#9534](https://github.com/traefik/traefik/pull/9534) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - **[tls,service]** Enforce default servers transport SPIFFE config ([#9444](https://github.com/traefik/traefik/pull/9444) by [jlevesy](https://github.com/jlevesy)) | ||||
|  | ||||
| **Documentation:** | ||||
| - **[metrics]** Update and publish official Grafana Dashboard ([#9493](https://github.com/traefik/traefik/pull/9493) by [mloiseleur](https://github.com/mloiseleur)) | ||||
|  | ||||
| **Misc:** | ||||
| - Merge branch v2.9 into master ([#9554](https://github.com/traefik/traefik/pull/9554) by [ldez](https://github.com/ldez)) | ||||
| - Merge branch v2.9 into master ([#9536](https://github.com/traefik/traefik/pull/9536) by [ldez](https://github.com/ldez)) | ||||
| - Merge branch v2.9 into master ([#9532](https://github.com/traefik/traefik/pull/9532) by [ldez](https://github.com/ldez)) | ||||
| - Merge branch v2.9 into master ([#9482](https://github.com/traefik/traefik/pull/9482) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - Merge branch v2.9 into master ([#9464](https://github.com/traefik/traefik/pull/9464) by [ldez](https://github.com/ldez)) | ||||
| - Merge branch v2.9 into master ([#9449](https://github.com/traefik/traefik/pull/9449) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - Merge branch v2.9 into master ([#9419](https://github.com/traefik/traefik/pull/9419) by [kevinpollet](https://github.com/kevinpollet)) | ||||
| - Merge branch v2.9 into master ([#9351](https://github.com/traefik/traefik/pull/9351) by [rtribotte](https://github.com/rtribotte)) | ||||
|  | ||||
| ## [v2.9.5](https://github.com/traefik/traefik/tree/v2.9.5) (2022-11-17) | ||||
| [All Commits](https://github.com/traefik/traefik/compare/v2.9.4...v2.9.5) | ||||
|  | ||||
|   | ||||
| @@ -57,7 +57,7 @@ _(But if you'd rather configure some of your routes manually, Traefik supports t | ||||
| - Provides HTTPS to your microservices by leveraging [Let's Encrypt](https://letsencrypt.org)  (wildcard certificates support) | ||||
| - Circuit breakers, retry | ||||
| - See the magic through its clean web UI | ||||
| - Websocket, HTTP/2, GRPC ready | ||||
| - Websocket, HTTP/2, gRPC ready | ||||
| - Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB) | ||||
| - Keeps access logs (JSON, CLF) | ||||
| - Fast | ||||
|   | ||||
							
								
								
									
										89
									
								
								cmd/traefik/logger.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								cmd/traefik/logger.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	stdlog "log" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/natefinch/lumberjack" | ||||
| 	"github.com/rs/zerolog" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/traefik/traefik/v2/pkg/config/static" | ||||
| 	"github.com/traefik/traefik/v2/pkg/logs" | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	// hide the first logs before the setup of the logger. | ||||
| 	zerolog.SetGlobalLevel(zerolog.ErrorLevel) | ||||
| } | ||||
|  | ||||
| func setupLogger(staticConfiguration *static.Configuration) { | ||||
| 	// configure log format | ||||
| 	w := getLogWriter(staticConfiguration) | ||||
|  | ||||
| 	// configure log level | ||||
| 	logLevel := getLogLevel(staticConfiguration) | ||||
|  | ||||
| 	// create logger | ||||
| 	logCtx := zerolog.New(w).With().Timestamp() | ||||
| 	if logLevel <= zerolog.DebugLevel { | ||||
| 		logCtx = logCtx.Caller() | ||||
| 	} | ||||
|  | ||||
| 	log.Logger = logCtx.Logger().Level(logLevel) | ||||
| 	zerolog.DefaultContextLogger = &log.Logger | ||||
| 	zerolog.SetGlobalLevel(logLevel) | ||||
|  | ||||
| 	// Global logrus replacement (related to lib like go-rancher-metadata, docker, etc.) | ||||
| 	logrus.StandardLogger().Out = logs.NoLevel(log.Logger, zerolog.DebugLevel) | ||||
|  | ||||
| 	// configure default standard log. | ||||
| 	stdlog.SetFlags(stdlog.Lshortfile | stdlog.LstdFlags) | ||||
| 	stdlog.SetOutput(logs.NoLevel(log.Logger, zerolog.DebugLevel)) | ||||
| } | ||||
|  | ||||
| func getLogWriter(staticConfiguration *static.Configuration) io.Writer { | ||||
| 	var w io.Writer = os.Stderr | ||||
|  | ||||
| 	if staticConfiguration.Log != nil && len(staticConfiguration.Log.FilePath) > 0 { | ||||
| 		_, _ = os.Create(staticConfiguration.Log.FilePath) | ||||
| 		w = &lumberjack.Logger{ | ||||
| 			Filename:   staticConfiguration.Log.FilePath, | ||||
| 			MaxSize:    staticConfiguration.Log.MaxSize, | ||||
| 			MaxBackups: staticConfiguration.Log.MaxBackups, | ||||
| 			MaxAge:     staticConfiguration.Log.MaxAge, | ||||
| 			Compress:   true, | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if staticConfiguration.Log == nil || staticConfiguration.Log.Format != "json" { | ||||
| 		w = zerolog.ConsoleWriter{ | ||||
| 			Out:        w, | ||||
| 			TimeFormat: time.RFC3339, | ||||
| 			NoColor:    staticConfiguration.Log != nil && (staticConfiguration.Log.NoColor || len(staticConfiguration.Log.FilePath) > 0), | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return w | ||||
| } | ||||
|  | ||||
| func getLogLevel(staticConfiguration *static.Configuration) zerolog.Level { | ||||
| 	levelStr := "error" | ||||
| 	if staticConfiguration.Log != nil && staticConfiguration.Log.Level != "" { | ||||
| 		levelStr = strings.ToLower(staticConfiguration.Log.Level) | ||||
| 	} | ||||
|  | ||||
| 	logLevel, err := zerolog.ParseLevel(strings.ToLower(levelStr)) | ||||
| 	if err != nil { | ||||
| 		log.Error().Err(err). | ||||
| 			Str("logLevel", levelStr). | ||||
| 			Msg("Unspecified or invalid log level, setting the level to default (ERROR)...") | ||||
|  | ||||
| 		logLevel = zerolog.ErrorLevel | ||||
| 	} | ||||
|  | ||||
| 	return logLevel | ||||
| } | ||||
| @@ -9,7 +9,6 @@ import ( | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"os/signal" | ||||
| 	"path/filepath" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| @@ -18,7 +17,9 @@ import ( | ||||
| 	"github.com/coreos/go-systemd/daemon" | ||||
| 	"github.com/go-acme/lego/v4/challenge" | ||||
| 	gokitmetrics "github.com/go-kit/kit/metrics" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/spiffe/go-spiffe/v2/workloadapi" | ||||
| 	"github.com/traefik/paerser/cli" | ||||
| 	"github.com/traefik/traefik/v2/cmd" | ||||
| 	"github.com/traefik/traefik/v2/cmd/healthcheck" | ||||
| @@ -28,12 +29,13 @@ import ( | ||||
| 	"github.com/traefik/traefik/v2/pkg/config/dynamic" | ||||
| 	"github.com/traefik/traefik/v2/pkg/config/runtime" | ||||
| 	"github.com/traefik/traefik/v2/pkg/config/static" | ||||
| 	"github.com/traefik/traefik/v2/pkg/log" | ||||
| 	"github.com/traefik/traefik/v2/pkg/logs" | ||||
| 	"github.com/traefik/traefik/v2/pkg/metrics" | ||||
| 	"github.com/traefik/traefik/v2/pkg/middlewares/accesslog" | ||||
| 	"github.com/traefik/traefik/v2/pkg/provider/acme" | ||||
| 	"github.com/traefik/traefik/v2/pkg/provider/aggregator" | ||||
| 	"github.com/traefik/traefik/v2/pkg/provider/hub" | ||||
| 	"github.com/traefik/traefik/v2/pkg/provider/tailscale" | ||||
| 	"github.com/traefik/traefik/v2/pkg/provider/traefik" | ||||
| 	"github.com/traefik/traefik/v2/pkg/safe" | ||||
| 	"github.com/traefik/traefik/v2/pkg/server" | ||||
| @@ -44,7 +46,6 @@ import ( | ||||
| 	"github.com/traefik/traefik/v2/pkg/tracing/jaeger" | ||||
| 	"github.com/traefik/traefik/v2/pkg/types" | ||||
| 	"github.com/traefik/traefik/v2/pkg/version" | ||||
| 	"github.com/vulcand/oxy/v2/roundrobin" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| @@ -86,27 +87,24 @@ Complete documentation is available at https://traefik.io`, | ||||
| } | ||||
|  | ||||
| func runCmd(staticConfiguration *static.Configuration) error { | ||||
| 	configureLogging(staticConfiguration) | ||||
| 	setupLogger(staticConfiguration) | ||||
|  | ||||
| 	http.DefaultTransport.(*http.Transport).Proxy = http.ProxyFromEnvironment | ||||
|  | ||||
| 	if err := roundrobin.SetDefaultWeight(0); err != nil { | ||||
| 		log.WithoutContext().Errorf("Could not set round robin default weight: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	staticConfiguration.SetEffectiveConfiguration() | ||||
| 	if err := staticConfiguration.ValidateConfiguration(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	log.WithoutContext().Infof("Traefik version %s built on %s", version.Version, version.BuildDate) | ||||
| 	log.Info().Str("version", version.Version). | ||||
| 		Msgf("Traefik version %s built on %s", version.Version, version.BuildDate) | ||||
|  | ||||
| 	jsonConf, err := json.Marshal(staticConfiguration) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().Errorf("Could not marshal static configuration: %v", err) | ||||
| 		log.WithoutContext().Debugf("Static configuration loaded [struct] %#v", staticConfiguration) | ||||
| 		log.Error().Err(err).Msg("Could not marshal static configuration") | ||||
| 		log.Debug().Interface("staticConfiguration", staticConfiguration).Msg("Static configuration loaded [struct]") | ||||
| 	} else { | ||||
| 		log.WithoutContext().Debugf("Static configuration loaded %s", string(jsonConf)) | ||||
| 		log.Debug().RawJSON("staticConfiguration", jsonConf).Msg("Static configuration loaded [json]") | ||||
| 	} | ||||
|  | ||||
| 	if staticConfiguration.Global.CheckNewVersion { | ||||
| @@ -131,16 +129,16 @@ func runCmd(staticConfiguration *static.Configuration) error { | ||||
|  | ||||
| 	sent, err := daemon.SdNotify(false, "READY=1") | ||||
| 	if !sent && err != nil { | ||||
| 		log.WithoutContext().Errorf("Failed to notify: %v", err) | ||||
| 		log.Error().Err(err).Msg("Failed to notify") | ||||
| 	} | ||||
|  | ||||
| 	t, err := daemon.SdWatchdogEnabled(false) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().Errorf("Could not enable Watchdog: %v", err) | ||||
| 		log.Error().Err(err).Msg("Could not enable Watchdog") | ||||
| 	} else if t != 0 { | ||||
| 		// Send a ping each half time given | ||||
| 		t /= 2 | ||||
| 		log.WithoutContext().Infof("Watchdog activated with timer duration %s", t) | ||||
| 		log.Info().Msgf("Watchdog activated with timer duration %s", t) | ||||
| 		safe.Go(func() { | ||||
| 			tick := time.Tick(t) | ||||
| 			for range tick { | ||||
| @@ -151,17 +149,17 @@ func runCmd(staticConfiguration *static.Configuration) error { | ||||
|  | ||||
| 				if staticConfiguration.Ping == nil || errHealthCheck == nil { | ||||
| 					if ok, _ := daemon.SdNotify(false, "WATCHDOG=1"); !ok { | ||||
| 						log.WithoutContext().Error("Fail to tick watchdog") | ||||
| 						log.Error().Msg("Fail to tick watchdog") | ||||
| 					} | ||||
| 				} else { | ||||
| 					log.WithoutContext().Error(errHealthCheck) | ||||
| 					log.Error().Err(errHealthCheck).Send() | ||||
| 				} | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	svr.Wait() | ||||
| 	log.WithoutContext().Info("Shutting down") | ||||
| 	log.Info().Msg("Shutting down") | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @@ -190,6 +188,10 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err | ||||
|  | ||||
| 	acmeProviders := initACMEProvider(staticConfiguration, &providerAggregator, tlsManager, httpChallengeProvider, tlsChallengeProvider) | ||||
|  | ||||
| 	// Tailscale | ||||
|  | ||||
| 	tsProviders := initTailscaleProviders(staticConfiguration, &providerAggregator) | ||||
|  | ||||
| 	// Entrypoints | ||||
|  | ||||
| 	serverEntryPointsTCP, err := server.NewTCPEntryPoints(staticConfiguration.EntryPoints, staticConfiguration.HostResolver) | ||||
| @@ -202,15 +204,11 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	if staticConfiguration.Pilot != nil { | ||||
| 		log.WithoutContext().Warn("Traefik Pilot has been removed.") | ||||
| 	} | ||||
|  | ||||
| 	// Plugins | ||||
|  | ||||
| 	pluginBuilder, err := createPluginBuilder(staticConfiguration) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().WithError(err).Error("Plugins are disabled because an error has occurred.") | ||||
| 		log.Error().Err(err).Msg("Plugins are disabled because an error has occurred.") | ||||
| 	} | ||||
|  | ||||
| 	// Providers plugins | ||||
| @@ -251,7 +249,26 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err | ||||
|  | ||||
| 	// Service manager factory | ||||
|  | ||||
| 	roundTripperManager := service.NewRoundTripperManager() | ||||
| 	var spiffeX509Source *workloadapi.X509Source | ||||
| 	if staticConfiguration.Spiffe != nil && staticConfiguration.Spiffe.WorkloadAPIAddr != "" { | ||||
| 		log.Info().Str("workloadAPIAddr", staticConfiguration.Spiffe.WorkloadAPIAddr). | ||||
| 			Msg("Waiting on SPIFFE SVID delivery") | ||||
|  | ||||
| 		spiffeX509Source, err = workloadapi.NewX509Source( | ||||
| 			ctx, | ||||
| 			workloadapi.WithClientOptions( | ||||
| 				workloadapi.WithAddr( | ||||
| 					staticConfiguration.Spiffe.WorkloadAPIAddr, | ||||
| 				), | ||||
| 			), | ||||
| 		) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("unable to create SPIFFE x509 source: %w", err) | ||||
| 		} | ||||
| 		log.Info().Msg("Successfully obtained SPIFFE SVID.") | ||||
| 	} | ||||
|  | ||||
| 	roundTripperManager := service.NewRoundTripperManager(spiffeX509Source) | ||||
| 	acmeHTTPHandler := getHTTPChallengeHandler(acmeProviders, httpChallengeProvider) | ||||
| 	managerFactory := service.NewManagerFactory(*staticConfiguration, routinesPool, metricsRegistry, roundTripperManager, acmeHTTPHandler) | ||||
|  | ||||
| @@ -311,13 +328,22 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err | ||||
| 	// TLS challenge | ||||
| 	watcher.AddListener(tlsChallengeProvider.ListenConfiguration) | ||||
|  | ||||
| 	// ACME | ||||
| 	// Certificate Resolvers | ||||
|  | ||||
| 	resolverNames := map[string]struct{}{} | ||||
|  | ||||
| 	// ACME | ||||
| 	for _, p := range acmeProviders { | ||||
| 		resolverNames[p.ResolverName] = struct{}{} | ||||
| 		watcher.AddListener(p.ListenConfiguration) | ||||
| 	} | ||||
|  | ||||
| 	// Tailscale | ||||
| 	for _, p := range tsProviders { | ||||
| 		resolverNames[p.ResolverName] = struct{}{} | ||||
| 		watcher.AddListener(p.HandleConfigUpdate) | ||||
| 	} | ||||
|  | ||||
| 	// Certificate resolver logs | ||||
| 	watcher.AddListener(func(config dynamic.Configuration) { | ||||
| 		for rtName, rt := range config.HTTP.Routers { | ||||
| @@ -329,7 +355,8 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err | ||||
| 				// "traefik-hub" is an allowed certificate resolver name in a Traefik Hub Experimental feature context. | ||||
| 				// It is used to activate its own certificate resolution, even though it is not a "classical" traefik certificate resolver. | ||||
| 				(staticConfiguration.Hub == nil || rt.TLS.CertResolver != "traefik-hub") { | ||||
| 				log.WithoutContext().Errorf("the router %s uses a non-existent resolver: %s", rtName, rt.TLS.CertResolver) | ||||
| 				log.Error().Err(err).Str(logs.RouterName, rtName).Str("certificateResolver", rt.TLS.CertResolver). | ||||
| 					Msg("Router uses a non-existent certificate resolver") | ||||
| 			} | ||||
| 		} | ||||
| 	}) | ||||
| @@ -350,8 +377,24 @@ func getHTTPChallengeHandler(acmeProviders []*acme.Provider, httpChallengeProvid | ||||
|  | ||||
| func getDefaultsEntrypoints(staticConfiguration *static.Configuration) []string { | ||||
| 	var defaultEntryPoints []string | ||||
|  | ||||
| 	// Determines if at least one EntryPoint is configured to be used by default. | ||||
| 	var hasDefinedDefaults bool | ||||
| 	for _, ep := range staticConfiguration.EntryPoints { | ||||
| 		if ep.AsDefault { | ||||
| 			hasDefinedDefaults = true | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	for name, cfg := range staticConfiguration.EntryPoints { | ||||
| 		// Traefik Hub entryPoint should not be part of the set of default entryPoints. | ||||
| 		// By default all entrypoints are considered. | ||||
| 		// If at least one is flagged, then only flagged entrypoints are included. | ||||
| 		if hasDefinedDefaults && !cfg.AsDefault { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		// Traefik Hub entryPoint should not be used as a default entryPoint. | ||||
| 		if hub.APIEntrypoint == name || hub.TunnelEntrypoint == name { | ||||
| 			continue | ||||
| 		} | ||||
| @@ -359,7 +402,7 @@ func getDefaultsEntrypoints(staticConfiguration *static.Configuration) []string | ||||
| 		protocol, err := cfg.GetProtocol() | ||||
| 		if err != nil { | ||||
| 			// Should never happen because Traefik should not start if protocol is invalid. | ||||
| 			log.WithoutContext().Errorf("Invalid protocol: %v", err) | ||||
| 			log.Error().Err(err).Msg("Invalid protocol") | ||||
| 		} | ||||
|  | ||||
| 		if protocol != "udp" && name != static.DefaultInternalEntryPointName { | ||||
| @@ -382,7 +425,7 @@ func switchRouter(routerFactory *server.RouterFactory, serverEntryPointsTCP serv | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // initACMEProvider creates an acme provider from the ACME part of globalConfiguration. | ||||
| // initACMEProvider creates and registers acme.Provider instances corresponding to the configured ACME certificate resolvers. | ||||
| func initACMEProvider(c *static.Configuration, providerAggregator *aggregator.ProviderAggregator, tlsManager *traefiktls.Manager, httpChallengeProvider, tlsChallengeProvider challenge.Provider) []*acme.Provider { | ||||
| 	localStores := map[string]*acme.LocalStore{} | ||||
|  | ||||
| @@ -405,7 +448,7 @@ func initACMEProvider(c *static.Configuration, providerAggregator *aggregator.Pr | ||||
| 		} | ||||
|  | ||||
| 		if err := providerAggregator.AddProvider(p); err != nil { | ||||
| 			log.WithoutContext().Errorf("The ACME resolver %q is skipped from the resolvers list because: %v", name, err) | ||||
| 			log.Error().Err(err).Str("resolver", name).Msg("The ACME resolve is skipped from the resolvers list") | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| @@ -419,6 +462,27 @@ func initACMEProvider(c *static.Configuration, providerAggregator *aggregator.Pr | ||||
| 	return resolvers | ||||
| } | ||||
|  | ||||
| // initTailscaleProviders creates and registers tailscale.Provider instances corresponding to the configured Tailscale certificate resolvers. | ||||
| func initTailscaleProviders(cfg *static.Configuration, providerAggregator *aggregator.ProviderAggregator) []*tailscale.Provider { | ||||
| 	var providers []*tailscale.Provider | ||||
| 	for name, resolver := range cfg.CertificatesResolvers { | ||||
| 		if resolver.Tailscale == nil { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		tsProvider := &tailscale.Provider{ResolverName: name} | ||||
|  | ||||
| 		if err := providerAggregator.AddProvider(tsProvider); err != nil { | ||||
| 			log.Error().Err(err).Str(logs.ProviderName, name).Msg("Unable to create Tailscale provider") | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		providers = append(providers, tsProvider) | ||||
| 	} | ||||
|  | ||||
| 	return providers | ||||
| } | ||||
|  | ||||
| func registerMetricClients(metricsConfig *types.Metrics) []metrics.Registry { | ||||
| 	if metricsConfig == nil { | ||||
| 		return nil | ||||
| @@ -427,42 +491,70 @@ func registerMetricClients(metricsConfig *types.Metrics) []metrics.Registry { | ||||
| 	var registries []metrics.Registry | ||||
|  | ||||
| 	if metricsConfig.Prometheus != nil { | ||||
| 		ctx := log.With(context.Background(), log.Str(log.MetricsProviderName, "prometheus")) | ||||
| 		prometheusRegister := metrics.RegisterPrometheus(ctx, metricsConfig.Prometheus) | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "prometheus").Logger() | ||||
|  | ||||
| 		prometheusRegister := metrics.RegisterPrometheus(logger.WithContext(context.Background()), metricsConfig.Prometheus) | ||||
| 		if prometheusRegister != nil { | ||||
| 			registries = append(registries, prometheusRegister) | ||||
| 			log.FromContext(ctx).Debug("Configured Prometheus metrics") | ||||
| 			logger.Debug().Msg("Configured Prometheus metrics") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if metricsConfig.Datadog != nil { | ||||
| 		ctx := log.With(context.Background(), log.Str(log.MetricsProviderName, "datadog")) | ||||
| 		registries = append(registries, metrics.RegisterDatadog(ctx, metricsConfig.Datadog)) | ||||
| 		log.FromContext(ctx).Debugf("Configured Datadog metrics: pushing to %s once every %s", | ||||
| 			metricsConfig.Datadog.Address, metricsConfig.Datadog.PushInterval) | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "datadog").Logger() | ||||
|  | ||||
| 		registries = append(registries, metrics.RegisterDatadog(logger.WithContext(context.Background()), metricsConfig.Datadog)) | ||||
| 		logger.Debug(). | ||||
| 			Str("address", metricsConfig.Datadog.Address). | ||||
| 			Str("pushInterval", metricsConfig.Datadog.PushInterval.String()). | ||||
| 			Msgf("Configured Datadog metrics") | ||||
| 	} | ||||
|  | ||||
| 	if metricsConfig.StatsD != nil { | ||||
| 		ctx := log.With(context.Background(), log.Str(log.MetricsProviderName, "statsd")) | ||||
| 		registries = append(registries, metrics.RegisterStatsd(ctx, metricsConfig.StatsD)) | ||||
| 		log.FromContext(ctx).Debugf("Configured StatsD metrics: pushing to %s once every %s", | ||||
| 			metricsConfig.StatsD.Address, metricsConfig.StatsD.PushInterval) | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "statsd").Logger() | ||||
|  | ||||
| 		registries = append(registries, metrics.RegisterStatsd(logger.WithContext(context.Background()), metricsConfig.StatsD)) | ||||
| 		logger.Debug(). | ||||
| 			Str("address", metricsConfig.StatsD.Address). | ||||
| 			Str("pushInterval", metricsConfig.StatsD.PushInterval.String()). | ||||
| 			Msg("Configured StatsD metrics") | ||||
| 	} | ||||
|  | ||||
| 	if metricsConfig.InfluxDB != nil { | ||||
| 		ctx := log.With(context.Background(), log.Str(log.MetricsProviderName, "influxdb")) | ||||
| 		registries = append(registries, metrics.RegisterInfluxDB(ctx, metricsConfig.InfluxDB)) | ||||
| 		log.FromContext(ctx).Debugf("Configured InfluxDB metrics: pushing to %s once every %s", | ||||
| 			metricsConfig.InfluxDB.Address, metricsConfig.InfluxDB.PushInterval) | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "influxdb").Logger() | ||||
|  | ||||
| 		registries = append(registries, metrics.RegisterInfluxDB(logger.WithContext(context.Background()), metricsConfig.InfluxDB)) | ||||
| 		logger.Debug(). | ||||
| 			Str("address", metricsConfig.InfluxDB.Address). | ||||
| 			Str("pushInterval", metricsConfig.InfluxDB.PushInterval.String()). | ||||
| 			Msg("Configured InfluxDB metrics") | ||||
| 	} | ||||
|  | ||||
| 	if metricsConfig.InfluxDB2 != nil { | ||||
| 		ctx := log.With(context.Background(), log.Str(log.MetricsProviderName, "influxdb2")) | ||||
| 		influxDB2Register := metrics.RegisterInfluxDB2(ctx, metricsConfig.InfluxDB2) | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "influxdb2").Logger() | ||||
|  | ||||
| 		influxDB2Register := metrics.RegisterInfluxDB2(logger.WithContext(context.Background()), metricsConfig.InfluxDB2) | ||||
| 		if influxDB2Register != nil { | ||||
| 			registries = append(registries, influxDB2Register) | ||||
| 			log.FromContext(ctx).Debugf("Configured InfluxDB v2 metrics: pushing to %s (%s org/%s bucket) once every %s", | ||||
| 				metricsConfig.InfluxDB2.Address, metricsConfig.InfluxDB2.Org, metricsConfig.InfluxDB2.Bucket, metricsConfig.InfluxDB2.PushInterval) | ||||
| 			logger.Debug(). | ||||
| 				Str("address", metricsConfig.InfluxDB2.Address). | ||||
| 				Str("bucket", metricsConfig.InfluxDB2.Bucket). | ||||
| 				Str("organization", metricsConfig.InfluxDB2.Org). | ||||
| 				Str("pushInterval", metricsConfig.InfluxDB2.PushInterval.String()). | ||||
| 				Msg("Configured InfluxDB v2 metrics") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if metricsConfig.OpenTelemetry != nil { | ||||
| 		logger := log.With().Str(logs.MetricsProviderName, "openTelemetry").Logger() | ||||
|  | ||||
| 		openTelemetryRegistry := metrics.RegisterOpenTelemetry(logger.WithContext(context.Background()), metricsConfig.OpenTelemetry) | ||||
| 		if openTelemetryRegistry != nil { | ||||
| 			registries = append(registries, openTelemetryRegistry) | ||||
| 			logger.Debug(). | ||||
| 				Str("address", metricsConfig.OpenTelemetry.Address). | ||||
| 				Str("pushInterval", metricsConfig.OpenTelemetry.PushInterval.String()). | ||||
| 				Msg("Configured OpenTelemetry metrics") | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -490,7 +582,7 @@ func setupAccessLog(conf *types.AccessLog) *accesslog.Handler { | ||||
|  | ||||
| 	accessLoggerMiddleware, err := accesslog.NewHandler(conf) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().Warnf("Unable to create access logger: %v", err) | ||||
| 		log.Warn().Err(err).Msg("Unable to create access logger") | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| @@ -510,7 +602,7 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	if conf.Zipkin != nil { | ||||
| 		if backend != nil { | ||||
| 			log.WithoutContext().Error("Multiple tracing backend are not supported: cannot create Zipkin backend.") | ||||
| 			log.Error().Msg("Multiple tracing backend are not supported: cannot create Zipkin backend.") | ||||
| 		} else { | ||||
| 			backend = conf.Zipkin | ||||
| 		} | ||||
| @@ -518,7 +610,7 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	if conf.Datadog != nil { | ||||
| 		if backend != nil { | ||||
| 			log.WithoutContext().Error("Multiple tracing backend are not supported: cannot create Datadog backend.") | ||||
| 			log.Error().Msg("Multiple tracing backend are not supported: cannot create Datadog backend.") | ||||
| 		} else { | ||||
| 			backend = conf.Datadog | ||||
| 		} | ||||
| @@ -526,7 +618,7 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	if conf.Instana != nil { | ||||
| 		if backend != nil { | ||||
| 			log.WithoutContext().Error("Multiple tracing backend are not supported: cannot create Instana backend.") | ||||
| 			log.Error().Msg("Multiple tracing backend are not supported: cannot create Instana backend.") | ||||
| 		} else { | ||||
| 			backend = conf.Instana | ||||
| 		} | ||||
| @@ -534,7 +626,7 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	if conf.Haystack != nil { | ||||
| 		if backend != nil { | ||||
| 			log.WithoutContext().Error("Multiple tracing backend are not supported: cannot create Haystack backend.") | ||||
| 			log.Error().Msg("Multiple tracing backend are not supported: cannot create Haystack backend.") | ||||
| 		} else { | ||||
| 			backend = conf.Haystack | ||||
| 		} | ||||
| @@ -542,14 +634,22 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	if conf.Elastic != nil { | ||||
| 		if backend != nil { | ||||
| 			log.WithoutContext().Error("Multiple tracing backend are not supported: cannot create Elastic backend.") | ||||
| 			log.Error().Msg("Multiple tracing backend are not supported: cannot create Elastic backend.") | ||||
| 		} else { | ||||
| 			backend = conf.Elastic | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if conf.OpenTelemetry != nil { | ||||
| 		if backend != nil { | ||||
| 			log.Error().Msg("Tracing backends are all mutually exclusive: cannot create OpenTelemetry backend.") | ||||
| 		} else { | ||||
| 			backend = conf.OpenTelemetry | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if backend == nil { | ||||
| 		log.WithoutContext().Debug("Could not initialize tracing, using Jaeger by default") | ||||
| 		log.Debug().Msg("Could not initialize tracing, using Jaeger by default") | ||||
| 		defaultBackend := &jaeger.Config{} | ||||
| 		defaultBackend.SetDefaults() | ||||
| 		backend = defaultBackend | ||||
| @@ -557,65 +657,12 @@ func setupTracing(conf *static.Tracing) *tracing.Tracing { | ||||
|  | ||||
| 	tracer, err := tracing.NewTracing(conf.ServiceName, conf.SpanNameLimit, backend) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().Warnf("Unable to create tracer: %v", err) | ||||
| 		log.Warn().Err(err).Msg("Unable to create tracer") | ||||
| 		return nil | ||||
| 	} | ||||
| 	return tracer | ||||
| } | ||||
|  | ||||
| func configureLogging(staticConfiguration *static.Configuration) { | ||||
| 	// configure default log flags | ||||
| 	stdlog.SetFlags(stdlog.Lshortfile | stdlog.LstdFlags) | ||||
|  | ||||
| 	// configure log level | ||||
| 	// an explicitly defined log level always has precedence. if none is | ||||
| 	// given and debug mode is disabled, the default is ERROR, and DEBUG | ||||
| 	// otherwise. | ||||
| 	levelStr := "error" | ||||
| 	if staticConfiguration.Log != nil && staticConfiguration.Log.Level != "" { | ||||
| 		levelStr = strings.ToLower(staticConfiguration.Log.Level) | ||||
| 	} | ||||
|  | ||||
| 	level, err := logrus.ParseLevel(levelStr) | ||||
| 	if err != nil { | ||||
| 		log.WithoutContext().Errorf("Error getting level: %v", err) | ||||
| 	} | ||||
| 	log.SetLevel(level) | ||||
|  | ||||
| 	var logFile string | ||||
| 	if staticConfiguration.Log != nil && len(staticConfiguration.Log.FilePath) > 0 { | ||||
| 		logFile = staticConfiguration.Log.FilePath | ||||
| 	} | ||||
|  | ||||
| 	// configure log format | ||||
| 	var formatter logrus.Formatter | ||||
| 	if staticConfiguration.Log != nil && staticConfiguration.Log.Format == "json" { | ||||
| 		formatter = &logrus.JSONFormatter{} | ||||
| 	} else { | ||||
| 		disableColors := len(logFile) > 0 | ||||
| 		formatter = &logrus.TextFormatter{DisableColors: disableColors, FullTimestamp: true, DisableSorting: true} | ||||
| 	} | ||||
| 	log.SetFormatter(formatter) | ||||
|  | ||||
| 	if len(logFile) > 0 { | ||||
| 		dir := filepath.Dir(logFile) | ||||
|  | ||||
| 		if err := os.MkdirAll(dir, 0o755); err != nil { | ||||
| 			log.WithoutContext().Errorf("Failed to create log path %s: %s", dir, err) | ||||
| 		} | ||||
|  | ||||
| 		err = log.OpenFile(logFile) | ||||
| 		logrus.RegisterExitHandler(func() { | ||||
| 			if err := log.CloseFile(); err != nil { | ||||
| 				log.WithoutContext().Errorf("Error while closing log: %v", err) | ||||
| 			} | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			log.WithoutContext().Errorf("Error while opening log file %s: %v", logFile, err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func checkNewVersion() { | ||||
| 	ticker := time.Tick(24 * time.Hour) | ||||
| 	safe.Go(func() { | ||||
| @@ -626,16 +673,16 @@ func checkNewVersion() { | ||||
| } | ||||
|  | ||||
| func stats(staticConfiguration *static.Configuration) { | ||||
| 	logger := log.WithoutContext() | ||||
| 	logger := log.Info() | ||||
|  | ||||
| 	if staticConfiguration.Global.SendAnonymousUsage { | ||||
| 		logger.Info(`Stats collection is enabled.`) | ||||
| 		logger.Info(`Many thanks for contributing to Traefik's improvement by allowing us to receive anonymous information from your configuration.`) | ||||
| 		logger.Info(`Help us improve Traefik by leaving this feature on :)`) | ||||
| 		logger.Info(`More details on: https://doc.traefik.io/traefik/contributing/data-collection/`) | ||||
| 		logger.Msg(`Stats collection is enabled.`) | ||||
| 		logger.Msg(`Many thanks for contributing to Traefik's improvement by allowing us to receive anonymous information from your configuration.`) | ||||
| 		logger.Msg(`Help us improve Traefik by leaving this feature on :)`) | ||||
| 		logger.Msg(`More details on: https://doc.traefik.io/traefik/contributing/data-collection/`) | ||||
| 		collect(staticConfiguration) | ||||
| 	} else { | ||||
| 		logger.Info(` | ||||
| 		logger.Msg(` | ||||
| Stats collection is disabled. | ||||
| Help us improve Traefik by turning this feature on :) | ||||
| More details on: https://doc.traefik.io/traefik/contributing/data-collection/ | ||||
| @@ -648,7 +695,7 @@ func collect(staticConfiguration *static.Configuration) { | ||||
| 	safe.Go(func() { | ||||
| 		for time.Sleep(10 * time.Minute); ; <-ticker { | ||||
| 			if err := collector.Collect(staticConfiguration); err != nil { | ||||
| 				log.WithoutContext().Debug(err) | ||||
| 				log.Debug().Err(err).Send() | ||||
| 			} | ||||
| 		} | ||||
| 	}) | ||||
|   | ||||
| @@ -9,6 +9,7 @@ import ( | ||||
| 	"github.com/go-kit/kit/metrics" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"github.com/traefik/traefik/v2/pkg/config/static" | ||||
| ) | ||||
|  | ||||
| // FooCert is a PEM-encoded TLS cert. | ||||
| @@ -114,3 +115,79 @@ func TestAppendCertMetric(t *testing.T) { | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestGetDefaultsEntrypoints(t *testing.T) { | ||||
| 	testCases := []struct { | ||||
| 		desc        string | ||||
| 		entrypoints static.EntryPoints | ||||
| 		expected    []string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			desc: "Skips special names", | ||||
| 			entrypoints: map[string]*static.EntryPoint{ | ||||
| 				"web": { | ||||
| 					Address: ":80", | ||||
| 				}, | ||||
| 				"traefik": { | ||||
| 					Address: ":8080", | ||||
| 				}, | ||||
| 				"traefikhub-api": { | ||||
| 					Address: ":9900", | ||||
| 				}, | ||||
| 				"traefikhub-tunl": { | ||||
| 					Address: ":9901", | ||||
| 				}, | ||||
| 			}, | ||||
| 			expected: []string{"web"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			desc: "Two EntryPoints not attachable", | ||||
| 			entrypoints: map[string]*static.EntryPoint{ | ||||
| 				"web": { | ||||
| 					Address: ":80", | ||||
| 				}, | ||||
| 				"websecure": { | ||||
| 					Address: ":443", | ||||
| 				}, | ||||
| 			}, | ||||
| 			expected: []string{"web", "websecure"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			desc: "Two EntryPoints only one attachable", | ||||
| 			entrypoints: map[string]*static.EntryPoint{ | ||||
| 				"web": { | ||||
| 					Address: ":80", | ||||
| 				}, | ||||
| 				"websecure": { | ||||
| 					Address:   ":443", | ||||
| 					AsDefault: true, | ||||
| 				}, | ||||
| 			}, | ||||
| 			expected: []string{"websecure"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			desc: "Two attachable EntryPoints", | ||||
| 			entrypoints: map[string]*static.EntryPoint{ | ||||
| 				"web": { | ||||
| 					Address:   ":80", | ||||
| 					AsDefault: true, | ||||
| 				}, | ||||
| 				"websecure": { | ||||
| 					Address:   ":443", | ||||
| 					AsDefault: true, | ||||
| 				}, | ||||
| 			}, | ||||
| 			expected: []string{"web", "websecure"}, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	for _, test := range testCases { | ||||
| 		t.Run(test.desc, func(t *testing.T) { | ||||
| 			actual := getDefaultsEntrypoints(&static.Configuration{ | ||||
| 				EntryPoints: test.entrypoints, | ||||
| 			}) | ||||
|  | ||||
| 			assert.ElementsMatch(t, test.expected, actual) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 58 KiB | 
| @@ -2,27 +2,4 @@ | ||||
|  | ||||
| This page is maintained and updated periodically to reflect our roadmap and any decisions around feature deprecation. | ||||
|  | ||||
| | Feature                                                     | Deprecated | End of Support | Removal | | ||||
| |-------------------------------------------------------------|------------|----------------|---------| | ||||
| | [Pilot](#pilot)                                             | 2.7        | 2.8            | 2.9     | | ||||
| | [Consul Enterprise Namespace](#consul-enterprise-namespace) | 2.8        | N/A            | 3.0     | | ||||
| | [TLS 1.0 and 1.1 Support](#tls-10-and-11)                   | N/A        | 2.8            | N/A     | | ||||
|  | ||||
| ## Impact | ||||
|  | ||||
| ### Pilot | ||||
|  | ||||
| Metrics will continue to function normally up to 2.8, when they will be disabled.   | ||||
| In 2.9, the Pilot platform and all Traefik integration code will be permanently removed. | ||||
|  | ||||
| Starting on 2.7 the pilot token will not be a requirement anymore for plugins.   | ||||
| Since 2.8, a [new plugin catalog](https://plugins.traefik.io) is available, decoupled from Pilot. | ||||
|  | ||||
| ### Consul Enterprise Namespace | ||||
|  | ||||
| Starting on 2.8 the `namespace` option of Consul and Consul Catalog providers is deprecated,  | ||||
| please use the `namespaces` options instead.   | ||||
|  | ||||
| ### TLS 1.0 and 1.1 | ||||
|  | ||||
| Starting on 2.8 the default TLS options will use the minimum version of TLS 1.2. Of course, it can still be overridden with custom configuration.   | ||||
| There is no feature deprecation in Traefik v3 for now. | ||||
|   | ||||
| @@ -79,7 +79,7 @@ traefik --help | ||||
| # or | ||||
|  | ||||
| docker run traefik[:version] --help | ||||
| # ex: docker run traefik:v2.9 --help | ||||
| # ex: docker run traefik:v3.0 --help | ||||
| ``` | ||||
|  | ||||
| All available arguments can also be found [here](../reference/static-configuration/cli.md). | ||||
|   | ||||
| @@ -21,7 +21,7 @@ Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and | ||||
|  | ||||
| ```bash | ||||
| docker run -d -p 8080:8080 -p 80:80 \ | ||||
|     -v $PWD/traefik.yml:/etc/traefik/traefik.yml traefik:v2.9 | ||||
|     -v $PWD/traefik.yml:/etc/traefik/traefik.yml traefik:v3.0 | ||||
| ``` | ||||
|  | ||||
| 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 | ||||
|  | ||||
|     * Prefer a fixed version than the latest that could be an unexpected version. | ||||
|     ex: `traefik:v2.9` | ||||
|     ex: `traefik:v3.0` | ||||
|     * 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. | ||||
|  | ||||
|   | ||||
| @@ -130,7 +130,7 @@ spec: | ||||
|       serviceAccountName: traefik-account | ||||
|       containers: | ||||
|         - name: traefik | ||||
|           image: traefik:v2.9 | ||||
|           image: traefik:v3.0 | ||||
|           args: | ||||
|             - --api.insecure | ||||
|             - --providers.kubernetesingress | ||||
|   | ||||
| @@ -20,7 +20,7 @@ version: '3' | ||||
| services: | ||||
|   reverse-proxy: | ||||
|     # The official v2 Traefik docker image | ||||
|     image: traefik:v2.9 | ||||
|     image: traefik:v3.0 | ||||
|     # Enables the web UI and tells Traefik to listen to docker | ||||
|     command: --api.insecure=true --providers.docker | ||||
|     ports: | ||||
|   | ||||
							
								
								
									
										54
									
								
								docs/content/https/spiffe.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								docs/content/https/spiffe.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| --- | ||||
| title: "Traefik SPIFFE Documentation" | ||||
| description: "Learn how to configure Traefik to use SPIFFE. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # SPIFFE | ||||
|  | ||||
| Secure the backend connection with SPIFFE. | ||||
| {: .subtitle } | ||||
|  | ||||
| [SPIFFE](https://spiffe.io/docs/latest/spiffe-about/overview/) (Secure Production Identity Framework For Everyone),  | ||||
| provides a secure identity in the form of a specially crafted X.509 certificate,  | ||||
| to every workload in an environment. | ||||
|  | ||||
| Traefik is able to connect to the Workload API to obtain an x509-SVID used to secure the connection with SPIFFE enabled backends. | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| ### General | ||||
|  | ||||
| Enabling SPIFFE is part of the [static configuration](../getting-started/configuration-overview.md#the-static-configuration). | ||||
| It can be defined by using a file (YAML or TOML) or CLI arguments. | ||||
|  | ||||
| ### Workload API | ||||
|  | ||||
| The `workloadAPIAddr` configuration defines the address of the SPIFFE [Workload API](https://spiffe.io/docs/latest/spiffe-about/spiffe-concepts/#spiffe-workload-api). | ||||
|  | ||||
| !!! info "Enabling SPIFFE in ServersTransports" | ||||
|  | ||||
|     Enabling SPIFFE does not imply that backend connections are going to use it automatically. | ||||
|     Each [ServersTransport](../routing/services/index.md#serverstransport_1) that is meant to be secured with SPIFFE must [explicitly](../routing/services/index.md#spiffe) enable it. | ||||
|  | ||||
| !!! warning "SPIFFE can cause Traefik to stall" | ||||
| 	When using SPIFFE, | ||||
| 	Traefik will wait for the first SVID to be delivered before starting. | ||||
| 	If Traefik is hanging when waiting on SPIFFE SVID delivery, | ||||
| 	please double check that it is correctly registered as workload in your SPIFFE infrastructure. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| ## Static configuration | ||||
| spiffe: | ||||
|     workloadAPIAddr: localhost | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| ## Static configuration | ||||
| [spiffe] | ||||
|     workloadAPIAddr: localhost | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| ## Static configuration | ||||
| --spiffe.workloadAPIAddr=localhost | ||||
| ``` | ||||
							
								
								
									
										237
									
								
								docs/content/https/tailscale.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								docs/content/https/tailscale.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,237 @@ | ||||
| --- | ||||
| title: "Traefik Tailscale Documentation" | ||||
| description: "Learn how to configure Traefik Proxy to resolve TLS certificates for your Tailscale services. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # Tailscale | ||||
|  | ||||
| Provision TLS certificates for your internal Tailscale services. | ||||
| {: .subtitle } | ||||
|  | ||||
| To protect a service with TLS, a certificate from a public Certificate Authority is needed. | ||||
| In addition to its vpn role, Tailscale can also [provide certificates](https://tailscale.com/kb/1153/enabling-https/) for the machines in your Tailscale network. | ||||
|  | ||||
| ## Certificate resolvers | ||||
|  | ||||
| To obtain a TLS certificate from the Tailscale daemon, | ||||
| a Tailscale certificate resolver needs to be configured as below. | ||||
|  | ||||
| !!! info "Referencing a certificate resolver" | ||||
|  | ||||
|     Defining a certificate resolver does not imply that routers are going to use it automatically. | ||||
|     Each router or entrypoint that is meant to use the resolver must explicitly [reference](../routing/routers/index.md#certresolver) it. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| certificatesResolvers: | ||||
|     myresolver: | ||||
|         tailscale: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [certificatesResolvers.myresolver.tailscale] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --certificatesresolvers.myresolver.tailscale=true | ||||
| ``` | ||||
|  | ||||
| ## Domain Definition | ||||
|  | ||||
| A certificate resolver requests certificates for a set of domain names inferred from routers, according to the following: | ||||
|  | ||||
| - If the router has a [`tls.domains`](../routing/routers/index.md#domains) option set, | ||||
|   then the certificate resolver derives this router domain name from the `main` option of `tls.domains`. | ||||
|  | ||||
| - Otherwise, the certificate resolver derives the domain name from any `Host()` or `HostSNI()` matchers | ||||
|   in the [router's rule](../routing/routers/index.md#rule). | ||||
|  | ||||
| !!! info "Tailscale Domain Format" | ||||
|  | ||||
|     The domain is only taken into account if it is a Tailscale-specific one, | ||||
|     i.e. of the form `machine-name.domains-alias.ts.net`. | ||||
|  | ||||
| ## Configuration Example | ||||
|  | ||||
| !!! example "Enabling Tailscale certificate resolution" | ||||
|  | ||||
|     ```yaml tab="File (YAML)" | ||||
|     entryPoints: | ||||
|       web: | ||||
|         address: ":80" | ||||
|  | ||||
|       websecure: | ||||
|         address: ":443" | ||||
|  | ||||
|     certificatesResolvers: | ||||
|       myresolver: | ||||
|         tailscale: {} | ||||
|     ``` | ||||
|  | ||||
|     ```toml tab="File (TOML)" | ||||
|     [entryPoints] | ||||
|       [entryPoints.web] | ||||
|         address = ":80" | ||||
|  | ||||
|       [entryPoints.websecure] | ||||
|         address = ":443" | ||||
|  | ||||
|     [certificatesResolvers.myresolver.tailscale] | ||||
|     ``` | ||||
|  | ||||
|     ```bash tab="CLI" | ||||
|     --entrypoints.web.address=:80 | ||||
|     --entrypoints.websecure.address=:443 | ||||
|     # ... | ||||
|     --certificatesresolvers.myresolver.tailscale=true | ||||
|     ``` | ||||
|  | ||||
| !!! example "Domain from Router's Rule Example" | ||||
|  | ||||
|     ```yaml tab="Docker" | ||||
|     ## Dynamic configuration | ||||
|     labels: | ||||
|       - traefik.http.routers.blog.rule=Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`) | ||||
|       - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Docker (Swarm)" | ||||
|     ## Dynamic configuration | ||||
|     deploy: | ||||
|       labels: | ||||
|         - traefik.http.routers.blog.rule=Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`) | ||||
|         - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Kubernetes" | ||||
|     apiVersion: traefik.containo.us/v1alpha1 | ||||
|     kind: IngressRoute | ||||
|     metadata: | ||||
|       name: blogtls | ||||
|     spec: | ||||
|       entryPoints: | ||||
|         - websecure | ||||
|       routes: | ||||
|         - match: Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`) | ||||
|           kind: Rule | ||||
|           services: | ||||
|             - name: blog | ||||
|               port: 8080 | ||||
|       tls: | ||||
|         certResolver: myresolver | ||||
|     ``` | ||||
|  | ||||
|     ```json tab="Marathon" | ||||
|     labels: { | ||||
|       "traefik.http.routers.blog.rule": "Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)", | ||||
|       "traefik.http.routers.blog.tls.certresolver": "myresolver", | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Rancher" | ||||
|     ## Dynamic configuration | ||||
|     labels: | ||||
|       - traefik.http.routers.blog.rule=Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`) | ||||
|       - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="File (YAML)" | ||||
|     ## Dynamic configuration | ||||
|     http: | ||||
|       routers: | ||||
|         blog: | ||||
|           rule: "Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)" | ||||
|           tls: | ||||
|             certResolver: myresolver | ||||
|     ``` | ||||
|  | ||||
|     ```toml tab="File (TOML)" | ||||
|     ## Dynamic configuration | ||||
|     [http.routers] | ||||
|       [http.routers.blog] | ||||
|       rule = "Host(`monitoring.yak-bebop.ts.net`) && Path(`/metrics`)" | ||||
|       [http.routers.blog.tls] | ||||
|         certResolver = "myresolver" | ||||
|     ``` | ||||
|  | ||||
| !!! example "Domain from Router's tls.domain Example" | ||||
|  | ||||
|     ```yaml tab="Docker" | ||||
|     ## Dynamic configuration | ||||
|     labels: | ||||
|       - traefik.http.routers.blog.rule=Path(`/metrics`) | ||||
|       - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|       - traefik.http.routers.blog.tls.domains[0].main=monitoring.yak-bebop.ts.net | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Docker (Swarm)" | ||||
|     ## Dynamic configuration | ||||
|     deploy: | ||||
|       labels: | ||||
|         - traefik.http.routers.blog.rule=Path(`/metrics`) | ||||
|         - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|         - traefik.http.routers.blog.tls.domains[0].main=monitoring.yak-bebop.ts.net | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Kubernetes" | ||||
|     apiVersion: traefik.containo.us/v1alpha1 | ||||
|     kind: IngressRoute | ||||
|     metadata: | ||||
|       name: blogtls | ||||
|     spec: | ||||
|       entryPoints: | ||||
|         - websecure | ||||
|       routes: | ||||
|         - match: Path(`/metrics`) | ||||
|           kind: Rule | ||||
|           services: | ||||
|             - name: blog | ||||
|               port: 8080 | ||||
|       tls: | ||||
|         certResolver: myresolver | ||||
|         domains: | ||||
|           - main: monitoring.yak-bebop.ts.net | ||||
|     ``` | ||||
|  | ||||
|     ```json tab="Marathon" | ||||
|     labels: { | ||||
|       "traefik.http.routers.blog.rule": "Path(`/metrics`)", | ||||
|       "traefik.http.routers.blog.tls.certresolver": "myresolver", | ||||
|       "traefik.http.routers.blog.tls.domains[0].main": "monitoring.yak-bebop.ts.net", | ||||
|     } | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="Rancher" | ||||
|     ## Dynamic configuration | ||||
|     labels: | ||||
|       - traefik.http.routers.blog.rule=Path(`/metrics`) | ||||
|       - traefik.http.routers.blog.tls.certresolver=myresolver | ||||
|       - traefik.http.routers.blog.tls.domains[0].main=monitoring.yak-bebop.ts.net | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="File (YAML)" | ||||
|     ## Dynamic configuration | ||||
|     http: | ||||
|       routers: | ||||
|         blog: | ||||
|           rule: "Path(`/metrics`)" | ||||
|           tls: | ||||
|             certResolver: myresolver | ||||
|             domains: | ||||
|               - main: "monitoring.yak-bebop.ts.net" | ||||
|     ``` | ||||
|  | ||||
|     ```toml tab="File (TOML)" | ||||
|     ## Dynamic configuration | ||||
|     [http.routers] | ||||
|       [http.routers.blog] | ||||
|         rule = "Path(`/metrics`)" | ||||
|         [http.routers.blog.tls] | ||||
|           certResolver = "myresolver" | ||||
|           [[http.routers.blog.tls.domains]] | ||||
|             main = "monitoring.yak-bebop.ts.net" | ||||
|     ``` | ||||
|  | ||||
| ## Automatic Renewals | ||||
|  | ||||
| Traefik automatically tracks the expiry date of each Tailscale certificate it fetches, | ||||
| and starts to renew a certificate 14 days before its expiry to match Tailscale daemon renew policy. | ||||
| @@ -15,7 +15,7 @@ It makes reusing the same groups easier. | ||||
|  | ||||
| ## Configuration Example | ||||
|  | ||||
| Below is an example of a Chain containing `WhiteList`, `BasicAuth`, and `RedirectScheme`. | ||||
| Below is an example of a Chain containing `AllowList`, `BasicAuth`, and `RedirectScheme`. | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| labels: | ||||
| @@ -25,7 +25,7 @@ labels: | ||||
|   - "traefik.http.middlewares.secured.chain.middlewares=https-only,known-ips,auth-users" | ||||
|   - "traefik.http.middlewares.auth-users.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/" | ||||
|   - "traefik.http.middlewares.https-only.redirectscheme.scheme=https" | ||||
|   - "traefik.http.middlewares.known-ips.ipwhitelist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
|   - "traefik.http.middlewares.known-ips.ipallowlist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
|   - "traefik.http.services.service1.loadbalancer.server.port=80" | ||||
| ``` | ||||
|  | ||||
| @@ -80,7 +80,7 @@ kind: Middleware | ||||
| metadata: | ||||
|   name: known-ips | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     sourceRange: | ||||
|     - 192.168.1.7 | ||||
|     - 127.0.0.1/32 | ||||
| @@ -93,7 +93,7 @@ spec: | ||||
| - "traefik.http.middlewares.secured.chain.middlewares=https-only,known-ips,auth-users" | ||||
| - "traefik.http.middlewares.auth-users.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/" | ||||
| - "traefik.http.middlewares.https-only.redirectscheme.scheme=https" | ||||
| - "traefik.http.middlewares.known-ips.ipwhitelist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
| - "traefik.http.middlewares.known-ips.ipallowlist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
| - "traefik.http.services.service1.loadbalancer.server.port=80" | ||||
| ``` | ||||
|  | ||||
| @@ -105,7 +105,7 @@ spec: | ||||
|   "traefik.http.middlewares.secured.chain.middlewares": "https-only,known-ips,auth-users", | ||||
|   "traefik.http.middlewares.auth-users.basicauth.users": "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", | ||||
|   "traefik.http.middlewares.https-only.redirectscheme.scheme": "https", | ||||
|   "traefik.http.middlewares.known-ips.ipwhitelist.sourceRange": "192.168.1.7,127.0.0.1/32", | ||||
|   "traefik.http.middlewares.known-ips.ipallowlist.sourceRange": "192.168.1.7,127.0.0.1/32", | ||||
|   "traefik.http.services.service1.loadbalancer.server.port": "80" | ||||
| } | ||||
| ``` | ||||
| @@ -118,7 +118,7 @@ labels: | ||||
|   - "traefik.http.middlewares.secured.chain.middlewares=https-only,known-ips,auth-users" | ||||
|   - "traefik.http.middlewares.auth-users.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/" | ||||
|   - "traefik.http.middlewares.https-only.redirectscheme.scheme=https" | ||||
|   - "traefik.http.middlewares.known-ips.ipwhitelist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
|   - "traefik.http.middlewares.known-ips.ipallowlist.sourceRange=192.168.1.7,127.0.0.1/32" | ||||
|   - "traefik.http.services.service1.loadbalancer.server.port=80" | ||||
| ``` | ||||
|  | ||||
| @@ -150,7 +150,7 @@ http: | ||||
|         scheme: https | ||||
|  | ||||
|     known-ips: | ||||
|       ipWhiteList: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - "192.168.1.7" | ||||
|           - "127.0.0.1/32" | ||||
| @@ -180,7 +180,7 @@ http: | ||||
|   [http.middlewares.https-only.redirectScheme] | ||||
|     scheme = "https" | ||||
|  | ||||
|   [http.middlewares.known-ips.ipWhiteList] | ||||
|   [http.middlewares.known-ips.ipAllowList] | ||||
|     sourceRange = ["192.168.1.7", "127.0.0.1/32"] | ||||
|  | ||||
| [http.services] | ||||
|   | ||||
| @@ -5,23 +5,24 @@ description: "Traefik Proxy's HTTP middleware lets you compress responses before | ||||
|  | ||||
| # Compress | ||||
|  | ||||
| Compress Responses before Sending them to the Client | ||||
| Compress Allows Compressing Responses before Sending them to the Client | ||||
| {: .subtitle } | ||||
|  | ||||
|  | ||||
|  | ||||
| The Compress middleware uses gzip compression. | ||||
| The Compress middleware supports gzip and Brotli compression. | ||||
| The activation of compression, and the compression method choice rely (among other things) on the request's `Accept-Encoding` header. | ||||
|  | ||||
| ## Configuration Examples | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-compress.compress=true" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
| @@ -31,7 +32,7 @@ spec: | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| - "traefik.http.middlewares.test-compress.compress=true" | ||||
| ``` | ||||
|  | ||||
| @@ -42,13 +43,13 @@ spec: | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Rancher" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-compress.compress=true" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| http: | ||||
|   middlewares: | ||||
|     test-compress: | ||||
| @@ -56,7 +57,7 @@ http: | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| # Enable gzip compression | ||||
| # Enable compression | ||||
| [http.middlewares] | ||||
|   [http.middlewares.test-compress.compress] | ||||
| ``` | ||||
| @@ -65,23 +66,34 @@ http: | ||||
|  | ||||
|     Responses are compressed when the following criteria are all met: | ||||
|  | ||||
|     * The response body is larger than the configured minimum amount of bytes (default is `1024`). | ||||
|     * The `Accept-Encoding` request header contains `gzip`. | ||||
|     * 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). | ||||
|     If the `Accept-Encoding` request header is absent, it is meant as br compression is requested. | ||||
|     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. | ||||
|  | ||||
|     If the `Content-Type` header is not defined, or empty, the compress middleware will automatically [detect](https://mimesniff.spec.whatwg.org/) a content type. | ||||
|     It will also set the `Content-Type` header according to the detected MIME type. | ||||
|     * The response`Content-Type` header is not one among the [excludedContentTypes options](#excludedcontenttypes). | ||||
|     * The response body is larger than the [configured minimum amount of bytes](#minresponsebodybytes) (default is `1024`). | ||||
|  | ||||
| ## Configuration Options | ||||
|  | ||||
| ### `excludedContentTypes` | ||||
|  | ||||
| _Optional, Default=""_  | ||||
|  | ||||
| `excludedContentTypes` specifies a list of content types to compare the `Content-Type` header of the incoming requests and responses before compressing. | ||||
|  | ||||
| The responses with content types defined in `excludedContentTypes` are not compressed. | ||||
|  | ||||
| Content types are compared in a case-insensitive, whitespace-ignored manner. | ||||
|  | ||||
| !!! info "In the case of gzip" | ||||
|  | ||||
|     If the `Content-Type` header is not defined, or empty, the compress middleware will automatically [detect](https://mimesniff.spec.whatwg.org/) a content type. | ||||
|     It will also set the `Content-Type` header according to the detected MIME type. | ||||
|  | ||||
| !!! info "gRPC" | ||||
|  | ||||
|     Note that `application/grpc` is never compressed. | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream" | ||||
| @@ -130,9 +142,9 @@ http: | ||||
|  | ||||
| ### `minResponseBodyBytes` | ||||
|  | ||||
| `minResponseBodyBytes` specifies the minimum amount of bytes a response body must have to be compressed. | ||||
| _Optional, Default=1024_ | ||||
|  | ||||
| The default value is `1024`, which should be a reasonable value for most cases. | ||||
| `minResponseBodyBytes` specifies the minimum amount of bytes a response body must have to be compressed. | ||||
|  | ||||
| Responses smaller than the specified values will not be compressed. | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| --- | ||||
| title: "Traefik ContentType Documentation" | ||||
| description: "Traefik Proxy's HTTP middleware can automatically specify the content-type header if it has not been defined by the backend. Read the technical documentation." | ||||
| description: "Traefik Proxy's HTTP middleware automatically sets the `Content-Type` header value when it is not set by the backend. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # ContentType | ||||
| @@ -8,84 +8,59 @@ description: "Traefik Proxy's HTTP middleware can automatically specify the cont | ||||
| Handling Content-Type auto-detection | ||||
| {: .subtitle } | ||||
|  | ||||
| The Content-Type middleware - or rather its `autoDetect` option - | ||||
| specifies whether to let the `Content-Type` header, | ||||
| if it has not been defined by the backend, | ||||
| be automatically set to a value derived from the contents of the response. | ||||
|  | ||||
| As a proxy, the default behavior should be to leave the header alone, | ||||
| regardless of what the backend did with it. | ||||
| However, the historic default was to always auto-detect and set the header if it was not already defined, | ||||
| and altering this behavior would be a breaking change which would impact many users. | ||||
|  | ||||
| This middleware exists to enable the correct behavior until at least the default one can be changed in a future version. | ||||
| The Content-Type middleware sets the `Content-Type` header value to the media type detected from the response content, | ||||
| when it is not set by the backend. | ||||
|  | ||||
| !!! info | ||||
|  | ||||
|     As explained above, for compatibility reasons the default behavior on a router (without this middleware), | ||||
|     is still to automatically set the `Content-Type` header. | ||||
|     Therefore, given the default value of the `autoDetect` option (false), | ||||
|     simply enabling this middleware for a router switches the router's behavior. | ||||
|  | ||||
|     The scope of the Content-Type middleware is the MIME type detection done by the core of Traefik (the server part). | ||||
|     Therefore, it has no effect against any other `Content-Type` header modifications (e.g.: in another middleware such as compress). | ||||
|  | ||||
| ## Configuration Examples | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| # Disable auto-detection | ||||
| # Enable auto-detection | ||||
| labels: | ||||
|   - "traefik.http.middlewares.autodetect.contenttype.autodetect=false" | ||||
|   - "traefik.http.middlewares.autodetect.contenttype=true" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| # Disable auto-detection | ||||
| # Enable auto-detection | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: autodetect | ||||
| spec: | ||||
|   contentType: | ||||
|     autoDetect: false | ||||
|   contentType: {} | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Disable auto-detection | ||||
| - "traefik.http.middlewares.autodetect.contenttype.autodetect=false" | ||||
| # Enable auto-detection | ||||
| - "traefik.http.middlewares.autodetect.contenttype=true" | ||||
| ``` | ||||
|  | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.autodetect.contenttype.autodetect": "false" | ||||
|   "traefik.http.middlewares.autodetect.contenttype": "true" | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Rancher" | ||||
| # Disable auto-detection | ||||
| # Enable auto-detection | ||||
| labels: | ||||
|   - "traefik.http.middlewares.autodetect.contenttype.autodetect=false" | ||||
|   - "traefik.http.middlewares.autodetect.contenttype=true" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| # Disable auto-detection | ||||
| # Enable auto-detection | ||||
| http: | ||||
|   middlewares: | ||||
|     autodetect: | ||||
|       contentType: | ||||
|         autoDetect: false | ||||
|       contentType: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| # Disable auto-detection | ||||
| # Enable auto-detection | ||||
| [http.middlewares] | ||||
|   [http.middlewares.autodetect.contentType] | ||||
|      autoDetect=false | ||||
| ``` | ||||
|  | ||||
| ## Configuration Options | ||||
|  | ||||
| ### `autoDetect` | ||||
|  | ||||
| `autoDetect` specifies whether to let the `Content-Type` header, | ||||
| if it has not been set by the backend, | ||||
| be automatically set to a value derived from the contents of the response. | ||||
| ``` | ||||
							
								
								
									
										77
									
								
								docs/content/middlewares/http/grpcweb.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								docs/content/middlewares/http/grpcweb.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| --- | ||||
| title: "Traefik GrpcWeb Documentation" | ||||
| description: "In Traefik Proxy's HTTP middleware, GrpcWeb converts a gRPC Web requests to HTTP/2 gRPC requests. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # GrpcWeb | ||||
|  | ||||
| Converting gRPC Web requests to HTTP/2 gRPC requests. | ||||
| {: .subtitle } | ||||
|  | ||||
| The GrpcWeb middleware converts gRPC Web requests to HTTP/2 gRPC requests before forwarding them to the backends. | ||||
|  | ||||
| !!! tip | ||||
|  | ||||
|     Please note, that Traefik needs to communicate using gRPC with the backends (h2c or HTTP/2 over TLS). | ||||
|     Check out the [gRPC](../../user-guides/grpc.md) user guide for more details. | ||||
|  | ||||
| ## Configuration Examples | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-grpcweb.grpcweb.allowOrigins=*" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: test-grpcweb | ||||
| spec: | ||||
|   grpcWeb: | ||||
|     allowOrigins: | ||||
|       - "*" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Consul Catalog" | ||||
| - "traefik.http.middlewares.test-grpcweb.grpcWeb.allowOrigins=*" | ||||
| ``` | ||||
|  | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.test-grpcweb.grpcweb.alloworigins": "*" | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Rancher" | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-grpcweb.grpcweb.alloworigins=*" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| http: | ||||
|   middlewares: | ||||
|     test-grpcweb: | ||||
|       grpcWeb: | ||||
|         allowOrigins: | ||||
|           - "*" | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [http.middlewares] | ||||
|   [http.middlewares.test-grpcweb.grpcWeb] | ||||
|     allowOrigins = ["*"] | ||||
| ``` | ||||
|  | ||||
| ## Configuration Options | ||||
|  | ||||
| ### `allowOrigins` | ||||
|  | ||||
| The `allowOrigins` contains the list of allowed origins. | ||||
| A wildcard origin `*` can also be configured to match all requests. | ||||
|  | ||||
| More information including how to use the settings can be found at: | ||||
|  | ||||
| - [Mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin) | ||||
| - [w3](https://fetch.spec.whatwg.org/#http-access-control-allow-origin) | ||||
| - [IETF](https://tools.ietf.org/html/rfc6454#section-7.1) | ||||
| @@ -364,43 +364,11 @@ The `allowedHosts` option lists fully qualified domain names that are allowed. | ||||
|  | ||||
| The `hostsProxyHeaders` option is a set of header keys that may hold a proxied hostname value for the request. | ||||
|  | ||||
| ### `sslRedirect` | ||||
|  | ||||
| !!! warning | ||||
|  | ||||
|     Deprecated in favor of [EntryPoint redirection](../../routing/entrypoints.md#redirection) or the [RedirectScheme middleware](./redirectscheme.md). | ||||
|  | ||||
| The `sslRedirect` only allow HTTPS requests when set to `true`. | ||||
|  | ||||
| ### `sslTemporaryRedirect` | ||||
|  | ||||
| !!! warning | ||||
|  | ||||
|     Deprecated in favor of [EntryPoint redirection](../../routing/entrypoints.md#redirection) or the [RedirectScheme middleware](./redirectscheme.md). | ||||
|  | ||||
| Set `sslTemporaryRedirect` to `true` to force an SSL redirection using a 302 (instead of a 301). | ||||
|  | ||||
| ### `sslHost` | ||||
|  | ||||
| !!! warning | ||||
|  | ||||
|     Deprecated in favor of the [RedirectRegex middleware](./redirectregex.md). | ||||
|  | ||||
| The `sslHost` option is the host name that is used to redirect HTTP requests to HTTPS. | ||||
|  | ||||
| ### `sslProxyHeaders` | ||||
|  | ||||
| The `sslProxyHeaders` option is set of header keys with associated values that would indicate a valid HTTPS request. | ||||
| It can be useful when using other proxies (example: `"X-Forwarded-Proto": "https"`). | ||||
|  | ||||
| ### `sslForceHost` | ||||
|  | ||||
| !!! warning | ||||
|  | ||||
|     Deprecated in favor of the [RedirectRegex middleware](./redirectregex.md). | ||||
|  | ||||
| Set `sslForceHost` to `true` and set `sslHost` to force requests to use `SSLHost` regardless of whether they already use SSL. | ||||
|  | ||||
| ### `stsSeconds` | ||||
|  | ||||
| The `stsSeconds` is the max-age of the `Strict-Transport-Security` header. | ||||
| @@ -452,14 +420,6 @@ The `publicKey` implements HPKP to prevent MITM attacks with forged certificates | ||||
|  | ||||
| The `referrerPolicy` allows sites to control whether browsers forward the `Referer` header to other sites. | ||||
|  | ||||
| ### `featurePolicy` | ||||
|  | ||||
| !!! warning | ||||
|  | ||||
|     Deprecated in favor of `permissionsPolicy` | ||||
|  | ||||
| The `featurePolicy` allows sites to control browser features. | ||||
|  | ||||
| ### `permissionsPolicy` | ||||
|  | ||||
| The `permissionsPolicy` allows sites to control browser features. | ||||
|   | ||||
| @@ -1,32 +1,30 @@ | ||||
| --- | ||||
| title: "Traefik HTTP Middlewares IPWhiteList" | ||||
| description: "Learn how to use IPWhiteList in HTTP middleware for limiting clients to specific IPs in Traefik Proxy. Read the technical documentation." | ||||
| title: "Traefik HTTP Middlewares IPAllowList" | ||||
| description: "Learn how to use IPAllowList in HTTP middleware for limiting clients to specific IPs in Traefik Proxy. Read the technical documentation." | ||||
| --- | ||||
| 
 | ||||
| # IPWhiteList | ||||
| # IPAllowList | ||||
| 
 | ||||
| Limiting Clients to Specific IPs | ||||
| {: .subtitle } | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| IPWhitelist accepts / refuses requests based on the client IP. | ||||
| IPAllowList accepts / refuses requests based on the client IP. | ||||
| 
 | ||||
| ## Configuration Examples | ||||
| 
 | ||||
| ```yaml tab="Docker" | ||||
| # Accepts request from defined IP | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: test-ipwhitelist | ||||
|   name: test-ipallowlist | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     sourceRange: | ||||
|       - 127.0.0.1/32 | ||||
|       - 192.168.1.7 | ||||
| @@ -34,27 +32,27 @@ spec: | ||||
| 
 | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Accepts request from defined IP | ||||
| - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange": "127.0.0.1/32,192.168.1.7" | ||||
|   "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange": "127.0.0.1/32,192.168.1.7" | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Rancher" | ||||
| # Accepts request from defined IP | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="File (YAML)" | ||||
| # Accepts request from defined IP | ||||
| http: | ||||
|   middlewares: | ||||
|     test-ipwhitelist: | ||||
|       ipWhiteList: | ||||
|     test-ipallowlist: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - "127.0.0.1/32" | ||||
|           - "192.168.1.7" | ||||
| @@ -63,7 +61,7 @@ http: | ||||
| ```toml tab="File (TOML)" | ||||
| # Accepts request from defined IP | ||||
| [http.middlewares] | ||||
|   [http.middlewares.test-ipwhitelist.ipWhiteList] | ||||
|   [http.middlewares.test-ipallowlist.ipAllowList] | ||||
|     sourceRange = ["127.0.0.1/32", "192.168.1.7"] | ||||
| ``` | ||||
| 
 | ||||
| @@ -86,7 +84,7 @@ The `depth` option tells Traefik to use the `X-Forwarded-For` header and take th | ||||
| 
 | ||||
| !!! example "Examples of Depth & X-Forwarded-For" | ||||
| 
 | ||||
|     If `depth` is set to 2, and the request `X-Forwarded-For` header is `"10.0.0.1,11.0.0.1,12.0.0.1,13.0.0.1"` then the "real" client IP is `"10.0.0.1"` (at depth 4) but the IP used for the whitelisting is `"12.0.0.1"` (`depth=2`). | ||||
|     If `depth` is set to 2, and the request `X-Forwarded-For` header is `"10.0.0.1,11.0.0.1,12.0.0.1,13.0.0.1"` then the "real" client IP is `"10.0.0.1"` (at depth 4) but the IP used is `"12.0.0.1"` (`depth=2`). | ||||
| 
 | ||||
|     | `X-Forwarded-For`                       | `depth` | clientIP     | | ||||
|     |-----------------------------------------|---------|--------------| | ||||
| @@ -95,20 +93,20 @@ The `depth` option tells Traefik to use the `X-Forwarded-For` header and take th | ||||
|     | `"10.0.0.1,11.0.0.1,12.0.0.1,13.0.0.1"` | `5`     | `""`         | | ||||
| 
 | ||||
| ```yaml tab="Docker" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.depth=2" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.depth=2" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Kubernetes" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: test-ipwhitelist | ||||
|   name: test-ipallowlist | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     sourceRange: | ||||
|       - 127.0.0.1/32 | ||||
|       - 192.168.1.7 | ||||
| @@ -117,31 +115,31 @@ spec: | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.depth=2" | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.depth=2" | ||||
| ``` | ||||
| 
 | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange": "127.0.0.1/32, 192.168.1.7", | ||||
|   "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.depth": "2" | ||||
|   "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange": "127.0.0.1/32, 192.168.1.7", | ||||
|   "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.depth": "2" | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Rancher" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.depth=2" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.depth=2" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="File (YAML)" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| http: | ||||
|   middlewares: | ||||
|     test-ipwhitelist: | ||||
|       ipWhiteList: | ||||
|     test-ipallowlist: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - "127.0.0.1/32" | ||||
|           - "192.168.1.7" | ||||
| @@ -150,11 +148,11 @@ http: | ||||
| ``` | ||||
| 
 | ||||
| ```toml tab="File (TOML)" | ||||
| # Whitelisting Based on `X-Forwarded-For` with `depth=2` | ||||
| # Allowlisting Based on `X-Forwarded-For` with `depth=2` | ||||
| [http.middlewares] | ||||
|   [http.middlewares.test-ipwhitelist.ipWhiteList] | ||||
|   [http.middlewares.test-ipallowlist.ipAllowList] | ||||
|     sourceRange = ["127.0.0.1/32", "192.168.1.7"] | ||||
|     [http.middlewares.test-ipwhitelist.ipWhiteList.ipStrategy] | ||||
|     [http.middlewares.test-ipallowlist.ipAllowList.ipStrategy] | ||||
|       depth = 2 | ||||
| ``` | ||||
| 
 | ||||
| @@ -177,7 +175,7 @@ http: | ||||
| ```yaml tab="Docker" | ||||
| # Exclude from `X-Forwarded-For` | ||||
| labels: | ||||
|     - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
|     - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Kubernetes" | ||||
| @@ -185,9 +183,9 @@ labels: | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: test-ipwhitelist | ||||
|   name: test-ipallowlist | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     ipStrategy: | ||||
|       excludedIPs: | ||||
|         - 127.0.0.1/32 | ||||
| @@ -196,27 +194,27 @@ spec: | ||||
| 
 | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Exclude from `X-Forwarded-For` | ||||
| - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
| - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.excludedips": "127.0.0.1/32, 192.168.1.7" | ||||
|   "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.excludedips": "127.0.0.1/32, 192.168.1.7" | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Rancher" | ||||
| # Exclude from `X-Forwarded-For` | ||||
| labels: | ||||
|   - "traefik.http.middlewares.test-ipwhitelist.ipwhitelist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.http.middlewares.test-ipallowlist.ipallowlist.ipstrategy.excludedips=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="File (YAML)" | ||||
| # Exclude from `X-Forwarded-For` | ||||
| http: | ||||
|   middlewares: | ||||
|     test-ipwhitelist: | ||||
|       ipWhiteList: | ||||
|     test-ipallowlist: | ||||
|       ipAllowList: | ||||
|         ipStrategy: | ||||
|           excludedIPs: | ||||
|             - "127.0.0.1/32" | ||||
| @@ -226,7 +224,7 @@ http: | ||||
| ```toml tab="File (TOML)" | ||||
| # Exclude from `X-Forwarded-For` | ||||
| [http.middlewares] | ||||
|   [http.middlewares.test-ipwhitelist.ipWhiteList] | ||||
|     [http.middlewares.test-ipwhitelist.ipWhiteList.ipStrategy] | ||||
|   [http.middlewares.test-ipallowlist.ipAllowList] | ||||
|     [http.middlewares.test-ipallowlist.ipAllowList.ipStrategy] | ||||
|       excludedIPs = ["127.0.0.1/32", "192.168.1.7"] | ||||
| ``` | ||||
| @@ -142,7 +142,7 @@ http: | ||||
| | [Errors](errorpages.md)                   | Defines custom error pages                        | Request Lifecycle           | | ||||
| | [ForwardAuth](forwardauth.md)             | Delegates Authentication                          | Security, Authentication    | | ||||
| | [Headers](headers.md)                     | Adds / Updates headers                            | Security                    | | ||||
| | [IPWhiteList](ipwhitelist.md)             | Limits the allowed client IPs                     | Security, Request lifecycle | | ||||
| | [IPAllowList](ipallowlist.md)             | Limits the allowed client IPs                     | Security, Request lifecycle | | ||||
| | [InFlightReq](inflightreq.md)             | Limits the number of simultaneous connections     | Security, Request lifecycle | | ||||
| | [PassTLSClientCert](passtlsclientcert.md) | Adds Client Certificates in a Header              | Security                    | | ||||
| | [RateLimit](ratelimit.md)                 | Limits the call frequency                         | Security, Request lifecycle | | ||||
|   | ||||
| @@ -88,85 +88,3 @@ For instance, `/products` also matches `/products/shoes` and `/products/shirts`. | ||||
|  | ||||
| If your backend is serving assets (e.g., images or JavaScript files), it can use the `X-Forwarded-Prefix` header to properly construct relative URLs. | ||||
| Using the previous example, the backend should return `/products/shoes/image.png` (and not `/image.png`, which Traefik would likely not be able to associate with the same backend). | ||||
|  | ||||
| ### `forceSlash` | ||||
|  | ||||
| _Optional, Default=true_ | ||||
|  | ||||
| The `forceSlash` option ensures the resulting stripped path is not the empty string, by replacing it with `/` when necessary. | ||||
|  | ||||
| This option was added to keep the initial (non-intuitive) behavior of this middleware, in order to avoid introducing a breaking change. | ||||
|  | ||||
| It is recommended to explicitly set `forceSlash` to `false`. | ||||
|  | ||||
| ??? info "Behavior examples" | ||||
|  | ||||
|     - `forceSlash=true` | ||||
|  | ||||
|     | Path       | Prefix to strip | Result | | ||||
|     |------------|-----------------|--------| | ||||
|     | `/`        | `/`             | `/`    | | ||||
|     | `/foo`     | `/foo`          | `/`    | | ||||
|     | `/foo/`    | `/foo`          | `/`    | | ||||
|     | `/foo/`    | `/foo/`         | `/`    | | ||||
|     | `/bar`     | `/foo`          | `/bar` | | ||||
|     | `/foo/bar` | `/foo`          | `/bar` | | ||||
|  | ||||
|     - `forceSlash=false` | ||||
|  | ||||
|     | Path       | Prefix to strip | Result | | ||||
|     |------------|-----------------|--------| | ||||
|     | `/`        | `/`             | empty  | | ||||
|     | `/foo`     | `/foo`          | empty  | | ||||
|     | `/foo/`    | `/foo`          | `/`    | | ||||
|     | `/foo/`    | `/foo/`         | empty  | | ||||
|     | `/bar`     | `/foo`          | `/bar` | | ||||
|     | `/foo/bar` | `/foo`          | `/bar` | | ||||
|  | ||||
| ```yaml tab="Docker" | ||||
| labels: | ||||
|   - "traefik.http.middlewares.example.stripprefix.prefixes=/foobar" | ||||
|   - "traefik.http.middlewares.example.stripprefix.forceSlash=false" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: Middleware | ||||
| metadata: | ||||
|   name: example | ||||
| spec: | ||||
|   stripPrefix: | ||||
|     prefixes: | ||||
|       - "/foobar" | ||||
|     forceSlash: false | ||||
| ``` | ||||
|  | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.http.middlewares.example.stripprefix.prefixes": "/foobar", | ||||
|   "traefik.http.middlewares.example.stripprefix.forceSlash": "false" | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Rancher" | ||||
| labels: | ||||
|   - "traefik.http.middlewares.example.stripprefix.prefixes=/foobar" | ||||
|   - "traefik.http.middlewares.example.stripprefix.forceSlash=false" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| http: | ||||
|   middlewares: | ||||
|     example: | ||||
|       stripPrefix: | ||||
|         prefixes: | ||||
|           - "/foobar" | ||||
|         forceSlash: false | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [http.middlewares] | ||||
|   [http.middlewares.example.stripPrefix] | ||||
|     prefixes = ["/foobar"] | ||||
|     forceSlash = false | ||||
| ``` | ||||
|   | ||||
| @@ -1,30 +1,30 @@ | ||||
| --- | ||||
| title: "Traefik TCP Middlewares IPWhiteList" | ||||
| description: "Learn how to use IPWhiteList in TCP middleware for limiting clients to specific IPs in Traefik Proxy. Read the technical documentation." | ||||
| title: "Traefik TCP Middlewares IPAllowList" | ||||
| description: "Learn how to use IPAllowList in TCP middleware for limiting clients to specific IPs in Traefik Proxy. Read the technical documentation." | ||||
| --- | ||||
| 
 | ||||
| # IPWhiteList | ||||
| # IPAllowList | ||||
| 
 | ||||
| Limiting Clients to Specific IPs | ||||
| {: .subtitle } | ||||
| 
 | ||||
| IPWhitelist accepts / refuses connections based on the client IP. | ||||
| IPAllowList accepts / refuses connections based on the client IP. | ||||
| 
 | ||||
| ## Configuration Examples | ||||
| 
 | ||||
| ```yaml tab="Docker" | ||||
| # Accepts connections from defined IP | ||||
| labels: | ||||
|   - "traefik.tcp.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.tcp.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: MiddlewareTCP | ||||
| metadata: | ||||
|   name: test-ipwhitelist | ||||
|   name: test-ipallowlist | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     sourceRange: | ||||
|       - 127.0.0.1/32 | ||||
|       - 192.168.1.7 | ||||
| @@ -32,25 +32,25 @@ spec: | ||||
| 
 | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Accepts request from defined IP | ||||
| - "traefik.tcp.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| - "traefik.tcp.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.tcp.middlewares.test-ipwhitelist.ipwhitelist.sourcerange": "127.0.0.1/32,192.168.1.7" | ||||
|   "traefik.tcp.middlewares.test-ipallowlist.ipallowlist.sourcerange": "127.0.0.1/32,192.168.1.7" | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```yaml tab="Rancher" | ||||
| # Accepts request from defined IP | ||||
| labels: | ||||
|   - "traefik.tcp.middlewares.test-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   - "traefik.tcp.middlewares.test-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| ``` | ||||
| 
 | ||||
| ```toml tab="File (TOML)" | ||||
| # Accepts request from defined IP | ||||
| [tcp.middlewares] | ||||
|   [tcp.middlewares.test-ipwhitelist.ipWhiteList] | ||||
|   [tcp.middlewares.test-ipallowlist.ipAllowList] | ||||
|     sourceRange = ["127.0.0.1/32", "192.168.1.7"] | ||||
| ``` | ||||
| 
 | ||||
| @@ -58,8 +58,8 @@ labels: | ||||
| # Accepts request from defined IP | ||||
| tcp: | ||||
|   middlewares: | ||||
|     test-ipwhitelist: | ||||
|       ipWhiteList: | ||||
|     test-ipallowlist: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - "127.0.0.1/32" | ||||
|           - "192.168.1.7" | ||||
| @@ -18,10 +18,10 @@ whoami: | ||||
|   #  A container that exposes an API to show its IP address | ||||
|   image: traefik/whoami | ||||
|   labels: | ||||
|     # Create a middleware named `foo-ip-whitelist` | ||||
|     - "traefik.tcp.middlewares.foo-ip-whitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|     # Apply the middleware named `foo-ip-whitelist` to the router named `router1` | ||||
|     - "traefik.tcp.routers.router1.middlewares=foo-ip-whitelist@docker" | ||||
|     # Create a middleware named `foo-ip-allowlist` | ||||
|     - "traefik.tcp.middlewares.foo-ip-allowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|     # Apply the middleware named `foo-ip-allowlist` to the router named `router1` | ||||
|     - "traefik.tcp.routers.router1.middlewares=foo-ip-allowlist@docker" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes IngressRoute" | ||||
| @@ -43,9 +43,9 @@ spec: | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: MiddlewareTCP | ||||
| metadata: | ||||
|   name: foo-ip-whitelist | ||||
|   name: foo-ip-allowlist | ||||
| spec: | ||||
|   ipWhiteList: | ||||
|   ipAllowList: | ||||
|     sourcerange: | ||||
|       - 127.0.0.1/32 | ||||
|       - 192.168.1.7 | ||||
| @@ -60,30 +60,30 @@ spec: | ||||
|   routes: | ||||
|     # more fields... | ||||
|     middlewares: | ||||
|       - name: foo-ip-whitelist | ||||
|       - name: foo-ip-allowlist | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Consul Catalog" | ||||
| # Create a middleware named `foo-ip-whitelist` | ||||
| - "traefik.tcp.middlewares.foo-ip-whitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| # Apply the middleware named `foo-ip-whitelist` to the router named `router1` | ||||
| - "traefik.tcp.routers.router1.middlewares=foo-ip-whitelist@consulcatalog" | ||||
| # Create a middleware named `foo-ip-allowlist` | ||||
| - "traefik.tcp.middlewares.foo-ip-allowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
| # Apply the middleware named `foo-ip-allowlist` to the router named `router1` | ||||
| - "traefik.tcp.routers.router1.middlewares=foo-ip-allowlist@consulcatalog" | ||||
| ``` | ||||
|  | ||||
| ```json tab="Marathon" | ||||
| "labels": { | ||||
|   "traefik.tcp.middlewares.foo-ip-whitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7", | ||||
|   "traefik.tcp.routers.router1.middlewares=foo-ip-whitelist@marathon" | ||||
|   "traefik.tcp.middlewares.foo-ip-allowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7", | ||||
|   "traefik.tcp.routers.router1.middlewares=foo-ip-allowlist@marathon" | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Rancher" | ||||
| # As a Rancher Label | ||||
| labels: | ||||
|   # Create a middleware named `foo-ip-whitelist` | ||||
|   - "traefik.tcp.middlewares.foo-ip-whitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   # Apply the middleware named `foo-ip-whitelist` to the router named `router1` | ||||
|   - "traefik.tcp.routers.router1.middlewares=foo-ip-whitelist@rancher" | ||||
|   # Create a middleware named `foo-ip-allowlist` | ||||
|   - "traefik.tcp.middlewares.foo-ip-allowlist.ipallowlist.sourcerange=127.0.0.1/32, 192.168.1.7" | ||||
|   # Apply the middleware named `foo-ip-allowlist` to the router named `router1` | ||||
|   - "traefik.tcp.routers.router1.middlewares=foo-ip-allowlist@rancher" | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| @@ -91,11 +91,11 @@ labels: | ||||
| [tcp.routers] | ||||
|   [tcp.routers.router1] | ||||
|     service = "myService" | ||||
|     middlewares = ["foo-ip-whitelist"] | ||||
|     middlewares = ["foo-ip-allowlist"] | ||||
|     rule = "Host(`example.com`)" | ||||
|  | ||||
| [tcp.middlewares] | ||||
|   [tcp.middlewares.foo-ip-whitelist.ipWhiteList] | ||||
|   [tcp.middlewares.foo-ip-allowlist.ipAllowList] | ||||
|     sourceRange = ["127.0.0.1/32", "192.168.1.7"] | ||||
|  | ||||
| [tcp.services] | ||||
| @@ -114,12 +114,12 @@ tcp: | ||||
|     router1: | ||||
|       service: myService | ||||
|       middlewares: | ||||
|         - "foo-ip-whitelist" | ||||
|         - "foo-ip-allowlist" | ||||
|       rule: "Host(`example.com`)" | ||||
|  | ||||
|   middlewares: | ||||
|     foo-ip-whitelist: | ||||
|       ipWhiteList: | ||||
|     foo-ip-allowlist: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - "127.0.0.1/32" | ||||
|           - "192.168.1.7" | ||||
| @@ -137,4 +137,4 @@ tcp: | ||||
| | Middleware                                | Purpose                                           | Area                        | | ||||
| |-------------------------------------------|---------------------------------------------------|-----------------------------| | ||||
| | [InFlightConn](inflightconn.md)           | Limits the number of simultaneous connections.    | Security, Request lifecycle | | ||||
| | [IPWhiteList](ipwhitelist.md)             | Limit the allowed client IPs.                     | Security, Request lifecycle | | ||||
| | [IPAllowList](ipallowlist.md)             | Limit the allowed client IPs.                     | Security, Request lifecycle | | ||||
|   | ||||
							
								
								
									
										52
									
								
								docs/content/migration/v2-to-v3.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								docs/content/migration/v2-to-v3.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| --- | ||||
| title: "Traefik V3 Migration Documentation" | ||||
| description: "Migrate from Traefik Proxy v2 to v3 and update all the necessary configurations to take advantage of all the improvements. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # Migration Guide: From v2 to v3 | ||||
|  | ||||
| How to Migrate from Traefik v2 to Traefik v3. | ||||
| {: .subtitle } | ||||
|  | ||||
| The version 3 of Traefik introduces a number of breaking changes, | ||||
| which require one to update their configuration when they migrate from v2 to v3. | ||||
| The goal of this page is to recapitulate all of these changes, and in particular to give examples, | ||||
| feature by feature, of how the configuration looked like in v2, and how it now looks like in v3. | ||||
|  | ||||
| ## IPWhiteList | ||||
|  | ||||
| In v3, we renamed the `IPWhiteList` middleware to `IPAllowList` without changing anything to the configuration.  | ||||
|  | ||||
| ## gRPC Metrics | ||||
|  | ||||
| In v3, the reported status code for gRPC requests is now the value of the `Grpc-Status` header.   | ||||
|  | ||||
| ## Deprecated Options Removal | ||||
|  | ||||
| - The `pilot` option has been removed from the static configuration. | ||||
| - The `tracing.datadog.globaltag` option has been removed. | ||||
| - The `namespace` option of Consul, Consul Catalog and Nomad providers has been removed. | ||||
| - The `tls.caOptional` option has been removed from the ForwardAuth middleware, as well as from the HTTP, Consul, Etcd, Redis, ZooKeeper, Marathon, Consul Catalog, and Docker providers. | ||||
| - `sslRedirect`, `sslTemporaryRedirect`, `sslHost`, `sslForceHost` and `featurePolicy` options of the Headers middleware have been removed. | ||||
| - The `forceSlash` option of the StripPrefix middleware has been removed. | ||||
| - the `preferServerCipherSuites` option has been removed. | ||||
|  | ||||
| ## Matchers | ||||
|  | ||||
| In v3, the `Headers` and `HeadersRegexp` matchers have been renamed to `Header` and `HeaderRegexp` respectively. | ||||
|  | ||||
| `QueryRegexp` has been introduced to match query values using a regular expression. | ||||
|  | ||||
| `HeaderRegexp`, `HostRegexp`, `PathRegexp`, `QueryRegexp`, and `HostSNIRegexp` matchers now uses the [Go regexp syntax](https://golang.org/pkg/regexp/syntax/). | ||||
|  | ||||
| All matchers now take a single value (except `Headers`, `HeaderRegexp`, `Query`, and `QueryRegexp` which take two) | ||||
| and should be explicitly combined using logical operators to mimic previous behavior. | ||||
|  | ||||
| `Query` can take a single value to match is the query value that has no value (e.g. `/search?mobile`). | ||||
|  | ||||
| `HostHeader` has been removed, use `Host` instead. | ||||
|  | ||||
| ## Content-Type Auto-Detection | ||||
|  | ||||
| In v3, the `Content-Type` header is not auto-detected anymore when it is not set by the backend. | ||||
| One should use the `ContentType` middleware to enable the `Content-Type` header value auto-detection. | ||||
| @@ -490,3 +490,9 @@ In `v2.8.2`, Traefik now reject certificates signed with the SHA-1 hash function | ||||
| ### Traefik Pilot | ||||
|  | ||||
| In `v2.9`, Traefik Pilot support has been removed. | ||||
|  | ||||
| ## v2.10 | ||||
|  | ||||
| ### Nomad Namespace | ||||
|  | ||||
| In `v2.10`, the `namespace` option of the Nomad provider is deprecated, please use the `namespaces` options instead. | ||||
|   | ||||
| @@ -229,6 +229,7 @@ accessLog: | ||||
|     | `RetryAttempts`         | The amount of attempts the request was retried.                                                                                                                     | | ||||
|     | `TLSVersion`            | The TLS version used by the connection (e.g. `1.2`) (if connection is TLS).                                                                                         | | ||||
|     | `TLSCipher`             | The TLS cipher used by the connection (e.g. `TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA`) (if connection is TLS)                                                           | | ||||
|     | `TLSClientSubject`      | The string representation of the TLS client certificate's Subject (e.g. `CN=username,O=organization`)                                                               | | ||||
|  | ||||
| ## Log Rotation | ||||
|  | ||||
| @@ -254,7 +255,7 @@ version: "3.7" | ||||
|  | ||||
| services: | ||||
|   traefik: | ||||
|     image: traefik:v2.9 | ||||
|     image: traefik:v3.0 | ||||
|     environment: | ||||
|       - TZ=US/Alaska | ||||
|     command: | ||||
|   | ||||
| @@ -64,7 +64,7 @@ log: | ||||
|  | ||||
| #### `level` | ||||
|  | ||||
| By default, the `level` is set to `ERROR`. Alternative logging levels are `DEBUG`, `PANIC`, `FATAL`, `ERROR`, `WARN`, and `INFO`. | ||||
| By default, the `level` is set to `ERROR`. Alternative logging levels are `TRACE`, `DEBUG`, `PANIC`, `FATAL`, `ERROR`, `WARN`, and `INFO`. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
| @@ -80,10 +80,101 @@ log: | ||||
| --log.level=DEBUG | ||||
| ``` | ||||
|  | ||||
| #### `noColor` | ||||
|  | ||||
| When using the 'common' format, disables the colorized output. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
|   noColor: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [log] | ||||
|   noColor = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --log.nocolor=true | ||||
| ``` | ||||
|  | ||||
| ## Log Rotation | ||||
|  | ||||
| Traefik will close and reopen its log files, assuming they're configured, on receipt of a USR1 signal. | ||||
| This allows the logs to be rotated and processed by an external program, such as `logrotate`. | ||||
| The rotation of the log files can be configured with the following options. | ||||
|  | ||||
| !!! warning | ||||
|     This does not work on Windows due to the lack of USR signals. | ||||
| ### `maxSize` | ||||
|  | ||||
| `maxSize` is the maximum size in megabytes of the log file before it gets rotated. | ||||
| It defaults to 100 megabytes. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
|   maxSize: 1 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [log] | ||||
|   maxSize = 1 | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --log.maxsize=1 | ||||
| ``` | ||||
|  | ||||
| ### `maxBackups` | ||||
|  | ||||
| `maxBackups` is the maximum number of old log files to retain. | ||||
| The default is to retain all old log files (though `maxAge` may still cause them to get deleted). | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
|   maxBackups: 3 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [log] | ||||
|   maxBackups = 3 | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --log.maxbackups=3 | ||||
| ``` | ||||
|  | ||||
| ### `maxAge` | ||||
|  | ||||
| `maxAge` is the maximum number of days to retain old log files based on the timestamp encoded in their filename. | ||||
| Note that a day is defined as 24 hours and may not exactly correspond to calendar days due to daylight savings, leap seconds, etc. | ||||
| The default is not to remove old log files based on age. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
|   maxAge: 3 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [log] | ||||
|   maxAge = 3 | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --log.maxage=3 | ||||
| ``` | ||||
|  | ||||
| ### `compress` | ||||
|  | ||||
| `compress` determines if the rotated log files should be compressed using gzip. | ||||
| The default is not to perform compression. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| log: | ||||
|   compress: 3 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [log] | ||||
|   compress = 3 | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --log.compress=3 | ||||
| ``` | ||||
|   | ||||
							
								
								
									
										353
									
								
								docs/content/observability/metrics/opentelemetry.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										353
									
								
								docs/content/observability/metrics/opentelemetry.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,353 @@ | ||||
| --- | ||||
| title: "Traefik OpenTelemetry Documentation" | ||||
| description: "Traefik supports several metrics backends, including OpenTelemetry. Learn how to implement it for observability in Traefik Proxy. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # OpenTelemetry | ||||
|  | ||||
| To enable the OpenTelemetry: | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry=true | ||||
| ``` | ||||
|  | ||||
| !!! info "The OpenTelemetry exporter will export metrics to the collector by using HTTP by default, see the [gRPC Section](#grpc-configuration) to use gRPC." | ||||
|  | ||||
| #### `address` | ||||
|  | ||||
| _Required, Default="localhost:4318", Format="`<host>:<port>`"_ | ||||
|  | ||||
| Address of the OpenTelemetry Collector to send metrics to. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     address: localhost:4318 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     address = "localhost:4318" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.address=localhost:4318 | ||||
| ``` | ||||
|  | ||||
| #### `addEntryPointsLabels` | ||||
|  | ||||
| _Optional, Default=true_ | ||||
|  | ||||
| Enable metrics on entry points. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     addEntryPointsLabels: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     addEntryPointsLabels = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.addEntryPointsLabels=true | ||||
| ``` | ||||
|  | ||||
| #### `addRoutersLabels` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| Enable metrics on routers. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     addRoutersLabels: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     addRoutersLabels = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.addRoutersLabels=true | ||||
| ``` | ||||
|  | ||||
| #### `addServicesLabels` | ||||
|  | ||||
| _Optional, Default=true_ | ||||
|  | ||||
| Enable metrics on services. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     addServicesLabels: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     addServicesLabels = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.addServicesLabels=true | ||||
| ``` | ||||
|  | ||||
| #### `explicitBoundaries` | ||||
|  | ||||
| _Optional, Default=".005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10"_ | ||||
|  | ||||
| Explicit boundaries for Histogram data points. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     explicitBoundaries: | ||||
|       - 0.1 | ||||
|       - 0.3 | ||||
|       - 1.2 | ||||
|       - 5.0 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     explicitBoundaries = [0.1,0.3,1.2,5.0] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.explicitBoundaries=0.1,0.3,1.2,5.0 | ||||
| ``` | ||||
|  | ||||
| #### `headers` | ||||
|  | ||||
| _Optional, Default={}_ | ||||
|  | ||||
| Additional headers sent with metrics by the reporter to the OpenTelemetry Collector. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     headers: | ||||
|       foo: bar | ||||
|       baz: buz | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry.headers] | ||||
|     foo = "bar" | ||||
|     baz = "buz" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.headers.foo=bar --metrics.openTelemetry.headers.baz=buz | ||||
| ``` | ||||
|  | ||||
| #### `insecure` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| Allows reporter to send metrics to the OpenTelemetry Collector without using a secured protocol. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     insecure: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     insecure = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.insecure=true | ||||
| ``` | ||||
|  | ||||
| #### `pushInterval` | ||||
|  | ||||
| _Optional, Default=10s_ | ||||
|  | ||||
| Interval at which metrics are sent to the OpenTelemetry Collector. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     pushInterval: 10s | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     pushInterval = "10s" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.pushInterval=10s | ||||
| ``` | ||||
|  | ||||
| #### `path` | ||||
|  | ||||
| _Required, Default="/v1/traces"_ | ||||
|  | ||||
| Allows to override the default URL path used for sending metrics. | ||||
| This option has no effect when using gRPC transport. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     path: /foo/v1/traces | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry] | ||||
|     path = "/foo/v1/traces" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.path=/foo/v1/traces | ||||
| ``` | ||||
|  | ||||
| #### `tls` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| Defines the TLS configuration used by the reporter to send metrics to the OpenTelemetry Collector. | ||||
|  | ||||
| ##### `ca` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `ca` is the path to the certificate authority used for the secure connection to the OpenTelemetry Collector, | ||||
| it defaults to the system bundle. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       ca: path/to/ca.crt | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics.openTelemetry.tls] | ||||
|   ca = "path/to/ca.crt" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.tls.ca=path/to/ca.crt | ||||
| ``` | ||||
|  | ||||
| ##### `cert` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `cert` is the path to the public certificate used for the secure connection to the OpenTelemetry Collector. | ||||
| When using this option, setting the `key` option is required. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       cert: path/to/foo.cert | ||||
|       key: path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics.openTelemetry.tls] | ||||
|   cert = "path/to/foo.cert" | ||||
|   key = "path/to/foo.key" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.tls.cert=path/to/foo.cert | ||||
| --metrics.openTelemetry.tls.key=path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ##### `key` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `key` is the path to the private key used for the secure connection to the OpenTelemetry Collector. | ||||
| When using this option, setting the `cert` option is required. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       cert: path/to/foo.cert | ||||
|       key: path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics.openTelemetry.tls] | ||||
|   cert = "path/to/foo.cert" | ||||
|   key = "path/to/foo.key" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.tls.cert=path/to/foo.cert | ||||
| --metrics.openTelemetry.tls.key=path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ##### `insecureSkipVerify` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| If `insecureSkipVerify` is `true`, | ||||
| the TLS connection to the OpenTelemetry Collector accepts any certificate presented by the server regardless of the hostnames it covers. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       insecureSkipVerify: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics.openTelemetry.tls] | ||||
|   insecureSkipVerify = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.tls.insecureSkipVerify=true | ||||
| ``` | ||||
|  | ||||
| #### gRPC configuration | ||||
|  | ||||
| This instructs the reporter to send metrics to the OpenTelemetry Collector using gRPC. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| metrics: | ||||
|   openTelemetry: | ||||
|     grpc: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [metrics] | ||||
|   [metrics.openTelemetry.grpc] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --metrics.openTelemetry.grpc=true | ||||
| ``` | ||||
| @@ -13,6 +13,8 @@ Traefik supports these metrics backends: | ||||
| - [Prometheus](./prometheus.md) | ||||
| - [StatsD](./statsd.md) | ||||
|  | ||||
| Traefik Proxy hosts an official Grafana dashboard for both [on-premises](https://grafana.com/grafana/dashboards/17346) and [Kubernetes](https://grafana.com/grafana/dashboards/17347) deployments. | ||||
|  | ||||
| ## Global Metrics | ||||
|  | ||||
| | Metric                                      | Type    | Description                                             | | ||||
|   | ||||
| @@ -65,30 +65,6 @@ tracing: | ||||
| --tracing.datadog.debug=true | ||||
| ``` | ||||
|  | ||||
| #### `globalTag` | ||||
|  | ||||
| ??? warning "Deprecated in favor of the [`globalTags`](#globaltags) option." | ||||
|  | ||||
|     _Optional, Default=empty_ | ||||
|      | ||||
|     Applies a shared key:value tag on all spans. | ||||
|      | ||||
|     ```yaml tab="File (YAML)" | ||||
|     tracing: | ||||
|       datadog: | ||||
|         globalTag: sample | ||||
|     ``` | ||||
|      | ||||
|     ```toml tab="File (TOML)" | ||||
|     [tracing] | ||||
|       [tracing.datadog] | ||||
|         globalTag = "sample" | ||||
|     ``` | ||||
|      | ||||
|     ```bash tab="CLI" | ||||
|     --tracing.datadog.globalTag=sample | ||||
|     ``` | ||||
|  | ||||
| #### `globalTags` | ||||
|  | ||||
| _Optional, Default=empty_ | ||||
|   | ||||
							
								
								
									
										246
									
								
								docs/content/observability/tracing/opentelemetry.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								docs/content/observability/tracing/opentelemetry.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,246 @@ | ||||
| --- | ||||
| title: "Traefik OpenTelemetry Documentation" | ||||
| description: "Traefik supports several tracing backends, including OpenTelemetry. Learn how to implement it for observability in Traefik Proxy. Read the technical documentation." | ||||
| --- | ||||
|  | ||||
| # OpenTelemetry | ||||
|  | ||||
| To enable the OpenTelemetry tracer: | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry=true | ||||
| ``` | ||||
|  | ||||
| !!! info "The OpenTelemetry trace reporter will export traces to the collector using HTTP by default, see the [gRPC Section](#grpc-configuration) to use gRPC." | ||||
|  | ||||
| !!! info "Trace sampling" | ||||
|  | ||||
| 	By default, the OpenTelemetry trace reporter will sample 100% of traces. | ||||
| 	See [OpenTelemetry's SDK configuration](https://opentelemetry.io/docs/reference/specification/sdk-environment-variables/#general-sdk-configuration) to customize the sampling strategy. | ||||
|  | ||||
| #### `address` | ||||
|  | ||||
| _Required, Default="localhost:4318", Format="`<host>:<port>`"_ | ||||
|  | ||||
| Address of the OpenTelemetry Collector to send spans to. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     address: localhost:4318 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry] | ||||
|     address = "localhost:4318" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.address=localhost:4318 | ||||
| ``` | ||||
|  | ||||
| #### `headers` | ||||
|  | ||||
| _Optional, Default={}_ | ||||
|  | ||||
| Additional headers sent with spans by the reporter to the OpenTelemetry Collector. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     headers: | ||||
|       foo: bar | ||||
|       baz: buz | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry.headers] | ||||
|     foo = "bar" | ||||
|     baz = "buz" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.headers.foo=bar --tracing.openTelemetry.headers.baz=buz | ||||
| ``` | ||||
|  | ||||
| #### `insecure` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| Allows reporter to send spans to the OpenTelemetry Collector without using a secured protocol. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     insecure: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry] | ||||
|     insecure = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.insecure=true | ||||
| ``` | ||||
|  | ||||
| #### `path` | ||||
|  | ||||
| _Required, Default="/v1/traces"_ | ||||
|  | ||||
| Allows to override the default URL path used for sending traces. | ||||
| This option has no effect when using gRPC transport. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     path: /foo/v1/traces | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry] | ||||
|     path = "/foo/v1/traces" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.path=/foo/v1/traces | ||||
| ``` | ||||
|  | ||||
| #### `tls` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| Defines the TLS configuration used by the reporter to send spans to the OpenTelemetry Collector. | ||||
|  | ||||
| ##### `ca` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `ca` is the path to the certificate authority used for the secure connection to the OpenTelemetry Collector, | ||||
| it defaults to the system bundle. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       ca: path/to/ca.crt | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing.openTelemetry.tls] | ||||
|   ca = "path/to/ca.crt" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.tls.ca=path/to/ca.crt | ||||
| ``` | ||||
|  | ||||
| ##### `cert` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `cert` is the path to the public certificate used for the secure connection to the OpenTelemetry Collector. | ||||
| When using this option, setting the `key` option is required. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       cert: path/to/foo.cert | ||||
|       key: path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing.openTelemetry.tls] | ||||
|   cert = "path/to/foo.cert" | ||||
|   key = "path/to/foo.key" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.tls.cert=path/to/foo.cert | ||||
| --tracing.openTelemetry.tls.key=path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ##### `key` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `key` is the path to the private key used for the secure connection to the OpenTelemetry Collector. | ||||
| When using this option, setting the `cert` option is required. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       cert: path/to/foo.cert | ||||
|       key: path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing.openTelemetry.tls] | ||||
|   cert = "path/to/foo.cert" | ||||
|   key = "path/to/foo.key" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.tls.cert=path/to/foo.cert | ||||
| --tracing.openTelemetry.tls.key=path/to/foo.key | ||||
| ``` | ||||
|  | ||||
| ##### `insecureSkipVerify` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| If `insecureSkipVerify` is `true`, | ||||
| the TLS connection to the OpenTelemetry Collector accepts any certificate presented by the server regardless of the hostnames it covers. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     tls: | ||||
|       insecureSkipVerify: true | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing.openTelemetry.tls] | ||||
|   insecureSkipVerify = true | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.tls.insecureSkipVerify=true | ||||
| ``` | ||||
|  | ||||
| #### gRPC configuration | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| This instructs the reporter to send spans to the OpenTelemetry Collector using gRPC. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| tracing: | ||||
|   openTelemetry: | ||||
|     grpc: {} | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [tracing] | ||||
|   [tracing.openTelemetry.grpc] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --tracing.openTelemetry.grpc=true | ||||
| ``` | ||||
| @@ -72,7 +72,7 @@ to allow defining: | ||||
|  | ||||
| - One or more security features through [middlewares](../middlewares/overview.md) | ||||
|   like authentication ([basicAuth](../middlewares/http/basicauth.md) , [digestAuth](../middlewares/http/digestauth.md), | ||||
|   [forwardAuth](../middlewares/http/forwardauth.md)) or [whitelisting](../middlewares/http/ipwhitelist.md). | ||||
|   [forwardAuth](../middlewares/http/forwardauth.md)) or [allowlisting](../middlewares/http/ipallowlist.md). | ||||
|  | ||||
| - A [router rule](#dashboard-router-rule) for accessing the dashboard, | ||||
|   through Traefik itself (sometimes referred as "Traefik-ception"). | ||||
| @@ -93,12 +93,12 @@ rule = "Host(`traefik.example.com`)" | ||||
|  | ||||
| ```bash tab="Path Prefix Rule" | ||||
| # The dashboard can be accessed on http://example.com/dashboard/ or http://traefik.example.com/dashboard/ | ||||
| rule = "PathPrefix(`/api`, `/dashboard`)" | ||||
| rule = "PathPrefix(`/api`) || PathPrefix(`/dashboard`)" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="Combination of Rules" | ||||
| # The dashboard can be accessed on http://traefik.example.com/dashboard/ | ||||
| rule = "Host(`traefik.example.com`) && PathPrefix(`/api`, `/dashboard`)" | ||||
| rule = "Host(`traefik.example.com`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))" | ||||
| ``` | ||||
|  | ||||
| ??? example "Dashboard Dynamic Configuration Examples" | ||||
|   | ||||
| @@ -667,41 +667,6 @@ providers: | ||||
|  | ||||
| For additional information, refer to [Restrict the Scope of Service Discovery](./overview.md#restrict-the-scope-of-service-discovery). | ||||
|  | ||||
| ### `namespace` | ||||
|  | ||||
| ??? warning "Deprecated in favor of the [`namespaces`](#namespaces) option." | ||||
|  | ||||
|     _Optional, Default=""_ | ||||
|      | ||||
|     The `namespace` option defines the namespace in which the consul catalog services will be discovered. | ||||
|      | ||||
|     !!! warning | ||||
|      | ||||
|         The namespace option only works with [Consul Enterprise](https://www.consul.io/docs/enterprise), | ||||
|         which provides the [Namespaces](https://www.consul.io/docs/enterprise/namespaces) feature. | ||||
|      | ||||
|     !!! warning | ||||
|      | ||||
|         One should only define either the `namespaces` option or the `namespace` option. | ||||
|      | ||||
|     ```yaml tab="File (YAML)" | ||||
|     providers: | ||||
|       consulCatalog: | ||||
|         namespace: "production"  | ||||
|         # ... | ||||
|     ``` | ||||
|      | ||||
|     ```toml tab="File (TOML)" | ||||
|     [providers.consulCatalog] | ||||
|       namespace = "production" | ||||
|       # ... | ||||
|     ``` | ||||
|      | ||||
|     ```bash tab="CLI" | ||||
|     --providers.consulcatalog.namespace=production | ||||
|     # ... | ||||
|     ``` | ||||
|  | ||||
| ### `namespaces` | ||||
|  | ||||
| _Optional, Default=""_ | ||||
|   | ||||
| @@ -59,40 +59,6 @@ providers: | ||||
| --providers.consul.rootkey=traefik | ||||
| ``` | ||||
|  | ||||
| ### `namespace` | ||||
|  | ||||
| ??? warning "Deprecated in favor of the [`namespaces`](#namespaces) option." | ||||
|  | ||||
|     _Optional, Default=""_ | ||||
|      | ||||
|     The `namespace` option defines the namespace to query. | ||||
|      | ||||
|     !!! warning | ||||
|      | ||||
|         The namespace option only works with [Consul Enterprise](https://www.consul.io/docs/enterprise), | ||||
|         which provides the [Namespaces](https://www.consul.io/docs/enterprise/namespaces) feature. | ||||
|      | ||||
|     !!! warning | ||||
|      | ||||
|         One should only define either the `namespaces` option or the `namespace` option. | ||||
|      | ||||
|     ```yaml tab="File (YAML)" | ||||
|     providers: | ||||
|       consul: | ||||
|         # ... | ||||
|         namespace: "production" | ||||
|     ``` | ||||
|      | ||||
|     ```toml tab="File (TOML)" | ||||
|     [providers.consul] | ||||
|       # ... | ||||
|       namespace = "production" | ||||
|     ``` | ||||
|      | ||||
|     ```bash tab="CLI" | ||||
|     --providers.consul.namespace=production | ||||
|     ``` | ||||
|  | ||||
| ### `namespaces` | ||||
|  | ||||
| _Optional, Default=""_ | ||||
|   | ||||
| @@ -265,7 +265,7 @@ See the sections [Docker API Access](#docker-api-access) and [Docker Swarm API A | ||||
|  | ||||
|     services: | ||||
|       traefik: | ||||
|          image: traefik:v2.9 # The official v2 Traefik docker image | ||||
|          image: traefik:v3.0 # The official v2 Traefik docker image | ||||
|          ports: | ||||
|            - "80:80" | ||||
|          volumes: | ||||
|   | ||||
| @@ -234,6 +234,30 @@ providers: | ||||
| # ... | ||||
| ``` | ||||
|  | ||||
| ### `healthyTasksOnly` | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| Determines whether Traefik discovers only healthy tasks (`HEALTHY` healthStatus). | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| providers: | ||||
|   ecs: | ||||
|     healthyTasksOnly: true | ||||
|     # ... | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [providers.ecs] | ||||
|   healthyTasksOnly = true | ||||
|   # ... | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --providers.ecs.healthyTasksOnly=true | ||||
| # ... | ||||
| ``` | ||||
|  | ||||
| ### `defaultRule` | ||||
|  | ||||
| _Optional, Default=```Host(`{{ normalize .Name }}`)```_ | ||||
|   | ||||
| @@ -18,7 +18,7 @@ It supports providing configuration through a [single configuration file](#filen | ||||
|  | ||||
| !!! tip | ||||
|  | ||||
|     The file provider can be a good solution for reusing common elements from other providers (e.g. declaring whitelist middlewares, basic authentication, ...) | ||||
|     The file provider can be a good solution for reusing common elements from other providers (e.g. declaring allowlist middlewares, basic authentication, ...) | ||||
|  | ||||
| ## Configuration Examples | ||||
|  | ||||
|   | ||||
| @@ -76,6 +76,26 @@ providers: | ||||
| --providers.http.pollTimeout=5s | ||||
| ``` | ||||
|  | ||||
| ### `headers` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| Defines custom headers to be sent to the endpoint. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| providers: | ||||
|   headers: | ||||
|     name: value | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [providers.http.headers] | ||||
|   name = "value" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --providers.http.headers.name=value | ||||
|  | ||||
| ### `tls` | ||||
|  | ||||
| _Optional_ | ||||
|   | ||||
| @@ -440,26 +440,37 @@ providers: | ||||
|  | ||||
| For additional information, refer to [Restrict the Scope of Service Discovery](./overview.md#restrict-the-scope-of-service-discovery). | ||||
|  | ||||
| ### `namespace` | ||||
| ### `namespaces` | ||||
|  | ||||
| _Optional, Default=""_ | ||||
|  | ||||
| The `namespace` option defines the namespace in which the Nomad services will be discovered. | ||||
| The `namespaces` option defines the namespaces in which the nomad services will be discovered. | ||||
| When using the `namespaces` option, the discovered object names will be suffixed as shown below: | ||||
|  | ||||
| ```text | ||||
| <resource-name>@nomad-<namespace> | ||||
| ``` | ||||
|  | ||||
| !!! warning | ||||
|    | ||||
|     One should only define either the `namespaces` option or the `namespace` option. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| providers: | ||||
|   nomad: | ||||
|     namespace: "production" | ||||
|     namespaces: | ||||
|       - "ns1" | ||||
|       - "ns2" | ||||
|     # ... | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| [providers.nomad] | ||||
|   namespace = "production" | ||||
|   namespaces = ["ns1", "ns2"] | ||||
|   # ... | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| --providers.nomad.namespace=production | ||||
| --providers.nomad.namespaces=ns1,ns2 | ||||
| # ... | ||||
| ``` | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
| - "traefik.http.middlewares.middleware05.compress=true" | ||||
| - "traefik.http.middlewares.middleware05.compress.excludedcontenttypes=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware05.compress.minresponsebodybytes=42" | ||||
| - "traefik.http.middlewares.middleware06.contenttype.autodetect=true" | ||||
| - "traefik.http.middlewares.middleware06.contenttype=true" | ||||
| - "traefik.http.middlewares.middleware07.digestauth.headerfield=foobar" | ||||
| - "traefik.http.middlewares.middleware07.digestauth.realm=foobar" | ||||
| - "traefik.http.middlewares.middleware07.digestauth.removeheader=true" | ||||
| @@ -31,7 +31,6 @@ | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.authresponseheadersregex=foobar" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.authrequestheaders=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.tls.ca=foobar" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.tls.caoptional=true" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.tls.cert=foobar" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.tls.insecureskipverify=true" | ||||
| - "traefik.http.middlewares.middleware09.forwardauth.tls.key=foobar" | ||||
| @@ -54,7 +53,6 @@ | ||||
| - "traefik.http.middlewares.middleware10.headers.customrequestheaders.name1=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.customresponseheaders.name0=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.customresponseheaders.name1=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.featurepolicy=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.forcestsheader=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.framedeny=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.hostsproxyheaders=foobar, foobar" | ||||
| @@ -62,18 +60,14 @@ | ||||
| - "traefik.http.middlewares.middleware10.headers.permissionspolicy=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.publickey=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.referrerpolicy=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.sslforcehost=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.sslhost=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.sslproxyheaders.name0=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.sslproxyheaders.name1=foobar" | ||||
| - "traefik.http.middlewares.middleware10.headers.sslredirect=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.ssltemporaryredirect=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.stsincludesubdomains=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.stspreload=true" | ||||
| - "traefik.http.middlewares.middleware10.headers.stsseconds=42" | ||||
| - "traefik.http.middlewares.middleware11.ipwhitelist.ipstrategy.depth=42" | ||||
| - "traefik.http.middlewares.middleware11.ipwhitelist.ipstrategy.excludedips=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware11.ipwhitelist.sourcerange=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware11.ipallowlist.ipstrategy.depth=42" | ||||
| - "traefik.http.middlewares.middleware11.ipallowlist.ipstrategy.excludedips=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware11.ipallowlist.sourcerange=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware12.inflightreq.amount=42" | ||||
| - "traefik.http.middlewares.middleware12.inflightreq.sourcecriterion.ipstrategy.depth=42" | ||||
| - "traefik.http.middlewares.middleware12.inflightreq.sourcecriterion.ipstrategy.excludedips=foobar, foobar" | ||||
| @@ -118,9 +112,9 @@ | ||||
| - "traefik.http.middlewares.middleware19.replacepathregex.replacement=foobar" | ||||
| - "traefik.http.middlewares.middleware20.retry.attempts=42" | ||||
| - "traefik.http.middlewares.middleware20.retry.initialinterval=42" | ||||
| - "traefik.http.middlewares.middleware21.stripprefix.forceslash=true" | ||||
| - "traefik.http.middlewares.middleware21.stripprefix.prefixes=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware22.stripprefixregex.regex=foobar, foobar" | ||||
| - "traefik.http.middlewares.middleware23.grpcweb.alloworigins=foobar, foobar" | ||||
| - "traefik.http.routers.router0.entrypoints=foobar, foobar" | ||||
| - "traefik.http.routers.router0.middlewares=foobar, foobar" | ||||
| - "traefik.http.routers.router0.priority=42" | ||||
| @@ -152,8 +146,10 @@ | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.interval=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.path=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.method=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.status=42" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.port=42" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.scheme=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.mode=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.healthcheck.timeout=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.passhostheader=true" | ||||
| - "traefik.http.services.service01.loadbalancer.responseforwarding.flushinterval=foobar" | ||||
| @@ -165,7 +161,7 @@ | ||||
| - "traefik.http.services.service01.loadbalancer.sticky.cookie.secure=true" | ||||
| - "traefik.http.services.service01.loadbalancer.server.port=foobar" | ||||
| - "traefik.http.services.service01.loadbalancer.server.scheme=foobar" | ||||
| - "traefik.tcp.middlewares.tcpmiddleware00.ipwhitelist.sourcerange=foobar, foobar" | ||||
| - "traefik.tcp.middlewares.tcpmiddleware00.ipallowlist.sourcerange=foobar, foobar" | ||||
| - "traefik.tcp.middlewares.tcpmiddleware01.inflightconn.amount=42" | ||||
| - "traefik.tcp.routers.tcprouter0.entrypoints=foobar, foobar" | ||||
| - "traefik.tcp.routers.tcprouter0.middlewares=foobar, foobar" | ||||
|   | ||||
| @@ -53,18 +53,20 @@ | ||||
|           url = "foobar" | ||||
|         [http.services.Service01.loadBalancer.healthCheck] | ||||
|           scheme = "foobar" | ||||
|           mode = "foobar" | ||||
|           path = "foobar" | ||||
|           method = "foobar" | ||||
|           status = 42 | ||||
|           port = 42 | ||||
|           interval = "foobar" | ||||
|           timeout = "foobar" | ||||
|           interval = "42s" | ||||
|           timeout = "42s" | ||||
|           hostname = "foobar" | ||||
|           followRedirects = true | ||||
|           [http.services.Service01.loadBalancer.healthCheck.headers] | ||||
|             name0 = "foobar" | ||||
|             name1 = "foobar" | ||||
|         [http.services.Service01.loadBalancer.responseForwarding] | ||||
|           flushInterval = "foobar" | ||||
|           flushInterval = "42s" | ||||
|     [http.services.Service02] | ||||
|       [http.services.Service02.mirroring] | ||||
|         service = "foobar" | ||||
| @@ -135,7 +137,6 @@ | ||||
|         minResponseBodyBytes = 42 | ||||
|     [http.middlewares.Middleware06] | ||||
|       [http.middlewares.Middleware06.contentType] | ||||
|         autoDetect = true | ||||
|     [http.middlewares.Middleware07] | ||||
|       [http.middlewares.Middleware07.digestAuth] | ||||
|         users = ["foobar", "foobar"] | ||||
| @@ -157,7 +158,6 @@ | ||||
|         authRequestHeaders = ["foobar", "foobar"] | ||||
|         [http.middlewares.Middleware09.forwardAuth.tls] | ||||
|           ca = "foobar" | ||||
|           caOptional = true | ||||
|           cert = "foobar" | ||||
|           key = "foobar" | ||||
|           insecureSkipVerify = true | ||||
| @@ -173,10 +173,6 @@ | ||||
|         addVaryHeader = true | ||||
|         allowedHosts = ["foobar", "foobar"] | ||||
|         hostsProxyHeaders = ["foobar", "foobar"] | ||||
|         sslRedirect = true | ||||
|         sslTemporaryRedirect = true | ||||
|         sslHost = "foobar" | ||||
|         sslForceHost = true | ||||
|         stsSeconds = 42 | ||||
|         stsIncludeSubdomains = true | ||||
|         stsPreload = true | ||||
| @@ -189,7 +185,6 @@ | ||||
|         contentSecurityPolicy = "foobar" | ||||
|         publicKey = "foobar" | ||||
|         referrerPolicy = "foobar" | ||||
|         featurePolicy = "foobar" | ||||
|         permissionsPolicy = "foobar" | ||||
|         isDevelopment = true | ||||
|         [http.middlewares.Middleware10.headers.customRequestHeaders] | ||||
| @@ -202,9 +197,9 @@ | ||||
|           name0 = "foobar" | ||||
|           name1 = "foobar" | ||||
|     [http.middlewares.Middleware11] | ||||
|       [http.middlewares.Middleware11.ipWhiteList] | ||||
|       [http.middlewares.Middleware11.ipAllowList] | ||||
|         sourceRange = ["foobar", "foobar"] | ||||
|         [http.middlewares.Middleware11.ipWhiteList.ipStrategy] | ||||
|         [http.middlewares.Middleware11.ipAllowList.ipStrategy] | ||||
|           depth = 42 | ||||
|           excludedIPs = ["foobar", "foobar"] | ||||
|     [http.middlewares.Middleware12] | ||||
| @@ -280,10 +275,12 @@ | ||||
|     [http.middlewares.Middleware21] | ||||
|       [http.middlewares.Middleware21.stripPrefix] | ||||
|         prefixes = ["foobar", "foobar"] | ||||
|         forceSlash = true | ||||
|     [http.middlewares.Middleware22] | ||||
|       [http.middlewares.Middleware22.stripPrefixRegex] | ||||
|         regex = ["foobar", "foobar"] | ||||
|     [http.middlewares.Middleware23] | ||||
|       [http.middlewares.Middleware23.grpcWeb] | ||||
|         allowOrigins = ["foobar", "foobar"] | ||||
|   [http.serversTransports] | ||||
|     [http.serversTransports.ServersTransport0] | ||||
|       serverName = "foobar" | ||||
| @@ -300,12 +297,18 @@ | ||||
|       [[http.serversTransports.ServersTransport0.certificates]] | ||||
|         certFile = "foobar" | ||||
|         keyFile = "foobar" | ||||
|  | ||||
|       [http.serversTransports.ServersTransport0.forwardingTimeouts] | ||||
|         dialTimeout = "42s" | ||||
|         responseHeaderTimeout = "42s" | ||||
|         idleConnTimeout = "42s" | ||||
|         readIdleTimeout = "42s" | ||||
|         pingTimeout = "42s" | ||||
|  | ||||
|       [http.serversTransports.ServersTransport0.spiffe] | ||||
|         ids = ["foobar", "foobar"] | ||||
|         trustDomain = "foobar" | ||||
|  | ||||
|     [http.serversTransports.ServersTransport1] | ||||
|       serverName = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -321,6 +324,7 @@ | ||||
|       [[http.serversTransports.ServersTransport1.certificates]] | ||||
|         certFile = "foobar" | ||||
|         keyFile = "foobar" | ||||
|  | ||||
|       [http.serversTransports.ServersTransport1.forwardingTimeouts] | ||||
|         dialTimeout = "42s" | ||||
|         responseHeaderTimeout = "42s" | ||||
| @@ -328,6 +332,10 @@ | ||||
|         readIdleTimeout = "42s" | ||||
|         pingTimeout = "42s" | ||||
|  | ||||
|       [http.serversTransports.ServersTransport1.spiffe] | ||||
|         ids = ["foobar", "foobar"] | ||||
|         trustDomain = "foobar" | ||||
|  | ||||
| [tcp] | ||||
|   [tcp.routers] | ||||
|     [tcp.routers.TCPRouter0] | ||||
| @@ -390,7 +398,7 @@ | ||||
|           weight = 42 | ||||
|   [tcp.middlewares] | ||||
|     [tcp.middlewares.TCPMiddleware00] | ||||
|       [tcp.middlewares.TCPMiddleware00.ipWhiteList] | ||||
|       [tcp.middlewares.TCPMiddleware00.ipAllowList] | ||||
|         sourceRange = ["foobar", "foobar"] | ||||
|     [tcp.middlewares.TCPMiddleware01] | ||||
|       [tcp.middlewares.TCPMiddleware01.inFlightConn] | ||||
| @@ -442,7 +450,6 @@ | ||||
|       cipherSuites = ["foobar", "foobar"] | ||||
|       curvePreferences = ["foobar", "foobar"] | ||||
|       sniStrict = true | ||||
|       preferServerCipherSuites = true | ||||
|       alpnProtocols = ["foobar", "foobar"] | ||||
|       [tls.options.Options0.clientAuth] | ||||
|         caFiles = ["foobar", "foobar"] | ||||
| @@ -453,7 +460,6 @@ | ||||
|       cipherSuites = ["foobar", "foobar"] | ||||
|       curvePreferences = ["foobar", "foobar"] | ||||
|       sniStrict = true | ||||
|       preferServerCipherSuites = true | ||||
|       alpnProtocols = ["foobar", "foobar"] | ||||
|       [tls.options.Options1.clientAuth] | ||||
|         caFiles = ["foobar", "foobar"] | ||||
|   | ||||
| @@ -58,11 +58,13 @@ http: | ||||
|           - url: foobar | ||||
|         healthCheck: | ||||
|           scheme: foobar | ||||
|           mode: foobar | ||||
|           path: foobar | ||||
|           method: foobar | ||||
|           status: 42 | ||||
|           port: 42 | ||||
|           interval: foobar | ||||
|           timeout: foobar | ||||
|           interval: 42s | ||||
|           timeout: 42s | ||||
|           hostname: foobar | ||||
|           followRedirects: true | ||||
|           headers: | ||||
| @@ -70,7 +72,7 @@ http: | ||||
|             name1: foobar | ||||
|         passHostHeader: true | ||||
|         responseForwarding: | ||||
|           flushInterval: foobar | ||||
|           flushInterval: 42s | ||||
|         serversTransport: foobar | ||||
|     Service02: | ||||
|       mirroring: | ||||
| @@ -139,8 +141,7 @@ http: | ||||
|           - foobar | ||||
|         minResponseBodyBytes: 42 | ||||
|     Middleware06: | ||||
|       contentType: | ||||
|         autoDetect: true | ||||
|       contentType: {} | ||||
|     Middleware07: | ||||
|       digestAuth: | ||||
|         users: | ||||
| @@ -162,7 +163,6 @@ http: | ||||
|         address: foobar | ||||
|         tls: | ||||
|           ca: foobar | ||||
|           caOptional: true | ||||
|           cert: foobar | ||||
|           key: foobar | ||||
|           insecureSkipVerify: true | ||||
| @@ -206,13 +206,9 @@ http: | ||||
|         hostsProxyHeaders: | ||||
|           - foobar | ||||
|           - foobar | ||||
|         sslRedirect: true | ||||
|         sslTemporaryRedirect: true | ||||
|         sslHost: foobar | ||||
|         sslProxyHeaders: | ||||
|           name0: foobar | ||||
|           name1: foobar | ||||
|         sslForceHost: true | ||||
|         stsSeconds: 42 | ||||
|         stsIncludeSubdomains: true | ||||
|         stsPreload: true | ||||
| @@ -225,11 +221,10 @@ http: | ||||
|         contentSecurityPolicy: foobar | ||||
|         publicKey: foobar | ||||
|         referrerPolicy: foobar | ||||
|         featurePolicy: foobar | ||||
|         permissionsPolicy: foobar | ||||
|         isDevelopment: true | ||||
|     Middleware11: | ||||
|       ipWhiteList: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - foobar | ||||
|           - foobar | ||||
| @@ -317,12 +312,16 @@ http: | ||||
|         prefixes: | ||||
|           - foobar | ||||
|           - foobar | ||||
|         forceSlash: true | ||||
|     Middleware22: | ||||
|       stripPrefixRegex: | ||||
|         regex: | ||||
|           - foobar | ||||
|           - foobar | ||||
|     Middleware23: | ||||
|       grpcWeb: | ||||
|         allowOrigins: | ||||
|           - foobar | ||||
|           - foobar | ||||
|   serversTransports: | ||||
|     ServersTransport0: | ||||
|       serverName: foobar | ||||
| @@ -344,6 +343,12 @@ http: | ||||
|         pingTimeout: 42s | ||||
|       disableHTTP2: true | ||||
|       peerCertURI: foobar | ||||
|       spiffe: | ||||
|         ids: | ||||
|           - foobar | ||||
|           - foobar | ||||
|         trustDomain: foobar | ||||
|  | ||||
|     ServersTransport1: | ||||
|       serverName: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -364,6 +369,12 @@ http: | ||||
|         pingTimeout: 42s | ||||
|       disableHTTP2: true | ||||
|       peerCertURI: foobar | ||||
|       spiffe: | ||||
|         ids: | ||||
|           - foobar | ||||
|           - foobar | ||||
|         trustDomain: foobar | ||||
|  | ||||
| tcp: | ||||
|   routers: | ||||
|     TCPRouter0: | ||||
| @@ -430,7 +441,7 @@ tcp: | ||||
|             weight: 42 | ||||
|   middlewares: | ||||
|     TCPMiddleware00: | ||||
|       ipWhiteList: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - foobar | ||||
|           - foobar | ||||
| @@ -490,7 +501,6 @@ tls: | ||||
|           - foobar | ||||
|         clientAuthType: foobar | ||||
|       sniStrict: true | ||||
|       preferServerCipherSuites: true | ||||
|       alpnProtocols: | ||||
|         - foobar | ||||
|         - foobar | ||||
| @@ -509,7 +519,6 @@ tls: | ||||
|           - foobar | ||||
|         clientAuthType: foobar | ||||
|       sniStrict: true | ||||
|       preferServerCipherSuites: true | ||||
|       alpnProtocols: | ||||
|         - foobar | ||||
|         - foobar | ||||
|   | ||||
| @@ -39,7 +39,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
| @@ -56,11 +56,11 @@ spec: | ||||
|                       - Rule | ||||
|                       type: string | ||||
|                     match: | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#rule' | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule' | ||||
|                       type: string | ||||
|                     middlewares: | ||||
|                       description: 'Middlewares defines the list of references to | ||||
|                         Middleware resources. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-middleware' | ||||
|                         Middleware resources. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-middleware' | ||||
|                       items: | ||||
|                         description: MiddlewareRef is a reference to a Middleware | ||||
|                           resource. | ||||
| @@ -79,7 +79,7 @@ spec: | ||||
|                       type: array | ||||
|                     priority: | ||||
|                       description: 'Priority defines the router''s priority. More | ||||
|                         info: https://doc.traefik.io/traefik/v2.9/routing/routers/#priority' | ||||
|                         info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority' | ||||
|                       type: integer | ||||
|                     services: | ||||
|                       description: Services defines the list of Service. It can contain | ||||
| @@ -145,7 +145,7 @@ spec: | ||||
|                             type: string | ||||
|                           sticky: | ||||
|                             description: 'Sticky defines the sticky sessions configuration. | ||||
|                               More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                               More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                             properties: | ||||
|                               cookie: | ||||
|                                 description: Cookie defines the sticky cookie configuration. | ||||
| @@ -190,16 +190,16 @@ spec: | ||||
|                   type: object | ||||
|                 type: array | ||||
|               tls: | ||||
|                 description: 'TLS defines the TLS configuration. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#tls' | ||||
|                 description: 'TLS defines the TLS configuration. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls' | ||||
|                 properties: | ||||
|                   certResolver: | ||||
|                     description: 'CertResolver defines the name of the certificate | ||||
|                       resolver to use. Cert resolvers have to be configured in the | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v2.9/https/acme/#certificate-resolvers' | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers' | ||||
|                     type: string | ||||
|                   domains: | ||||
|                     description: 'Domains defines the list of domains that will be | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#domains' | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains' | ||||
|                     items: | ||||
|                       description: Domain holds a domain name with SANs. | ||||
|                       properties: | ||||
| @@ -217,15 +217,15 @@ spec: | ||||
|                   options: | ||||
|                     description: 'Options defines the reference to a TLSOption, that | ||||
|                       specifies the parameters of the TLS connection. If not defined, | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#tls-options' | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: 'Name defines the name of the referenced TLSOption. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                         type: string | ||||
|                       namespace: | ||||
|                         description: 'Namespace defines the namespace of the referenced | ||||
|                           TLSOption. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                           TLSOption. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                         type: string | ||||
|                     required: | ||||
|                     - name | ||||
| @@ -241,11 +241,11 @@ spec: | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: 'Name defines the name of the referenced TLSStore. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                         type: string | ||||
|                       namespace: | ||||
|                         description: 'Namespace defines the namespace of the referenced | ||||
|                           TLSStore. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                           TLSStore. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                         type: string | ||||
|                     required: | ||||
|                     - name | ||||
| @@ -307,7 +307,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
| @@ -318,7 +318,7 @@ spec: | ||||
|                   description: RouteTCP holds the TCP route configuration. | ||||
|                   properties: | ||||
|                     match: | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#rule_1' | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule_1' | ||||
|                       type: string | ||||
|                     middlewares: | ||||
|                       description: Middlewares defines the list of references to MiddlewareTCP | ||||
| @@ -341,7 +341,7 @@ spec: | ||||
|                       type: array | ||||
|                     priority: | ||||
|                       description: 'Priority defines the router''s priority. More | ||||
|                         info: https://doc.traefik.io/traefik/v2.9/routing/routers/#priority_1' | ||||
|                         info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority_1' | ||||
|                       type: integer | ||||
|                     services: | ||||
|                       description: Services defines the list of TCP services. | ||||
| @@ -366,7 +366,7 @@ spec: | ||||
|                             x-kubernetes-int-or-string: true | ||||
|                           proxyProtocol: | ||||
|                             description: 'ProxyProtocol defines the PROXY protocol | ||||
|                               configuration. More info: https://doc.traefik.io/traefik/v2.9/routing/services/#proxy-protocol' | ||||
|                               configuration. More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol' | ||||
|                             properties: | ||||
|                               version: | ||||
|                                 description: Version defines the PROXY Protocol version | ||||
| @@ -397,16 +397,16 @@ spec: | ||||
|                 type: array | ||||
|               tls: | ||||
|                 description: 'TLS defines the TLS configuration on a layer 4 / TCP | ||||
|                   Route. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#tls_1' | ||||
|                   Route. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls_1' | ||||
|                 properties: | ||||
|                   certResolver: | ||||
|                     description: 'CertResolver defines the name of the certificate | ||||
|                       resolver to use. Cert resolvers have to be configured in the | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v2.9/https/acme/#certificate-resolvers' | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers' | ||||
|                     type: string | ||||
|                   domains: | ||||
|                     description: 'Domains defines the list of domains that will be | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#domains' | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains' | ||||
|                     items: | ||||
|                       description: Domain holds a domain name with SANs. | ||||
|                       properties: | ||||
| @@ -424,7 +424,7 @@ spec: | ||||
|                   options: | ||||
|                     description: 'Options defines the reference to a TLSOption, that | ||||
|                       specifies the parameters of the TLS connection. If not defined, | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#tls-options' | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: Name defines the name of the referenced Traefik | ||||
| @@ -518,7 +518,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
| @@ -597,7 +597,7 @@ spec: | ||||
|     schema: | ||||
|       openAPIV3Schema: | ||||
|         description: 'Middleware is the CRD implementation of a Traefik Middleware. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/overview/' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/overview/' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -617,7 +617,7 @@ spec: | ||||
|               addPrefix: | ||||
|                 description: 'AddPrefix holds the add prefix middleware configuration. | ||||
|                   This middleware updates the path of a request before forwarding | ||||
|                   it. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/addprefix/' | ||||
|                   it. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/' | ||||
|                 properties: | ||||
|                   prefix: | ||||
|                     description: Prefix is the string to add before the current path | ||||
| @@ -627,11 +627,11 @@ spec: | ||||
|               basicAuth: | ||||
|                 description: 'BasicAuth holds the basic auth middleware configuration. | ||||
|                   This middleware restricts access to your services to known users. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/' | ||||
|                 properties: | ||||
|                   headerField: | ||||
|                     description: 'HeaderField defines a header field to store the | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/#headerfield' | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield' | ||||
|                     type: string | ||||
|                   realm: | ||||
|                     description: 'Realm allows the protected resources on a server | ||||
| @@ -651,7 +651,7 @@ spec: | ||||
|               buffering: | ||||
|                 description: 'Buffering holds the buffering middleware configuration. | ||||
|                   This middleware retries or limits the size of requests that can | ||||
|                   be forwarded to backends. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/buffering/#maxrequestbodybytes' | ||||
|                   be forwarded to backends. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes' | ||||
|                 properties: | ||||
|                   maxRequestBodyBytes: | ||||
|                     description: 'MaxRequestBodyBytes defines the maximum allowed | ||||
| @@ -684,13 +684,13 @@ spec: | ||||
|                   retryExpression: | ||||
|                     description: 'RetryExpression defines the retry conditions. It | ||||
|                       is a logical combination of functions with operators AND (&&) | ||||
|                       and OR (||). More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/buffering/#retryexpression' | ||||
|                       and OR (||). More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression' | ||||
|                     type: string | ||||
|                 type: object | ||||
|               chain: | ||||
|                 description: 'Chain holds the configuration of the chain middleware. | ||||
|                   This middleware enables to define reusable combinations of other | ||||
|                   pieces of middleware. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/chain/' | ||||
|                   pieces of middleware. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/chain/' | ||||
|                 properties: | ||||
|                   middlewares: | ||||
|                     description: Middlewares is the list of MiddlewareRef which composes | ||||
| @@ -744,12 +744,13 @@ spec: | ||||
|               compress: | ||||
|                 description: 'Compress holds the compress middleware configuration. | ||||
|                   This middleware compresses responses before sending them to the | ||||
|                   client, using gzip compression. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/compress/' | ||||
|                   client, using gzip compression. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/' | ||||
|                 properties: | ||||
|                   excludedContentTypes: | ||||
|                     description: ExcludedContentTypes defines the list of content | ||||
|                       types to compare the Content-Type header of the incoming requests | ||||
|                       and responses before compressing. | ||||
|                       and responses before compressing. `application/grpc` is always | ||||
|                       excluded. | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
| @@ -761,28 +762,18 @@ spec: | ||||
|                 type: object | ||||
|               contentType: | ||||
|                 description: ContentType holds the content-type middleware configuration. | ||||
|                   This middleware exists to enable the correct behavior until at least | ||||
|                   the default one can be changed in a future version. | ||||
|                 properties: | ||||
|                   autoDetect: | ||||
|                     description: AutoDetect specifies whether to let the `Content-Type` | ||||
|                       header, if it has not been set by the backend, be automatically | ||||
|                       set to a value derived from the contents of the response. As | ||||
|                       a proxy, the default behavior should be to leave the header | ||||
|                       alone, regardless of what the backend did with it. However, | ||||
|                       the historic default was to always auto-detect and set the header | ||||
|                       if it was nil, and it is going to be kept that way in order | ||||
|                       to support users currently relying on it. | ||||
|                     type: boolean | ||||
|                   This middleware sets the `Content-Type` header value to the media | ||||
|                   type detected from the response content, when it is not set by the | ||||
|                   backend. | ||||
|                 type: object | ||||
|               digestAuth: | ||||
|                 description: 'DigestAuth holds the digest auth middleware configuration. | ||||
|                   This middleware restricts access to your services to known users. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/digestauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/' | ||||
|                 properties: | ||||
|                   headerField: | ||||
|                     description: 'HeaderField defines a header field to store the | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/#headerfield' | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield' | ||||
|                     type: string | ||||
|                   realm: | ||||
|                     description: 'Realm allows the protected resources on a server | ||||
| @@ -801,7 +792,7 @@ spec: | ||||
|               errors: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/errorpages/' | ||||
|                   to configured ranges of HTTP Status codes. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/' | ||||
|                 properties: | ||||
|                   query: | ||||
|                     description: Query defines the URL for the error page (hosted | ||||
| @@ -810,7 +801,7 @@ spec: | ||||
|                     type: string | ||||
|                   service: | ||||
|                     description: 'Service defines the reference to a Kubernetes Service | ||||
|                       that will serve the error page. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/errorpages/#service' | ||||
|                       that will serve the error page. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/#service' | ||||
|                     properties: | ||||
|                       kind: | ||||
|                         description: Kind defines the kind of the Service. | ||||
| @@ -867,7 +858,7 @@ spec: | ||||
|                         type: string | ||||
|                       sticky: | ||||
|                         description: 'Sticky defines the sticky sessions configuration. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                         properties: | ||||
|                           cookie: | ||||
|                             description: Cookie defines the sticky cookie configuration. | ||||
| @@ -916,7 +907,7 @@ spec: | ||||
|               forwardAuth: | ||||
|                 description: 'ForwardAuth holds the forward auth middleware configuration. | ||||
|                   This middleware delegates the request authentication to a Service. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/forwardauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/' | ||||
|                 properties: | ||||
|                   address: | ||||
|                     description: Address defines the authentication server address. | ||||
| @@ -939,14 +930,12 @@ spec: | ||||
|                     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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/forwardauth/#authresponseheadersregex' | ||||
|                       the regex. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex' | ||||
|                     type: string | ||||
|                   tls: | ||||
|                     description: TLS defines the configuration used to secure the | ||||
|                       connection to the authentication server. | ||||
|                     properties: | ||||
|                       caOptional: | ||||
|                         type: boolean | ||||
|                       caSecret: | ||||
|                         description: CASecret is the name of the referenced Kubernetes | ||||
|                           Secret containing the CA to validate the server certificate. | ||||
| @@ -967,10 +956,21 @@ spec: | ||||
|                       forward) all X-Forwarded-* headers.' | ||||
|                     type: boolean | ||||
|                 type: object | ||||
|               grpcWeb: | ||||
|                 description: GrpcWeb holds the gRPC web middleware configuration. | ||||
|                   This middleware converts a gRPC web request to an HTTP/2 gRPC request. | ||||
|                 properties: | ||||
|                   allowOrigins: | ||||
|                     description: AllowOrigins is a list of allowable origins. Can | ||||
|                       also be a wildcard origin "*". | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
|                 type: object | ||||
|               headers: | ||||
|                 description: 'Headers holds the headers middleware configuration. | ||||
|                   This middleware manages the requests and responses headers. More | ||||
|                   info: https://doc.traefik.io/traefik/v2.9/middlewares/http/headers/#customrequestheaders' | ||||
|                   info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders' | ||||
|                 properties: | ||||
|                   accessControlAllowCredentials: | ||||
|                     description: AccessControlAllowCredentials defines whether the | ||||
| @@ -1054,9 +1054,6 @@ spec: | ||||
|                     description: CustomResponseHeaders defines the header names and | ||||
|                       values to apply to the response. | ||||
|                     type: object | ||||
|                   featurePolicy: | ||||
|                     description: 'Deprecated: use PermissionsPolicy instead.' | ||||
|                     type: string | ||||
|                   forceSTSHeader: | ||||
|                     description: ForceSTSHeader defines whether to add the STS header | ||||
|                       even when the connection is HTTP. | ||||
| @@ -1092,12 +1089,6 @@ spec: | ||||
|                       value. This allows sites to control whether browsers forward | ||||
|                       the Referer header to other sites. | ||||
|                     type: string | ||||
|                   sslForceHost: | ||||
|                     description: 'Deprecated: use RedirectRegex instead.' | ||||
|                     type: boolean | ||||
|                   sslHost: | ||||
|                     description: 'Deprecated: use RedirectRegex instead.' | ||||
|                     type: string | ||||
|                   sslProxyHeaders: | ||||
|                     additionalProperties: | ||||
|                       type: string | ||||
| @@ -1106,14 +1097,6 @@ spec: | ||||
|                       useful when using other proxies (example: "X-Forwarded-Proto": | ||||
|                       "https").' | ||||
|                     type: object | ||||
|                   sslRedirect: | ||||
|                     description: 'Deprecated: use EntryPoint redirection or RedirectScheme | ||||
|                       instead.' | ||||
|                     type: boolean | ||||
|                   sslTemporaryRedirect: | ||||
|                     description: 'Deprecated: use EntryPoint redirection or RedirectScheme | ||||
|                       instead.' | ||||
|                     type: boolean | ||||
|                   stsIncludeSubdomains: | ||||
|                     description: STSIncludeSubdomains defines whether the includeSubDomains | ||||
|                       directive is appended to the Strict-Transport-Security header. | ||||
| @@ -1131,7 +1114,7 @@ spec: | ||||
|               inFlightReq: | ||||
|                 description: 'InFlightReq holds the in-flight request middleware configuration. | ||||
|                   This middleware limits the number of requests being processed and | ||||
|                   served concurrently. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/inflightreq/' | ||||
|                   served concurrently. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/' | ||||
|                 properties: | ||||
|                   amount: | ||||
|                     description: Amount defines the maximum amount of allowed simultaneous | ||||
| @@ -1145,11 +1128,11 @@ spec: | ||||
|                       group requests as originating from a common source. 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. More | ||||
|                       info: https://doc.traefik.io/traefik/v2.9/middlewares/http/inflightreq/#sourcecriterion' | ||||
|                       info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion' | ||||
|                     properties: | ||||
|                       ipStrategy: | ||||
|                         description: 'IPStrategy holds the IP strategy configuration | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                         properties: | ||||
|                           depth: | ||||
|                             description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -1174,14 +1157,14 @@ spec: | ||||
|                         type: boolean | ||||
|                     type: object | ||||
|                 type: object | ||||
|               ipWhiteList: | ||||
|                 description: 'IPWhiteList holds the IP whitelist middleware configuration. | ||||
|               ipAllowList: | ||||
|                 description: 'IPAllowList holds the IP allowlist middleware configuration. | ||||
|                   This middleware accepts / refuses requests based on the client IP. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/' | ||||
|                 properties: | ||||
|                   ipStrategy: | ||||
|                     description: 'IPStrategy holds the IP strategy configuration used | ||||
|                       by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                       by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                     properties: | ||||
|                       depth: | ||||
|                         description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -1205,7 +1188,7 @@ spec: | ||||
|               passTLSClientCert: | ||||
|                 description: 'PassTLSClientCert holds the pass TLS client cert middleware | ||||
|                   configuration. This middleware adds the selected data from the passed | ||||
|                   client TLS certificate to a header. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/passtlsclientcert/' | ||||
|                   client TLS certificate to a header. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/' | ||||
|                 properties: | ||||
|                   info: | ||||
|                     description: Info selects the specific client certificate details | ||||
| @@ -1312,7 +1295,7 @@ spec: | ||||
|               rateLimit: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ratelimit/' | ||||
|                   allows one to define what fair is. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ratelimit/' | ||||
|                 properties: | ||||
|                   average: | ||||
|                     description: Average is the maximum rate, by default in requests/s, | ||||
| @@ -1345,7 +1328,7 @@ spec: | ||||
|                     properties: | ||||
|                       ipStrategy: | ||||
|                         description: 'IPStrategy holds the IP strategy configuration | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                         properties: | ||||
|                           depth: | ||||
|                             description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -1373,7 +1356,7 @@ spec: | ||||
|               redirectRegex: | ||||
|                 description: 'RedirectRegex holds the redirect regex middleware configuration. | ||||
|                   This middleware redirects a request using regex matching and replacement. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/redirectregex/#regex' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex' | ||||
|                 properties: | ||||
|                   permanent: | ||||
|                     description: Permanent defines whether the redirection is permanent | ||||
| @@ -1391,7 +1374,7 @@ spec: | ||||
|               redirectScheme: | ||||
|                 description: 'RedirectScheme holds the redirect scheme middleware | ||||
|                   configuration. This middleware redirects requests from a scheme/port | ||||
|                   to another. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/redirectscheme/' | ||||
|                   to another. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/' | ||||
|                 properties: | ||||
|                   permanent: | ||||
|                     description: Permanent defines whether the redirection is permanent | ||||
| @@ -1407,7 +1390,7 @@ spec: | ||||
|               replacePath: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/replacepath/' | ||||
|                   original path in an X-Replaced-Path header. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/' | ||||
|                 properties: | ||||
|                   path: | ||||
|                     description: Path defines the path to use as replacement in the | ||||
| @@ -1417,7 +1400,7 @@ spec: | ||||
|               replacePathRegex: | ||||
|                 description: 'ReplacePathRegex holds the replace path regex middleware | ||||
|                   configuration. This middleware replaces the path of a URL using | ||||
|                   regex matching and replacement. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/replacepathregex/' | ||||
|                   regex matching and replacement. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/' | ||||
|                 properties: | ||||
|                   regex: | ||||
|                     description: Regex defines the regular expression used to match | ||||
| @@ -1433,7 +1416,7 @@ spec: | ||||
|                   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. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/retry/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/' | ||||
|                 properties: | ||||
|                   attempts: | ||||
|                     description: Attempts defines how many times the request should | ||||
| @@ -1453,13 +1436,8 @@ spec: | ||||
|               stripPrefix: | ||||
|                 description: 'StripPrefix holds the strip prefix middleware configuration. | ||||
|                   This middleware removes the specified prefixes from the URL path. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/stripprefix/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/' | ||||
|                 properties: | ||||
|                   forceSlash: | ||||
|                     description: 'ForceSlash ensures that the resulting stripped path | ||||
|                       is not the empty string, by replacing it with / when necessary. | ||||
|                       Default: true.' | ||||
|                     type: boolean | ||||
|                   prefixes: | ||||
|                     description: Prefixes defines the prefixes to strip from the request | ||||
|                       URL. | ||||
| @@ -1470,7 +1448,7 @@ spec: | ||||
|               stripPrefixRegex: | ||||
|                 description: 'StripPrefixRegex holds the strip prefix regex middleware | ||||
|                   configuration. This middleware removes the matching prefixes from | ||||
|                   the URL path. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/stripprefixregex/' | ||||
|                   the URL path. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/' | ||||
|                 properties: | ||||
|                   regex: | ||||
|                     description: Regex defines the regular expression to match the | ||||
| @@ -1514,7 +1492,7 @@ spec: | ||||
|     schema: | ||||
|       openAPIV3Schema: | ||||
|         description: 'MiddlewareTCP is the CRD implementation of a Traefik TCP middleware. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/middlewares/overview/' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/middlewares/overview/' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -1541,8 +1519,8 @@ spec: | ||||
|                     format: int64 | ||||
|                     type: integer | ||||
|                 type: object | ||||
|               ipWhiteList: | ||||
|                 description: IPWhiteList defines the IPWhiteList middleware configuration. | ||||
|               ipAllowList: | ||||
|                 description: IPAllowList defines the IPAllowList middleware configuration. | ||||
|                 properties: | ||||
|                   sourceRange: | ||||
|                     description: SourceRange defines the allowed IPs (or ranges of | ||||
| @@ -1588,7 +1566,7 @@ spec: | ||||
|         description: 'ServersTransport is the CRD implementation of a ServersTransport. | ||||
|           If no serversTransport is specified, the default@internal will be used. | ||||
|           The default@internal serversTransport is created from the static configuration. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/routing/services/#serverstransport_1' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_1' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -1679,6 +1657,19 @@ spec: | ||||
|                 description: ServerName defines the server name used to contact the | ||||
|                   server. | ||||
|                 type: string | ||||
|               spiffe: | ||||
|                 description: Spiffe defines the SPIFFE configuration. | ||||
|                 properties: | ||||
|                   ids: | ||||
|                     description: IDs defines the allowed SPIFFE IDs (takes precedence | ||||
|                       over the SPIFFE TrustDomain). | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
|                   trustDomain: | ||||
|                     description: TrustDomain defines the allowed SPIFFE trust domain. | ||||
|                     type: string | ||||
|                 type: object | ||||
|             type: object | ||||
|         required: | ||||
|         - metadata | ||||
| @@ -1715,7 +1706,7 @@ spec: | ||||
|       openAPIV3Schema: | ||||
|         description: '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/v2.9/https/tls/#tls-options' | ||||
|           https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -1735,13 +1726,13 @@ spec: | ||||
|               alpnProtocols: | ||||
|                 description: 'ALPNProtocols defines the list of supported application | ||||
|                   level protocols for the TLS handshake, in order of preference. More | ||||
|                   info: https://doc.traefik.io/traefik/v2.9/https/tls/#alpn-protocols' | ||||
|                   info: https://doc.traefik.io/traefik/v3.0/https/tls/#alpn-protocols' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
|               cipherSuites: | ||||
|                 description: 'CipherSuites defines the list of supported cipher suites | ||||
|                   for TLS versions up to TLS 1.2. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#cipher-suites' | ||||
|                   for TLS versions up to TLS 1.2. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#cipher-suites' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
| @@ -1768,7 +1759,7 @@ spec: | ||||
|                 type: object | ||||
|               curvePreferences: | ||||
|                 description: 'CurvePreferences defines the preferred elliptic curves | ||||
|                   in a specific order. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#curve-preferences' | ||||
|                   in a specific order. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#curve-preferences' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
| @@ -1782,12 +1773,6 @@ spec: | ||||
|                   will accept. Possible values: VersionTLS10, VersionTLS11, VersionTLS12, | ||||
|                   VersionTLS13. Default: VersionTLS10.' | ||||
|                 type: string | ||||
|               preferServerCipherSuites: | ||||
|                 description: 'PreferServerCipherSuites defines whether the server | ||||
|                   chooses a cipher suite among his own instead of among the client''s. | ||||
|                   It is enabled automatically when minVersion or maxVersion is set. | ||||
|                   Deprecated: https://github.com/golang/go/issues/45430' | ||||
|                 type: boolean | ||||
|               sniStrict: | ||||
|                 description: SniStrict defines whether Traefik allows connections | ||||
|                   from clients connections that do not specify a server_name extension. | ||||
| @@ -1829,7 +1814,7 @@ spec: | ||||
|         description: 'TLSStore is the CRD implementation of a Traefik TLS Store. 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. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#certificates-stores' | ||||
|           namespaces. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#certificates-stores' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -1927,7 +1912,7 @@ spec: | ||||
|       openAPIV3Schema: | ||||
|         description: 'TraefikService is the CRD implementation of a Traefik Service. | ||||
|           TraefikService object allows to: - Apply weight to Services on load-balancing | ||||
|           - Mirror traffic on services More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-traefikservice' | ||||
|           - Mirror traffic on services More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-traefikservice' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -2026,7 +2011,7 @@ spec: | ||||
|                           type: string | ||||
|                         sticky: | ||||
|                           description: 'Sticky defines the sticky sessions configuration. | ||||
|                             More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                             More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                           properties: | ||||
|                             cookie: | ||||
|                               description: Cookie defines the sticky cookie configuration. | ||||
| @@ -2110,7 +2095,7 @@ spec: | ||||
|                     type: string | ||||
|                   sticky: | ||||
|                     description: 'Sticky defines the sticky sessions configuration. | ||||
|                       More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                       More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                     properties: | ||||
|                       cookie: | ||||
|                         description: Cookie defines the sticky cookie configuration. | ||||
| @@ -2210,7 +2195,7 @@ spec: | ||||
|                           type: string | ||||
|                         sticky: | ||||
|                           description: 'Sticky defines the sticky sessions configuration. | ||||
|                             More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                             More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                           properties: | ||||
|                             cookie: | ||||
|                               description: Cookie defines the sticky cookie configuration. | ||||
| @@ -2249,7 +2234,7 @@ spec: | ||||
|                     type: array | ||||
|                   sticky: | ||||
|                     description: 'Sticky defines whether sticky sessions are enabled. | ||||
|                       More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#stickiness-and-load-balancing' | ||||
|                       More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#stickiness-and-load-balancing' | ||||
|                     properties: | ||||
|                       cookie: | ||||
|                         description: Cookie defines the sticky cookie configuration. | ||||
|   | ||||
| @@ -148,7 +148,7 @@ spec: | ||||
|         - name: whoamitcp | ||||
|           port: 8080 | ||||
|       middlewares: | ||||
|         - name: ipwhitelist | ||||
|         - name: ipallowlist | ||||
|   tls: | ||||
|     secretName: foosecret | ||||
|     passthrough: false | ||||
| @@ -193,7 +193,6 @@ spec: | ||||
|       - foobar | ||||
|     clientAuthType: RequireAndVerifyClientCert | ||||
|   sniStrict: true | ||||
|   preferServerCipherSuites: true | ||||
|   alpnProtocols: | ||||
|     - foobar | ||||
|     - foobar | ||||
|   | ||||
| @@ -25,7 +25,7 @@ spec: | ||||
|       serviceAccountName: traefik-controller | ||||
|       containers: | ||||
|         - name: traefik | ||||
|           image: traefik:v2.9 | ||||
|           image: traefik:v3.0 | ||||
|           args: | ||||
|             - --entrypoints.web.address=:80 | ||||
|             - --entrypoints.websecure.address=:443 | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
| | `traefik/http/middlewares/Middleware05/compress/excludedContentTypes/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware05/compress/excludedContentTypes/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware05/compress/minResponseBodyBytes` | `42` | | ||||
| | `traefik/http/middlewares/Middleware06/contentType/autoDetect` | `true` | | ||||
| | `traefik/http/middlewares/Middleware06/contentType` | `` | | ||||
| | `traefik/http/middlewares/Middleware07/digestAuth/headerField` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware07/digestAuth/realm` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware07/digestAuth/removeHeader` | `true` | | ||||
| @@ -37,7 +37,6 @@ | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/authResponseHeaders/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/authResponseHeadersRegex` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/tls/ca` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/tls/caOptional` | `true` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/tls/cert` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/tls/insecureSkipVerify` | `true` | | ||||
| | `traefik/http/middlewares/Middleware09/forwardAuth/tls/key` | `foobar` | | ||||
| @@ -66,7 +65,6 @@ | ||||
| | `traefik/http/middlewares/Middleware10/headers/customRequestHeaders/name1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/customResponseHeaders/name0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/customResponseHeaders/name1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/featurePolicy` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/forceSTSHeader` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/frameDeny` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/hostsProxyHeaders/0` | `foobar` | | ||||
| @@ -75,20 +73,16 @@ | ||||
| | `traefik/http/middlewares/Middleware10/headers/permissionsPolicy` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/publicKey` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/referrerPolicy` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslForceHost` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslHost` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslProxyHeaders/name0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslProxyHeaders/name1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslRedirect` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/sslTemporaryRedirect` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/stsIncludeSubdomains` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/stsPreload` | `true` | | ||||
| | `traefik/http/middlewares/Middleware10/headers/stsSeconds` | `42` | | ||||
| | `traefik/http/middlewares/Middleware11/ipWhiteList/ipStrategy/depth` | `42` | | ||||
| | `traefik/http/middlewares/Middleware11/ipWhiteList/ipStrategy/excludedIPs/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipWhiteList/ipStrategy/excludedIPs/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipWhiteList/sourceRange/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipWhiteList/sourceRange/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipAllowList/ipStrategy/depth` | `42` | | ||||
| | `traefik/http/middlewares/Middleware11/ipAllowList/ipStrategy/excludedIPs/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipAllowList/ipStrategy/excludedIPs/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipAllowList/sourceRange/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware11/ipAllowList/sourceRange/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware12/inFlightReq/amount` | `42` | | ||||
| | `traefik/http/middlewares/Middleware12/inFlightReq/sourceCriterion/ipStrategy/depth` | `42` | | ||||
| | `traefik/http/middlewares/Middleware12/inFlightReq/sourceCriterion/ipStrategy/excludedIPs/0` | `foobar` | | ||||
| @@ -135,11 +129,12 @@ | ||||
| | `traefik/http/middlewares/Middleware19/replacePathRegex/replacement` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware20/retry/attempts` | `42` | | ||||
| | `traefik/http/middlewares/Middleware20/retry/initialInterval` | `42s` | | ||||
| | `traefik/http/middlewares/Middleware21/stripPrefix/forceSlash` | `true` | | ||||
| | `traefik/http/middlewares/Middleware21/stripPrefix/prefixes/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware21/stripPrefix/prefixes/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware22/stripPrefixRegex/regex/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware22/stripPrefixRegex/regex/1` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware23/grpcWeb/allowOrigins/0` | `foobar` | | ||||
| | `traefik/http/middlewares/Middleware23/grpcWeb/allowOrigins/1` | `foobar` | | ||||
| | `traefik/http/routers/Router0/entryPoints/0` | `foobar` | | ||||
| | `traefik/http/routers/Router0/entryPoints/1` | `foobar` | | ||||
| | `traefik/http/routers/Router0/middlewares/0` | `foobar` | | ||||
| @@ -186,6 +181,9 @@ | ||||
| | `traefik/http/serversTransports/ServersTransport0/rootCAs/0` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport0/rootCAs/1` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport0/serverName` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport0/spiffe/ids/0` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport0/spiffe/ids/1` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport0/spiffe/trustDomain` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/certificates/0/certFile` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/certificates/0/keyFile` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/certificates/1/certFile` | `foobar` | | ||||
| @@ -202,18 +200,23 @@ | ||||
| | `traefik/http/serversTransports/ServersTransport1/rootCAs/0` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/rootCAs/1` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/serverName` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/spiffe/ids/0` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/spiffe/ids/1` | `foobar` | | ||||
| | `traefik/http/serversTransports/ServersTransport1/spiffe/trustDomain` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/followRedirects` | `true` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/headers/name0` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/headers/name1` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/hostname` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/interval` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/interval` | `42s` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/method` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/mode` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/path` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/port` | `42` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/scheme` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/timeout` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/status` | `42` | | ||||
| | `traefik/http/services/Service01/loadBalancer/healthCheck/timeout` | `42s` | | ||||
| | `traefik/http/services/Service01/loadBalancer/passHostHeader` | `true` | | ||||
| | `traefik/http/services/Service01/loadBalancer/responseForwarding/flushInterval` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/responseForwarding/flushInterval` | `42s` | | ||||
| | `traefik/http/services/Service01/loadBalancer/servers/0/url` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/servers/1/url` | `foobar` | | ||||
| | `traefik/http/services/Service01/loadBalancer/serversTransport` | `foobar` | | ||||
| @@ -240,8 +243,8 @@ | ||||
| | `traefik/http/services/Service04/failover/fallback` | `foobar` | | ||||
| | `traefik/http/services/Service04/failover/healthCheck` | `` | | ||||
| | `traefik/http/services/Service04/failover/service` | `foobar` | | ||||
| | `traefik/tcp/middlewares/TCPMiddleware00/ipWhiteList/sourceRange/0` | `foobar` | | ||||
| | `traefik/tcp/middlewares/TCPMiddleware00/ipWhiteList/sourceRange/1` | `foobar` | | ||||
| | `traefik/tcp/middlewares/TCPMiddleware00/ipAllowList/sourceRange/0` | `foobar` | | ||||
| | `traefik/tcp/middlewares/TCPMiddleware00/ipAllowList/sourceRange/1` | `foobar` | | ||||
| | `traefik/tcp/middlewares/TCPMiddleware01/inFlightConn/amount` | `42` | | ||||
| | `traefik/tcp/routers/TCPRouter0/entryPoints/0` | `foobar` | | ||||
| | `traefik/tcp/routers/TCPRouter0/entryPoints/1` | `foobar` | | ||||
| @@ -302,7 +305,6 @@ | ||||
| | `traefik/tls/options/Options0/curvePreferences/1` | `foobar` | | ||||
| | `traefik/tls/options/Options0/maxVersion` | `foobar` | | ||||
| | `traefik/tls/options/Options0/minVersion` | `foobar` | | ||||
| | `traefik/tls/options/Options0/preferServerCipherSuites` | `true` | | ||||
| | `traefik/tls/options/Options0/sniStrict` | `true` | | ||||
| | `traefik/tls/options/Options1/alpnProtocols/0` | `foobar` | | ||||
| | `traefik/tls/options/Options1/alpnProtocols/1` | `foobar` | | ||||
| @@ -315,7 +317,6 @@ | ||||
| | `traefik/tls/options/Options1/curvePreferences/1` | `foobar` | | ||||
| | `traefik/tls/options/Options1/maxVersion` | `foobar` | | ||||
| | `traefik/tls/options/Options1/minVersion` | `foobar` | | ||||
| | `traefik/tls/options/Options1/preferServerCipherSuites` | `true` | | ||||
| | `traefik/tls/options/Options1/sniStrict` | `true` | | ||||
| | `traefik/tls/stores/Store0/defaultCertificate/certFile` | `foobar` | | ||||
| | `traefik/tls/stores/Store0/defaultCertificate/keyFile` | `foobar` | | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
| "traefik.http.middlewares.middleware05.compress": "true", | ||||
| "traefik.http.middlewares.middleware05.compress.excludedcontenttypes": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware05.compress.minresponsebodybytes": "42", | ||||
| "traefik.http.middlewares.middleware06.contenttype.autodetect": "true", | ||||
| "traefik.http.middlewares.middleware06.contenttype": "true", | ||||
| "traefik.http.middlewares.middleware07.digestauth.headerfield": "foobar", | ||||
| "traefik.http.middlewares.middleware07.digestauth.realm": "foobar", | ||||
| "traefik.http.middlewares.middleware07.digestauth.removeheader": "true", | ||||
| @@ -31,7 +31,6 @@ | ||||
| "traefik.http.middlewares.middleware09.forwardauth.authresponseheaders": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.authresponseheadersregex": "foobar", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.tls.ca": "foobar", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.tls.caoptional": "true", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.tls.cert": "foobar", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.tls.insecureskipverify": "true", | ||||
| "traefik.http.middlewares.middleware09.forwardauth.tls.key": "foobar", | ||||
| @@ -54,7 +53,6 @@ | ||||
| "traefik.http.middlewares.middleware10.headers.customrequestheaders.name1": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.customresponseheaders.name0": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.customresponseheaders.name1": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.featurepolicy": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.forcestsheader": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.framedeny": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.hostsproxyheaders": "foobar, foobar", | ||||
| @@ -62,18 +60,14 @@ | ||||
| "traefik.http.middlewares.middleware10.headers.permissionspolicy": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.publickey": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.referrerpolicy": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.sslforcehost": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.sslhost": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.sslproxyheaders.name0": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.sslproxyheaders.name1": "foobar", | ||||
| "traefik.http.middlewares.middleware10.headers.sslredirect": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.ssltemporaryredirect": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.stsincludesubdomains": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.stspreload": "true", | ||||
| "traefik.http.middlewares.middleware10.headers.stsseconds": "42", | ||||
| "traefik.http.middlewares.middleware11.ipwhitelist.ipstrategy.depth": "42", | ||||
| "traefik.http.middlewares.middleware11.ipwhitelist.ipstrategy.excludedips": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware11.ipwhitelist.sourcerange": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware11.ipallowlist.ipstrategy.depth": "42", | ||||
| "traefik.http.middlewares.middleware11.ipallowlist.ipstrategy.excludedips": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware11.ipallowlist.sourcerange": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware12.inflightreq.amount": "42", | ||||
| "traefik.http.middlewares.middleware12.inflightreq.sourcecriterion.ipstrategy.depth": "42", | ||||
| "traefik.http.middlewares.middleware12.inflightreq.sourcecriterion.ipstrategy.excludedips": "foobar, foobar", | ||||
| @@ -118,9 +112,9 @@ | ||||
| "traefik.http.middlewares.middleware19.replacepathregex.replacement": "foobar", | ||||
| "traefik.http.middlewares.middleware20.retry.attempts": "42", | ||||
| "traefik.http.middlewares.middleware20.retry.initialinterval": "42", | ||||
| "traefik.http.middlewares.middleware21.stripprefix.forceslash": "true", | ||||
| "traefik.http.middlewares.middleware21.stripprefix.prefixes": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware22.stripprefixregex.regex": "foobar, foobar", | ||||
| "traefik.http.middlewares.middleware23.grpcweb.alloworigins": "foobar, foobar", | ||||
| "traefik.http.routers.router0.entrypoints": "foobar, foobar", | ||||
| "traefik.http.routers.router0.middlewares": "foobar, foobar", | ||||
| "traefik.http.routers.router0.priority": "42", | ||||
| @@ -149,14 +143,16 @@ | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.headers.name0": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.headers.name1": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.hostname": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.interval": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.interval": "42s", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.path": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.method": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.status": "42", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.port": "42", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.scheme": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.timeout": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.mode": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.healthcheck.timeout": "42s", | ||||
| "traefik.http.services.service01.loadbalancer.passhostheader": "true", | ||||
| "traefik.http.services.service01.loadbalancer.responseforwarding.flushinterval": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.responseforwarding.flushinterval": "42s", | ||||
| "traefik.http.services.service01.loadbalancer.serverstransport": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.sticky.cookie": "true", | ||||
| "traefik.http.services.service01.loadbalancer.sticky.cookie.httponly": "true", | ||||
| @@ -165,7 +161,7 @@ | ||||
| "traefik.http.services.service01.loadbalancer.sticky.cookie.secure": "true", | ||||
| "traefik.http.services.service01.loadbalancer.server.port": "foobar", | ||||
| "traefik.http.services.service01.loadbalancer.server.scheme": "foobar", | ||||
| "traefik.tcp.middlewares.tcpmiddleware00.ipwhitelist.sourcerange": "foobar, foobar", | ||||
| "traefik.tcp.middlewares.tcpmiddleware00.ipallowlist.sourcerange": "foobar, foobar", | ||||
| "traefik.tcp.middlewares.tcpmiddleware01.inflightconn.amount": "42", | ||||
| "traefik.tcp.routers.tcprouter0.entrypoints": "foobar, foobar", | ||||
| "traefik.tcp.routers.tcprouter0.middlewares": "foobar, foobar", | ||||
|   | ||||
| @@ -39,7 +39,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
| @@ -56,11 +56,11 @@ spec: | ||||
|                       - Rule | ||||
|                       type: string | ||||
|                     match: | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#rule' | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule' | ||||
|                       type: string | ||||
|                     middlewares: | ||||
|                       description: 'Middlewares defines the list of references to | ||||
|                         Middleware resources. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-middleware' | ||||
|                         Middleware resources. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-middleware' | ||||
|                       items: | ||||
|                         description: MiddlewareRef is a reference to a Middleware | ||||
|                           resource. | ||||
| @@ -79,7 +79,7 @@ spec: | ||||
|                       type: array | ||||
|                     priority: | ||||
|                       description: 'Priority defines the router''s priority. More | ||||
|                         info: https://doc.traefik.io/traefik/v2.9/routing/routers/#priority' | ||||
|                         info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority' | ||||
|                       type: integer | ||||
|                     services: | ||||
|                       description: Services defines the list of Service. It can contain | ||||
| @@ -145,7 +145,7 @@ spec: | ||||
|                             type: string | ||||
|                           sticky: | ||||
|                             description: 'Sticky defines the sticky sessions configuration. | ||||
|                               More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                               More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                             properties: | ||||
|                               cookie: | ||||
|                                 description: Cookie defines the sticky cookie configuration. | ||||
| @@ -190,16 +190,16 @@ spec: | ||||
|                   type: object | ||||
|                 type: array | ||||
|               tls: | ||||
|                 description: 'TLS defines the TLS configuration. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#tls' | ||||
|                 description: 'TLS defines the TLS configuration. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls' | ||||
|                 properties: | ||||
|                   certResolver: | ||||
|                     description: 'CertResolver defines the name of the certificate | ||||
|                       resolver to use. Cert resolvers have to be configured in the | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v2.9/https/acme/#certificate-resolvers' | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers' | ||||
|                     type: string | ||||
|                   domains: | ||||
|                     description: 'Domains defines the list of domains that will be | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#domains' | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains' | ||||
|                     items: | ||||
|                       description: Domain holds a domain name with SANs. | ||||
|                       properties: | ||||
| @@ -217,15 +217,15 @@ spec: | ||||
|                   options: | ||||
|                     description: 'Options defines the reference to a TLSOption, that | ||||
|                       specifies the parameters of the TLS connection. If not defined, | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#tls-options' | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: 'Name defines the name of the referenced TLSOption. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                         type: string | ||||
|                       namespace: | ||||
|                         description: 'Namespace defines the namespace of the referenced | ||||
|                           TLSOption. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                           TLSOption. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsoption' | ||||
|                         type: string | ||||
|                     required: | ||||
|                     - name | ||||
| @@ -241,11 +241,11 @@ spec: | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: 'Name defines the name of the referenced TLSStore. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                         type: string | ||||
|                       namespace: | ||||
|                         description: 'Namespace defines the namespace of the referenced | ||||
|                           TLSStore. More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                           TLSStore. More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-tlsstore' | ||||
|                         type: string | ||||
|                     required: | ||||
|                     - name | ||||
|   | ||||
| @@ -39,7 +39,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
| @@ -50,7 +50,7 @@ spec: | ||||
|                   description: RouteTCP holds the TCP route configuration. | ||||
|                   properties: | ||||
|                     match: | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#rule_1' | ||||
|                       description: 'Match defines the router''s rule. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#rule_1' | ||||
|                       type: string | ||||
|                     middlewares: | ||||
|                       description: Middlewares defines the list of references to MiddlewareTCP | ||||
| @@ -73,7 +73,7 @@ spec: | ||||
|                       type: array | ||||
|                     priority: | ||||
|                       description: 'Priority defines the router''s priority. More | ||||
|                         info: https://doc.traefik.io/traefik/v2.9/routing/routers/#priority_1' | ||||
|                         info: https://doc.traefik.io/traefik/v3.0/routing/routers/#priority_1' | ||||
|                       type: integer | ||||
|                     services: | ||||
|                       description: Services defines the list of TCP services. | ||||
| @@ -98,7 +98,7 @@ spec: | ||||
|                             x-kubernetes-int-or-string: true | ||||
|                           proxyProtocol: | ||||
|                             description: 'ProxyProtocol defines the PROXY protocol | ||||
|                               configuration. More info: https://doc.traefik.io/traefik/v2.9/routing/services/#proxy-protocol' | ||||
|                               configuration. More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol' | ||||
|                             properties: | ||||
|                               version: | ||||
|                                 description: Version defines the PROXY Protocol version | ||||
| @@ -129,16 +129,16 @@ spec: | ||||
|                 type: array | ||||
|               tls: | ||||
|                 description: 'TLS defines the TLS configuration on a layer 4 / TCP | ||||
|                   Route. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#tls_1' | ||||
|                   Route. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#tls_1' | ||||
|                 properties: | ||||
|                   certResolver: | ||||
|                     description: 'CertResolver defines the name of the certificate | ||||
|                       resolver to use. Cert resolvers have to be configured in the | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v2.9/https/acme/#certificate-resolvers' | ||||
|                       static configuration. More info: https://doc.traefik.io/traefik/v3.0/https/acme/#certificate-resolvers' | ||||
|                     type: string | ||||
|                   domains: | ||||
|                     description: 'Domains defines the list of domains that will be | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v2.9/routing/routers/#domains' | ||||
|                       used to issue certificates. More info: https://doc.traefik.io/traefik/v3.0/routing/routers/#domains' | ||||
|                     items: | ||||
|                       description: Domain holds a domain name with SANs. | ||||
|                       properties: | ||||
| @@ -156,7 +156,7 @@ spec: | ||||
|                   options: | ||||
|                     description: 'Options defines the reference to a TLSOption, that | ||||
|                       specifies the parameters of the TLS connection. If not defined, | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#tls-options' | ||||
|                       the `default` TLSOption is used. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|                     properties: | ||||
|                       name: | ||||
|                         description: Name defines the name of the referenced Traefik | ||||
|   | ||||
| @@ -39,7 +39,7 @@ spec: | ||||
|               entryPoints: | ||||
|                 description: 'EntryPoints defines the list of entry point names to | ||||
|                   bind to. Entry points have to be configured in the static configuration. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/routing/entrypoints/ | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/routing/entrypoints/ | ||||
|                   Default: all.' | ||||
|                 items: | ||||
|                   type: string | ||||
|   | ||||
| @@ -20,7 +20,7 @@ spec: | ||||
|     schema: | ||||
|       openAPIV3Schema: | ||||
|         description: 'Middleware is the CRD implementation of a Traefik Middleware. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/overview/' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/overview/' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -40,7 +40,7 @@ spec: | ||||
|               addPrefix: | ||||
|                 description: 'AddPrefix holds the add prefix middleware configuration. | ||||
|                   This middleware updates the path of a request before forwarding | ||||
|                   it. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/addprefix/' | ||||
|                   it. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/addprefix/' | ||||
|                 properties: | ||||
|                   prefix: | ||||
|                     description: Prefix is the string to add before the current path | ||||
| @@ -50,11 +50,11 @@ spec: | ||||
|               basicAuth: | ||||
|                 description: 'BasicAuth holds the basic auth middleware configuration. | ||||
|                   This middleware restricts access to your services to known users. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/' | ||||
|                 properties: | ||||
|                   headerField: | ||||
|                     description: 'HeaderField defines a header field to store the | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/#headerfield' | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield' | ||||
|                     type: string | ||||
|                   realm: | ||||
|                     description: 'Realm allows the protected resources on a server | ||||
| @@ -74,7 +74,7 @@ spec: | ||||
|               buffering: | ||||
|                 description: 'Buffering holds the buffering middleware configuration. | ||||
|                   This middleware retries or limits the size of requests that can | ||||
|                   be forwarded to backends. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/buffering/#maxrequestbodybytes' | ||||
|                   be forwarded to backends. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#maxrequestbodybytes' | ||||
|                 properties: | ||||
|                   maxRequestBodyBytes: | ||||
|                     description: 'MaxRequestBodyBytes defines the maximum allowed | ||||
| @@ -107,13 +107,13 @@ spec: | ||||
|                   retryExpression: | ||||
|                     description: 'RetryExpression defines the retry conditions. It | ||||
|                       is a logical combination of functions with operators AND (&&) | ||||
|                       and OR (||). More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/buffering/#retryexpression' | ||||
|                       and OR (||). More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/buffering/#retryexpression' | ||||
|                     type: string | ||||
|                 type: object | ||||
|               chain: | ||||
|                 description: 'Chain holds the configuration of the chain middleware. | ||||
|                   This middleware enables to define reusable combinations of other | ||||
|                   pieces of middleware. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/chain/' | ||||
|                   pieces of middleware. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/chain/' | ||||
|                 properties: | ||||
|                   middlewares: | ||||
|                     description: Middlewares is the list of MiddlewareRef which composes | ||||
| @@ -167,12 +167,13 @@ spec: | ||||
|               compress: | ||||
|                 description: 'Compress holds the compress middleware configuration. | ||||
|                   This middleware compresses responses before sending them to the | ||||
|                   client, using gzip compression. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/compress/' | ||||
|                   client, using gzip compression. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/compress/' | ||||
|                 properties: | ||||
|                   excludedContentTypes: | ||||
|                     description: ExcludedContentTypes defines the list of content | ||||
|                       types to compare the Content-Type header of the incoming requests | ||||
|                       and responses before compressing. | ||||
|                       and responses before compressing. `application/grpc` is always | ||||
|                       excluded. | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
| @@ -184,28 +185,18 @@ spec: | ||||
|                 type: object | ||||
|               contentType: | ||||
|                 description: ContentType holds the content-type middleware configuration. | ||||
|                   This middleware exists to enable the correct behavior until at least | ||||
|                   the default one can be changed in a future version. | ||||
|                 properties: | ||||
|                   autoDetect: | ||||
|                     description: AutoDetect specifies whether to let the `Content-Type` | ||||
|                       header, if it has not been set by the backend, be automatically | ||||
|                       set to a value derived from the contents of the response. As | ||||
|                       a proxy, the default behavior should be to leave the header | ||||
|                       alone, regardless of what the backend did with it. However, | ||||
|                       the historic default was to always auto-detect and set the header | ||||
|                       if it was nil, and it is going to be kept that way in order | ||||
|                       to support users currently relying on it. | ||||
|                     type: boolean | ||||
|                   This middleware sets the `Content-Type` header value to the media | ||||
|                   type detected from the response content, when it is not set by the | ||||
|                   backend. | ||||
|                 type: object | ||||
|               digestAuth: | ||||
|                 description: 'DigestAuth holds the digest auth middleware configuration. | ||||
|                   This middleware restricts access to your services to known users. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/digestauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/digestauth/' | ||||
|                 properties: | ||||
|                   headerField: | ||||
|                     description: 'HeaderField defines a header field to store the | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/basicauth/#headerfield' | ||||
|                       authenticated user. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/basicauth/#headerfield' | ||||
|                     type: string | ||||
|                   realm: | ||||
|                     description: 'Realm allows the protected resources on a server | ||||
| @@ -224,7 +215,7 @@ spec: | ||||
|               errors: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/errorpages/' | ||||
|                   to configured ranges of HTTP Status codes. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/' | ||||
|                 properties: | ||||
|                   query: | ||||
|                     description: Query defines the URL for the error page (hosted | ||||
| @@ -233,7 +224,7 @@ spec: | ||||
|                     type: string | ||||
|                   service: | ||||
|                     description: 'Service defines the reference to a Kubernetes Service | ||||
|                       that will serve the error page. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/errorpages/#service' | ||||
|                       that will serve the error page. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/errorpages/#service' | ||||
|                     properties: | ||||
|                       kind: | ||||
|                         description: Kind defines the kind of the Service. | ||||
| @@ -290,7 +281,7 @@ spec: | ||||
|                         type: string | ||||
|                       sticky: | ||||
|                         description: 'Sticky defines the sticky sessions configuration. | ||||
|                           More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                           More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                         properties: | ||||
|                           cookie: | ||||
|                             description: Cookie defines the sticky cookie configuration. | ||||
| @@ -339,7 +330,7 @@ spec: | ||||
|               forwardAuth: | ||||
|                 description: 'ForwardAuth holds the forward auth middleware configuration. | ||||
|                   This middleware delegates the request authentication to a Service. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/forwardauth/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/' | ||||
|                 properties: | ||||
|                   address: | ||||
|                     description: Address defines the authentication server address. | ||||
| @@ -362,14 +353,12 @@ spec: | ||||
|                     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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/forwardauth/#authresponseheadersregex' | ||||
|                       the regex. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/forwardauth/#authresponseheadersregex' | ||||
|                     type: string | ||||
|                   tls: | ||||
|                     description: TLS defines the configuration used to secure the | ||||
|                       connection to the authentication server. | ||||
|                     properties: | ||||
|                       caOptional: | ||||
|                         type: boolean | ||||
|                       caSecret: | ||||
|                         description: CASecret is the name of the referenced Kubernetes | ||||
|                           Secret containing the CA to validate the server certificate. | ||||
| @@ -390,10 +379,21 @@ spec: | ||||
|                       forward) all X-Forwarded-* headers.' | ||||
|                     type: boolean | ||||
|                 type: object | ||||
|               grpcWeb: | ||||
|                 description: GrpcWeb holds the gRPC web middleware configuration. | ||||
|                   This middleware converts a gRPC web request to an HTTP/2 gRPC request. | ||||
|                 properties: | ||||
|                   allowOrigins: | ||||
|                     description: AllowOrigins is a list of allowable origins. Can | ||||
|                       also be a wildcard origin "*". | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
|                 type: object | ||||
|               headers: | ||||
|                 description: 'Headers holds the headers middleware configuration. | ||||
|                   This middleware manages the requests and responses headers. More | ||||
|                   info: https://doc.traefik.io/traefik/v2.9/middlewares/http/headers/#customrequestheaders' | ||||
|                   info: https://doc.traefik.io/traefik/v3.0/middlewares/http/headers/#customrequestheaders' | ||||
|                 properties: | ||||
|                   accessControlAllowCredentials: | ||||
|                     description: AccessControlAllowCredentials defines whether the | ||||
| @@ -477,9 +477,6 @@ spec: | ||||
|                     description: CustomResponseHeaders defines the header names and | ||||
|                       values to apply to the response. | ||||
|                     type: object | ||||
|                   featurePolicy: | ||||
|                     description: 'Deprecated: use PermissionsPolicy instead.' | ||||
|                     type: string | ||||
|                   forceSTSHeader: | ||||
|                     description: ForceSTSHeader defines whether to add the STS header | ||||
|                       even when the connection is HTTP. | ||||
| @@ -515,12 +512,6 @@ spec: | ||||
|                       value. This allows sites to control whether browsers forward | ||||
|                       the Referer header to other sites. | ||||
|                     type: string | ||||
|                   sslForceHost: | ||||
|                     description: 'Deprecated: use RedirectRegex instead.' | ||||
|                     type: boolean | ||||
|                   sslHost: | ||||
|                     description: 'Deprecated: use RedirectRegex instead.' | ||||
|                     type: string | ||||
|                   sslProxyHeaders: | ||||
|                     additionalProperties: | ||||
|                       type: string | ||||
| @@ -529,14 +520,6 @@ spec: | ||||
|                       useful when using other proxies (example: "X-Forwarded-Proto": | ||||
|                       "https").' | ||||
|                     type: object | ||||
|                   sslRedirect: | ||||
|                     description: 'Deprecated: use EntryPoint redirection or RedirectScheme | ||||
|                       instead.' | ||||
|                     type: boolean | ||||
|                   sslTemporaryRedirect: | ||||
|                     description: 'Deprecated: use EntryPoint redirection or RedirectScheme | ||||
|                       instead.' | ||||
|                     type: boolean | ||||
|                   stsIncludeSubdomains: | ||||
|                     description: STSIncludeSubdomains defines whether the includeSubDomains | ||||
|                       directive is appended to the Strict-Transport-Security header. | ||||
| @@ -554,7 +537,7 @@ spec: | ||||
|               inFlightReq: | ||||
|                 description: 'InFlightReq holds the in-flight request middleware configuration. | ||||
|                   This middleware limits the number of requests being processed and | ||||
|                   served concurrently. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/inflightreq/' | ||||
|                   served concurrently. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/' | ||||
|                 properties: | ||||
|                   amount: | ||||
|                     description: Amount defines the maximum amount of allowed simultaneous | ||||
| @@ -568,11 +551,11 @@ spec: | ||||
|                       group requests as originating from a common source. 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. More | ||||
|                       info: https://doc.traefik.io/traefik/v2.9/middlewares/http/inflightreq/#sourcecriterion' | ||||
|                       info: https://doc.traefik.io/traefik/v3.0/middlewares/http/inflightreq/#sourcecriterion' | ||||
|                     properties: | ||||
|                       ipStrategy: | ||||
|                         description: 'IPStrategy holds the IP strategy configuration | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                         properties: | ||||
|                           depth: | ||||
|                             description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -597,14 +580,14 @@ spec: | ||||
|                         type: boolean | ||||
|                     type: object | ||||
|                 type: object | ||||
|               ipWhiteList: | ||||
|                 description: 'IPWhiteList holds the IP whitelist middleware configuration. | ||||
|               ipAllowList: | ||||
|                 description: 'IPAllowList holds the IP allowlist middleware configuration. | ||||
|                   This middleware accepts / refuses requests based on the client IP. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/' | ||||
|                 properties: | ||||
|                   ipStrategy: | ||||
|                     description: 'IPStrategy holds the IP strategy configuration used | ||||
|                       by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                       by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                     properties: | ||||
|                       depth: | ||||
|                         description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -628,7 +611,7 @@ spec: | ||||
|               passTLSClientCert: | ||||
|                 description: 'PassTLSClientCert holds the pass TLS client cert middleware | ||||
|                   configuration. This middleware adds the selected data from the passed | ||||
|                   client TLS certificate to a header. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/passtlsclientcert/' | ||||
|                   client TLS certificate to a header. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/passtlsclientcert/' | ||||
|                 properties: | ||||
|                   info: | ||||
|                     description: Info selects the specific client certificate details | ||||
| @@ -735,7 +718,7 @@ spec: | ||||
|               rateLimit: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ratelimit/' | ||||
|                   allows one to define what fair is. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ratelimit/' | ||||
|                 properties: | ||||
|                   average: | ||||
|                     description: Average is the maximum rate, by default in requests/s, | ||||
| @@ -768,7 +751,7 @@ spec: | ||||
|                     properties: | ||||
|                       ipStrategy: | ||||
|                         description: 'IPStrategy holds the IP strategy configuration | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/ipwhitelist/#ipstrategy' | ||||
|                           used by Traefik to determine the client IP. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/ipallowlist/#ipstrategy' | ||||
|                         properties: | ||||
|                           depth: | ||||
|                             description: Depth tells Traefik to use the X-Forwarded-For | ||||
| @@ -796,7 +779,7 @@ spec: | ||||
|               redirectRegex: | ||||
|                 description: 'RedirectRegex holds the redirect regex middleware configuration. | ||||
|                   This middleware redirects a request using regex matching and replacement. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/redirectregex/#regex' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectregex/#regex' | ||||
|                 properties: | ||||
|                   permanent: | ||||
|                     description: Permanent defines whether the redirection is permanent | ||||
| @@ -814,7 +797,7 @@ spec: | ||||
|               redirectScheme: | ||||
|                 description: 'RedirectScheme holds the redirect scheme middleware | ||||
|                   configuration. This middleware redirects requests from a scheme/port | ||||
|                   to another. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/redirectscheme/' | ||||
|                   to another. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/redirectscheme/' | ||||
|                 properties: | ||||
|                   permanent: | ||||
|                     description: Permanent defines whether the redirection is permanent | ||||
| @@ -830,7 +813,7 @@ spec: | ||||
|               replacePath: | ||||
|                 description: '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. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/replacepath/' | ||||
|                   original path in an X-Replaced-Path header. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepath/' | ||||
|                 properties: | ||||
|                   path: | ||||
|                     description: Path defines the path to use as replacement in the | ||||
| @@ -840,7 +823,7 @@ spec: | ||||
|               replacePathRegex: | ||||
|                 description: 'ReplacePathRegex holds the replace path regex middleware | ||||
|                   configuration. This middleware replaces the path of a URL using | ||||
|                   regex matching and replacement. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/replacepathregex/' | ||||
|                   regex matching and replacement. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/replacepathregex/' | ||||
|                 properties: | ||||
|                   regex: | ||||
|                     description: Regex defines the regular expression used to match | ||||
| @@ -856,7 +839,7 @@ spec: | ||||
|                   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. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/retry/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/retry/' | ||||
|                 properties: | ||||
|                   attempts: | ||||
|                     description: Attempts defines how many times the request should | ||||
| @@ -876,13 +859,8 @@ spec: | ||||
|               stripPrefix: | ||||
|                 description: 'StripPrefix holds the strip prefix middleware configuration. | ||||
|                   This middleware removes the specified prefixes from the URL path. | ||||
|                   More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/stripprefix/' | ||||
|                   More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefix/' | ||||
|                 properties: | ||||
|                   forceSlash: | ||||
|                     description: 'ForceSlash ensures that the resulting stripped path | ||||
|                       is not the empty string, by replacing it with / when necessary. | ||||
|                       Default: true.' | ||||
|                     type: boolean | ||||
|                   prefixes: | ||||
|                     description: Prefixes defines the prefixes to strip from the request | ||||
|                       URL. | ||||
| @@ -893,7 +871,7 @@ spec: | ||||
|               stripPrefixRegex: | ||||
|                 description: 'StripPrefixRegex holds the strip prefix regex middleware | ||||
|                   configuration. This middleware removes the matching prefixes from | ||||
|                   the URL path. More info: https://doc.traefik.io/traefik/v2.9/middlewares/http/stripprefixregex/' | ||||
|                   the URL path. More info: https://doc.traefik.io/traefik/v3.0/middlewares/http/stripprefixregex/' | ||||
|                 properties: | ||||
|                   regex: | ||||
|                     description: Regex defines the regular expression to match the | ||||
|   | ||||
| @@ -20,7 +20,7 @@ spec: | ||||
|     schema: | ||||
|       openAPIV3Schema: | ||||
|         description: 'MiddlewareTCP is the CRD implementation of a Traefik TCP middleware. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/middlewares/overview/' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/middlewares/overview/' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -47,8 +47,8 @@ spec: | ||||
|                     format: int64 | ||||
|                     type: integer | ||||
|                 type: object | ||||
|               ipWhiteList: | ||||
|                 description: IPWhiteList defines the IPWhiteList middleware configuration. | ||||
|               ipAllowList: | ||||
|                 description: IPAllowList defines the IPAllowList middleware configuration. | ||||
|                 properties: | ||||
|                   sourceRange: | ||||
|                     description: SourceRange defines the allowed IPs (or ranges of | ||||
|   | ||||
| @@ -22,7 +22,7 @@ spec: | ||||
|         description: 'ServersTransport is the CRD implementation of a ServersTransport. | ||||
|           If no serversTransport is specified, the default@internal will be used. | ||||
|           The default@internal serversTransport is created from the static configuration. | ||||
|           More info: https://doc.traefik.io/traefik/v2.9/routing/services/#serverstransport_1' | ||||
|           More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_1' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -113,6 +113,19 @@ spec: | ||||
|                 description: ServerName defines the server name used to contact the | ||||
|                   server. | ||||
|                 type: string | ||||
|               spiffe: | ||||
|                 description: Spiffe defines the SPIFFE configuration. | ||||
|                 properties: | ||||
|                   ids: | ||||
|                     description: IDs defines the allowed SPIFFE IDs (takes precedence | ||||
|                       over the SPIFFE TrustDomain). | ||||
|                     items: | ||||
|                       type: string | ||||
|                     type: array | ||||
|                   trustDomain: | ||||
|                     description: TrustDomain defines the allowed SPIFFE trust domain. | ||||
|                     type: string | ||||
|                 type: object | ||||
|             type: object | ||||
|         required: | ||||
|         - metadata | ||||
|   | ||||
| @@ -21,7 +21,7 @@ spec: | ||||
|       openAPIV3Schema: | ||||
|         description: '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/v2.9/https/tls/#tls-options' | ||||
|           https://doc.traefik.io/traefik/v3.0/https/tls/#tls-options' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -41,13 +41,13 @@ spec: | ||||
|               alpnProtocols: | ||||
|                 description: 'ALPNProtocols defines the list of supported application | ||||
|                   level protocols for the TLS handshake, in order of preference. More | ||||
|                   info: https://doc.traefik.io/traefik/v2.9/https/tls/#alpn-protocols' | ||||
|                   info: https://doc.traefik.io/traefik/v3.0/https/tls/#alpn-protocols' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
|               cipherSuites: | ||||
|                 description: 'CipherSuites defines the list of supported cipher suites | ||||
|                   for TLS versions up to TLS 1.2. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#cipher-suites' | ||||
|                   for TLS versions up to TLS 1.2. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#cipher-suites' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
| @@ -74,7 +74,7 @@ spec: | ||||
|                 type: object | ||||
|               curvePreferences: | ||||
|                 description: 'CurvePreferences defines the preferred elliptic curves | ||||
|                   in a specific order. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#curve-preferences' | ||||
|                   in a specific order. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#curve-preferences' | ||||
|                 items: | ||||
|                   type: string | ||||
|                 type: array | ||||
| @@ -88,12 +88,6 @@ spec: | ||||
|                   will accept. Possible values: VersionTLS10, VersionTLS11, VersionTLS12, | ||||
|                   VersionTLS13. Default: VersionTLS10.' | ||||
|                 type: string | ||||
|               preferServerCipherSuites: | ||||
|                 description: 'PreferServerCipherSuites defines whether the server | ||||
|                   chooses a cipher suite among his own instead of among the client''s. | ||||
|                   It is enabled automatically when minVersion or maxVersion is set. | ||||
|                   Deprecated: https://github.com/golang/go/issues/45430' | ||||
|                 type: boolean | ||||
|               sniStrict: | ||||
|                 description: SniStrict defines whether Traefik allows connections | ||||
|                   from clients connections that do not specify a server_name extension. | ||||
|   | ||||
| @@ -22,7 +22,7 @@ spec: | ||||
|         description: 'TLSStore is the CRD implementation of a Traefik TLS Store. 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. More info: https://doc.traefik.io/traefik/v2.9/https/tls/#certificates-stores' | ||||
|           namespaces. More info: https://doc.traefik.io/traefik/v3.0/https/tls/#certificates-stores' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
|   | ||||
| @@ -21,7 +21,7 @@ spec: | ||||
|       openAPIV3Schema: | ||||
|         description: 'TraefikService is the CRD implementation of a Traefik Service. | ||||
|           TraefikService object allows to: - Apply weight to Services on load-balancing | ||||
|           - Mirror traffic on services More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#kind-traefikservice' | ||||
|           - Mirror traffic on services More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#kind-traefikservice' | ||||
|         properties: | ||||
|           apiVersion: | ||||
|             description: 'APIVersion defines the versioned schema of this representation | ||||
| @@ -120,7 +120,7 @@ spec: | ||||
|                           type: string | ||||
|                         sticky: | ||||
|                           description: 'Sticky defines the sticky sessions configuration. | ||||
|                             More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                             More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                           properties: | ||||
|                             cookie: | ||||
|                               description: Cookie defines the sticky cookie configuration. | ||||
| @@ -204,7 +204,7 @@ spec: | ||||
|                     type: string | ||||
|                   sticky: | ||||
|                     description: 'Sticky defines the sticky sessions configuration. | ||||
|                       More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                       More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                     properties: | ||||
|                       cookie: | ||||
|                         description: Cookie defines the sticky cookie configuration. | ||||
| @@ -304,7 +304,7 @@ spec: | ||||
|                           type: string | ||||
|                         sticky: | ||||
|                           description: 'Sticky defines the sticky sessions configuration. | ||||
|                             More info: https://doc.traefik.io/traefik/v2.9/routing/services/#sticky-sessions' | ||||
|                             More info: https://doc.traefik.io/traefik/v3.0/routing/services/#sticky-sessions' | ||||
|                           properties: | ||||
|                             cookie: | ||||
|                               description: Cookie defines the sticky cookie configuration. | ||||
| @@ -343,7 +343,7 @@ spec: | ||||
|                     type: array | ||||
|                   sticky: | ||||
|                     description: 'Sticky defines whether sticky sessions are enabled. | ||||
|                       More info: https://doc.traefik.io/traefik/v2.9/routing/providers/kubernetes-crd/#stickiness-and-load-balancing' | ||||
|                       More info: https://doc.traefik.io/traefik/v3.0/routing/providers/kubernetes-crd/#stickiness-and-load-balancing' | ||||
|                     properties: | ||||
|                       cookie: | ||||
|                         description: Cookie defines the sticky cookie configuration. | ||||
|   | ||||
| @@ -99,12 +99,18 @@ Storage to use. (Default: ```acme.json```) | ||||
| `--certificatesresolvers.<name>.acme.tlschallenge`:   | ||||
| Activate TLS-ALPN-01 Challenge. (Default: ```true```) | ||||
|  | ||||
| `--certificatesresolvers.<name>.tailscale`:   | ||||
| Enables Tailscale certificate resolution. (Default: ```true```) | ||||
|  | ||||
| `--entrypoints.<name>`:   | ||||
| Entry points definition. (Default: ```false```) | ||||
|  | ||||
| `--entrypoints.<name>.address`:   | ||||
| Entry point address. | ||||
|  | ||||
| `--entrypoints.<name>.asdefault`:   | ||||
| Adds this EntryPoint to the list of default EntryPoints to be used on routers that don't have any Entrypoint defined. (Default: ```false```) | ||||
|  | ||||
| `--entrypoints.<name>.forwardedheaders.insecure`:   | ||||
| Trust all forwarded headers. (Default: ```false```) | ||||
|  | ||||
| @@ -240,6 +246,9 @@ The TLS key for Traefik Proxy as a TLS client. | ||||
| `--log`:   | ||||
| Traefik log settings. (Default: ```false```) | ||||
|  | ||||
| `--log.compress`:   | ||||
| Determines if the rotated log files should be compressed using gzip. (Default: ```false```) | ||||
|  | ||||
| `--log.filepath`:   | ||||
| Traefik log file path. Stdout is used when omitted or empty. | ||||
|  | ||||
| @@ -249,6 +258,18 @@ Traefik log format: json | common (Default: ```common```) | ||||
| `--log.level`:   | ||||
| Log level set to traefik logs. (Default: ```ERROR```) | ||||
|  | ||||
| `--log.maxage`:   | ||||
| Maximum number of days to retain old log files based on the timestamp encoded in their filename. (Default: ```0```) | ||||
|  | ||||
| `--log.maxbackups`:   | ||||
| Maximum number of old log files to retain. (Default: ```0```) | ||||
|  | ||||
| `--log.maxsize`:   | ||||
| Maximum size in megabytes of the log file before it gets rotated. (Default: ```0```) | ||||
|  | ||||
| `--log.nocolor`:   | ||||
| When using the 'common' format, disables the colorized output. (Default: ```false```) | ||||
|  | ||||
| `--metrics.datadog`:   | ||||
| Datadog metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| @@ -336,6 +357,51 @@ InfluxDB v2 push interval. (Default: ```10```) | ||||
| `--metrics.influxdb2.token`:   | ||||
| InfluxDB v2 access token. | ||||
|  | ||||
| `--metrics.opentelemetry`:   | ||||
| OpenTelemetry metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| `--metrics.opentelemetry.addentrypointslabels`:   | ||||
| Enable metrics on entry points. (Default: ```true```) | ||||
|  | ||||
| `--metrics.opentelemetry.address`:   | ||||
| Address (host:port) of the collector endpoint. (Default: ```localhost:4318```) | ||||
|  | ||||
| `--metrics.opentelemetry.addrouterslabels`:   | ||||
| Enable metrics on routers. (Default: ```false```) | ||||
|  | ||||
| `--metrics.opentelemetry.addserviceslabels`:   | ||||
| Enable metrics on services. (Default: ```true```) | ||||
|  | ||||
| `--metrics.opentelemetry.explicitboundaries`:   | ||||
| Boundaries for latency metrics. (Default: ```0.005000, 0.010000, 0.025000, 0.050000, 0.100000, 0.250000, 0.500000, 1.000000, 2.500000, 5.000000, 10.000000```) | ||||
|  | ||||
| `--metrics.opentelemetry.grpc`:   | ||||
| gRPC specific configuration for the OpenTelemetry collector. (Default: ```true```) | ||||
|  | ||||
| `--metrics.opentelemetry.headers.<name>`:   | ||||
| Headers sent with payload. | ||||
|  | ||||
| `--metrics.opentelemetry.insecure`:   | ||||
| Disables client transport security for the exporter. (Default: ```false```) | ||||
|  | ||||
| `--metrics.opentelemetry.path`:   | ||||
| Set the URL path of the collector endpoint. | ||||
|  | ||||
| `--metrics.opentelemetry.pushinterval`:   | ||||
| Period between calls to collect a checkpoint. (Default: ```10```) | ||||
|  | ||||
| `--metrics.opentelemetry.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--metrics.opentelemetry.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| `--metrics.opentelemetry.tls.insecureskipverify`:   | ||||
| TLS insecure skip verify (Default: ```false```) | ||||
|  | ||||
| `--metrics.opentelemetry.tls.key`:   | ||||
| TLS key | ||||
|  | ||||
| `--metrics.prometheus`:   | ||||
| Prometheus metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| @@ -396,9 +462,6 @@ Enable Consul backend with default settings. (Default: ```false```) | ||||
| `--providers.consul.endpoints`:   | ||||
| KV store endpoints. (Default: ```127.0.0.1:8500```) | ||||
|  | ||||
| `--providers.consul.namespace`:   | ||||
| Sets the namespace used to discover the configuration (Consul Enterprise only). | ||||
|  | ||||
| `--providers.consul.namespaces`:   | ||||
| Sets the namespaces used to discover the configuration (Consul Enterprise only). | ||||
|  | ||||
| @@ -408,9 +471,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `--providers.consul.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.consul.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.consul.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -462,9 +522,6 @@ The URI scheme for the Consul server | ||||
| `--providers.consulcatalog.endpoint.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.consulcatalog.endpoint.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.consulcatalog.endpoint.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -480,9 +537,6 @@ Token is used to provide a per-request ACL token which overrides the agent's def | ||||
| `--providers.consulcatalog.exposedbydefault`:   | ||||
| Expose containers by default. (Default: ```true```) | ||||
|  | ||||
| `--providers.consulcatalog.namespace`:   | ||||
| Sets the namespace used to discover services (Consul Enterprise only). | ||||
|  | ||||
| `--providers.consulcatalog.namespaces`:   | ||||
| Sets the namespaces used to discover services (Consul Enterprise only). | ||||
|  | ||||
| @@ -537,9 +591,6 @@ Polling interval for swarm mode. (Default: ```15```) | ||||
| `--providers.docker.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.docker.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.docker.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -559,13 +610,13 @@ Watch Docker events. (Default: ```true```) | ||||
| Enable AWS ECS backend with default settings. (Default: ```false```) | ||||
|  | ||||
| `--providers.ecs.accesskeyid`:   | ||||
| The AWS credentials access key to use for making requests | ||||
| AWS credentials access key ID to use for making requests. | ||||
|  | ||||
| `--providers.ecs.autodiscoverclusters`:   | ||||
| Auto discover cluster (Default: ```false```) | ||||
| Auto discover cluster. (Default: ```false```) | ||||
|  | ||||
| `--providers.ecs.clusters`:   | ||||
| ECS Clusters name (Default: ```default```) | ||||
| ECS Cluster names. (Default: ```default```) | ||||
|  | ||||
| `--providers.ecs.constraints`:   | ||||
| Constraints is an expression that Traefik matches against the container's labels to determine whether to create any route for that container. | ||||
| @@ -574,19 +625,22 @@ Constraints is an expression that Traefik matches against the container's labels | ||||
| Default rule. (Default: ```Host(`{{ normalize .Name }}`)```) | ||||
|  | ||||
| `--providers.ecs.ecsanywhere`:   | ||||
| Enable ECS Anywhere support (Default: ```false```) | ||||
| Enable ECS Anywhere support. (Default: ```false```) | ||||
|  | ||||
| `--providers.ecs.exposedbydefault`:   | ||||
| Expose services by default (Default: ```true```) | ||||
| Expose services by default. (Default: ```true```) | ||||
|  | ||||
| `--providers.ecs.healthytasksonly`:   | ||||
| Determines whether to discover only healthy tasks. (Default: ```false```) | ||||
|  | ||||
| `--providers.ecs.refreshseconds`:   | ||||
| Polling interval (in seconds) (Default: ```15```) | ||||
| Polling interval (in seconds). (Default: ```15```) | ||||
|  | ||||
| `--providers.ecs.region`:   | ||||
| The AWS region to use for requests | ||||
| AWS region to use for requests. | ||||
|  | ||||
| `--providers.ecs.secretaccesskey`:   | ||||
| The AWS credentials access key to use for making requests | ||||
| AWS credentials access key to use for making requests. | ||||
|  | ||||
| `--providers.etcd`:   | ||||
| Enable Etcd backend with default settings. (Default: ```false```) | ||||
| @@ -603,9 +657,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `--providers.etcd.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.etcd.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.etcd.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -636,6 +687,9 @@ Enable HTTP backend with default settings. (Default: ```false```) | ||||
| `--providers.http.endpoint`:   | ||||
| Load configuration from this endpoint. | ||||
|  | ||||
| `--providers.http.headers.<name>`:   | ||||
| Define custom headers to be sent to the endpoint. | ||||
|  | ||||
| `--providers.http.pollinterval`:   | ||||
| Polling interval for endpoint. (Default: ```5```) | ||||
|  | ||||
| @@ -645,9 +699,6 @@ Polling timeout for endpoint. (Default: ```5```) | ||||
| `--providers.http.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.http.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.http.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -792,9 +843,6 @@ Set a response header timeout for Marathon. (Default: ```60```) | ||||
| `--providers.marathon.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.marathon.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.marathon.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -834,9 +882,6 @@ Nomad region to use. If not provided, the local agent region is used. | ||||
| `--providers.nomad.endpoint.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.nomad.endpoint.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.nomad.endpoint.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -852,8 +897,8 @@ Token is used to provide a per-request ACL token. | ||||
| `--providers.nomad.exposedbydefault`:   | ||||
| Expose Nomad services by default. (Default: ```true```) | ||||
|  | ||||
| `--providers.nomad.namespace`:   | ||||
| Sets the Nomad namespace used to discover services. | ||||
| `--providers.nomad.namespaces`:   | ||||
| Sets the Nomad namespaces used to discover services. | ||||
|  | ||||
| `--providers.nomad.prefix`:   | ||||
| Prefix for nomad service tags. (Default: ```traefik```) | ||||
| @@ -915,9 +960,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `--providers.redis.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--providers.redis.tls.caoptional`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `--providers.redis.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -969,6 +1011,18 @@ If non-zero, controls the maximum idle (keep-alive) to keep per-host. If zero, D | ||||
| `--serverstransport.rootcas`:   | ||||
| Add cert file for self-signed certificate. | ||||
|  | ||||
| `--serverstransport.spiffe`:   | ||||
| Defines the SPIFFE configuration. (Default: ```false```) | ||||
|  | ||||
| `--serverstransport.spiffe.ids`:   | ||||
| Defines the allowed SPIFFE IDs (takes precedence over the SPIFFE TrustDomain). | ||||
|  | ||||
| `--serverstransport.spiffe.trustdomain`:   | ||||
| Defines the allowed SPIFFE trust domain. | ||||
|  | ||||
| `--spiffe.workloadapiaddr`:   | ||||
| Defines the workload API address. | ||||
|  | ||||
| `--tracing`:   | ||||
| OpenTracing configuration. (Default: ```false```) | ||||
|  | ||||
| @@ -981,9 +1035,6 @@ Sets the header name prefix used to store baggage items in a map. | ||||
| `--tracing.datadog.debug`:   | ||||
| Enables Datadog debug. (Default: ```false```) | ||||
|  | ||||
| `--tracing.datadog.globaltag`:   | ||||
| Sets a key:value tag on all spans. | ||||
|  | ||||
| `--tracing.datadog.globaltags.<name>`:   | ||||
| Sets a list of key:value tags on all spans. | ||||
|  | ||||
| @@ -1089,6 +1140,36 @@ Sets the sampling type. (Default: ```const```) | ||||
| `--tracing.jaeger.tracecontextheadername`:   | ||||
| Sets the header name used to store the trace ID. (Default: ```uber-trace-id```) | ||||
|  | ||||
| `--tracing.opentelemetry`:   | ||||
| Settings for OpenTelemetry. (Default: ```false```) | ||||
|  | ||||
| `--tracing.opentelemetry.address`:   | ||||
| Sets the address (host:port) of the collector endpoint. (Default: ```localhost:4318```) | ||||
|  | ||||
| `--tracing.opentelemetry.grpc`:   | ||||
| gRPC specific configuration for the OpenTelemetry collector. (Default: ```true```) | ||||
|  | ||||
| `--tracing.opentelemetry.headers.<name>`:   | ||||
| Defines additional headers to be sent with the payloads. | ||||
|  | ||||
| `--tracing.opentelemetry.insecure`:   | ||||
| Disables client transport security for the exporter. (Default: ```false```) | ||||
|  | ||||
| `--tracing.opentelemetry.path`:   | ||||
| Sets the URL path of the collector endpoint. | ||||
|  | ||||
| `--tracing.opentelemetry.tls.ca`:   | ||||
| TLS CA | ||||
|  | ||||
| `--tracing.opentelemetry.tls.cert`:   | ||||
| TLS cert | ||||
|  | ||||
| `--tracing.opentelemetry.tls.insecureskipverify`:   | ||||
| TLS insecure skip verify (Default: ```false```) | ||||
|  | ||||
| `--tracing.opentelemetry.tls.key`:   | ||||
| TLS key | ||||
|  | ||||
| `--tracing.servicename`:   | ||||
| Set the name for this service. (Default: ```traefik```) | ||||
|  | ||||
|   | ||||
| @@ -99,12 +99,18 @@ Storage to use. (Default: ```acme.json```) | ||||
| `TRAEFIK_CERTIFICATESRESOLVERS_<NAME>_ACME_TLSCHALLENGE`:   | ||||
| Activate TLS-ALPN-01 Challenge. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_CERTIFICATESRESOLVERS_<NAME>_TAILSCALE`:   | ||||
| Enables Tailscale certificate resolution. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_ENTRYPOINTS_<NAME>`:   | ||||
| Entry points definition. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_ENTRYPOINTS_<NAME>_ADDRESS`:   | ||||
| Entry point address. | ||||
|  | ||||
| `TRAEFIK_ENTRYPOINTS_<NAME>_ASDEFAULT`:   | ||||
| Adds this EntryPoint to the list of default EntryPoints to be used on routers that don't have any Entrypoint defined. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_ENTRYPOINTS_<NAME>_FORWARDEDHEADERS_INSECURE`:   | ||||
| Trust all forwarded headers. (Default: ```false```) | ||||
|  | ||||
| @@ -240,6 +246,9 @@ The TLS key for Traefik Proxy as a TLS client. | ||||
| `TRAEFIK_LOG`:   | ||||
| Traefik log settings. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_LOG_COMPRESS`:   | ||||
| Determines if the rotated log files should be compressed using gzip. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_LOG_FILEPATH`:   | ||||
| Traefik log file path. Stdout is used when omitted or empty. | ||||
|  | ||||
| @@ -249,6 +258,18 @@ Traefik log format: json | common (Default: ```common```) | ||||
| `TRAEFIK_LOG_LEVEL`:   | ||||
| Log level set to traefik logs. (Default: ```ERROR```) | ||||
|  | ||||
| `TRAEFIK_LOG_MAXAGE`:   | ||||
| Maximum number of days to retain old log files based on the timestamp encoded in their filename. (Default: ```0```) | ||||
|  | ||||
| `TRAEFIK_LOG_MAXBACKUPS`:   | ||||
| Maximum number of old log files to retain. (Default: ```0```) | ||||
|  | ||||
| `TRAEFIK_LOG_MAXSIZE`:   | ||||
| Maximum size in megabytes of the log file before it gets rotated. (Default: ```0```) | ||||
|  | ||||
| `TRAEFIK_LOG_NOCOLOR`:   | ||||
| When using the 'common' format, disables the colorized output. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_METRICS_DATADOG`:   | ||||
| Datadog metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| @@ -336,6 +357,51 @@ InfluxDB retention policy used when protocol is http. | ||||
| `TRAEFIK_METRICS_INFLUXDB_USERNAME`:   | ||||
| InfluxDB username (only with http). | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY`:   | ||||
| OpenTelemetry metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_ADDENTRYPOINTSLABELS`:   | ||||
| Enable metrics on entry points. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_ADDRESS`:   | ||||
| Address (host:port) of the collector endpoint. (Default: ```localhost:4318```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_ADDROUTERSLABELS`:   | ||||
| Enable metrics on routers. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_ADDSERVICESLABELS`:   | ||||
| Enable metrics on services. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_EXPLICITBOUNDARIES`:   | ||||
| Boundaries for latency metrics. (Default: ```0.005000, 0.010000, 0.025000, 0.050000, 0.100000, 0.250000, 0.500000, 1.000000, 2.500000, 5.000000, 10.000000```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_GRPC`:   | ||||
| gRPC specific configuration for the OpenTelemetry collector. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_HEADERS_<NAME>`:   | ||||
| Headers sent with payload. | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_INSECURE`:   | ||||
| Disables client transport security for the exporter. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_PATH`:   | ||||
| Set the URL path of the collector endpoint. | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_PUSHINTERVAL`:   | ||||
| Period between calls to collect a checkpoint. (Default: ```10```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_TLS_INSECURESKIPVERIFY`:   | ||||
| TLS insecure skip verify (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_METRICS_OPENTELEMETRY_TLS_KEY`:   | ||||
| TLS key | ||||
|  | ||||
| `TRAEFIK_METRICS_PROMETHEUS`:   | ||||
| Prometheus metrics exporter type. (Default: ```false```) | ||||
|  | ||||
| @@ -432,9 +498,6 @@ The URI scheme for the Consul server | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_ENDPOINT_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_ENDPOINT_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_ENDPOINT_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -450,9 +513,6 @@ Token is used to provide a per-request ACL token which overrides the agent's def | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_EXPOSEDBYDEFAULT`:   | ||||
| Expose containers by default. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_NAMESPACE`:   | ||||
| Sets the namespace used to discover services (Consul Enterprise only). | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSULCATALOG_NAMESPACES`:   | ||||
| Sets the namespaces used to discover services (Consul Enterprise only). | ||||
|  | ||||
| @@ -477,9 +537,6 @@ Watch Consul API events. (Default: ```false```) | ||||
| `TRAEFIK_PROVIDERS_CONSUL_ENDPOINTS`:   | ||||
| KV store endpoints. (Default: ```127.0.0.1:8500```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSUL_NAMESPACE`:   | ||||
| Sets the namespace used to discover the configuration (Consul Enterprise only). | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSUL_NAMESPACES`:   | ||||
| Sets the namespaces used to discover the configuration (Consul Enterprise only). | ||||
|  | ||||
| @@ -489,9 +546,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `TRAEFIK_PROVIDERS_CONSUL_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSUL_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_CONSUL_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -537,9 +591,6 @@ Polling interval for swarm mode. (Default: ```15```) | ||||
| `TRAEFIK_PROVIDERS_DOCKER_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_DOCKER_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_DOCKER_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -559,13 +610,13 @@ Watch Docker events. (Default: ```true```) | ||||
| Enable AWS ECS backend with default settings. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_ACCESSKEYID`:   | ||||
| The AWS credentials access key to use for making requests | ||||
| AWS credentials access key ID to use for making requests. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_AUTODISCOVERCLUSTERS`:   | ||||
| Auto discover cluster (Default: ```false```) | ||||
| Auto discover cluster. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_CLUSTERS`:   | ||||
| ECS Clusters name (Default: ```default```) | ||||
| ECS Cluster names. (Default: ```default```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_CONSTRAINTS`:   | ||||
| Constraints is an expression that Traefik matches against the container's labels to determine whether to create any route for that container. | ||||
| @@ -574,19 +625,22 @@ Constraints is an expression that Traefik matches against the container's labels | ||||
| Default rule. (Default: ```Host(`{{ normalize .Name }}`)```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_ECSANYWHERE`:   | ||||
| Enable ECS Anywhere support (Default: ```false```) | ||||
| Enable ECS Anywhere support. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_EXPOSEDBYDEFAULT`:   | ||||
| Expose services by default (Default: ```true```) | ||||
| Expose services by default. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_HEALTHYTASKSONLY`:   | ||||
| Determines whether to discover only healthy tasks. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_REFRESHSECONDS`:   | ||||
| Polling interval (in seconds) (Default: ```15```) | ||||
| Polling interval (in seconds). (Default: ```15```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_REGION`:   | ||||
| The AWS region to use for requests | ||||
| AWS region to use for requests. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ECS_SECRETACCESSKEY`:   | ||||
| The AWS credentials access key to use for making requests | ||||
| AWS credentials access key to use for making requests. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ETCD`:   | ||||
| Enable Etcd backend with default settings. (Default: ```false```) | ||||
| @@ -603,9 +657,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `TRAEFIK_PROVIDERS_ETCD_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ETCD_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_ETCD_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -636,6 +687,9 @@ Enable HTTP backend with default settings. (Default: ```false```) | ||||
| `TRAEFIK_PROVIDERS_HTTP_ENDPOINT`:   | ||||
| Load configuration from this endpoint. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_HTTP_HEADERS_<NAME>`:   | ||||
| Define custom headers to be sent to the endpoint. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_HTTP_POLLINTERVAL`:   | ||||
| Polling interval for endpoint. (Default: ```5```) | ||||
|  | ||||
| @@ -645,9 +699,6 @@ Polling timeout for endpoint. (Default: ```5```) | ||||
| `TRAEFIK_PROVIDERS_HTTP_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_HTTP_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_HTTP_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -795,9 +846,6 @@ Set a TLS handshake timeout for Marathon. (Default: ```5```) | ||||
| `TRAEFIK_PROVIDERS_MARATHON_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_MARATHON_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_MARATHON_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -834,9 +882,6 @@ Nomad region to use. If not provided, the local agent region is used. | ||||
| `TRAEFIK_PROVIDERS_NOMAD_ENDPOINT_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_NOMAD_ENDPOINT_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_NOMAD_ENDPOINT_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -852,8 +897,8 @@ Token is used to provide a per-request ACL token. | ||||
| `TRAEFIK_PROVIDERS_NOMAD_EXPOSEDBYDEFAULT`:   | ||||
| Expose Nomad services by default. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_NOMAD_NAMESPACE`:   | ||||
| Sets the Nomad namespace used to discover services. | ||||
| `TRAEFIK_PROVIDERS_NOMAD_NAMESPACES`:   | ||||
| Sets the Nomad namespaces used to discover services. | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_NOMAD_PREFIX`:   | ||||
| Prefix for nomad service tags. (Default: ```traefik```) | ||||
| @@ -915,9 +960,6 @@ Root key used for KV store. (Default: ```traefik```) | ||||
| `TRAEFIK_PROVIDERS_REDIS_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_REDIS_TLS_CAOPTIONAL`:   | ||||
| TLS CA.Optional (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_PROVIDERS_REDIS_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| @@ -969,6 +1011,18 @@ If non-zero, controls the maximum idle (keep-alive) to keep per-host. If zero, D | ||||
| `TRAEFIK_SERVERSTRANSPORT_ROOTCAS`:   | ||||
| Add cert file for self-signed certificate. | ||||
|  | ||||
| `TRAEFIK_SERVERSTRANSPORT_SPIFFE`:   | ||||
| Defines the SPIFFE configuration. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_SERVERSTRANSPORT_SPIFFE_IDS`:   | ||||
| Defines the allowed SPIFFE IDs (takes precedence over the SPIFFE TrustDomain). | ||||
|  | ||||
| `TRAEFIK_SERVERSTRANSPORT_SPIFFE_TRUSTDOMAIN`:   | ||||
| Defines the allowed SPIFFE trust domain. | ||||
|  | ||||
| `TRAEFIK_SPIFFE_WORKLOADAPIADDR`:   | ||||
| Defines the workload API address. | ||||
|  | ||||
| `TRAEFIK_TRACING`:   | ||||
| OpenTracing configuration. (Default: ```false```) | ||||
|  | ||||
| @@ -981,9 +1035,6 @@ Sets the header name prefix used to store baggage items in a map. | ||||
| `TRAEFIK_TRACING_DATADOG_DEBUG`:   | ||||
| Enables Datadog debug. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_TRACING_DATADOG_GLOBALTAG`:   | ||||
| Sets a key:value tag on all spans. | ||||
|  | ||||
| `TRAEFIK_TRACING_DATADOG_GLOBALTAGS_<NAME>`:   | ||||
| Sets a list of key:value tags on all spans. | ||||
|  | ||||
| @@ -1089,6 +1140,36 @@ Sets the sampling type. (Default: ```const```) | ||||
| `TRAEFIK_TRACING_JAEGER_TRACECONTEXTHEADERNAME`:   | ||||
| Sets the header name used to store the trace ID. (Default: ```uber-trace-id```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY`:   | ||||
| Settings for OpenTelemetry. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_ADDRESS`:   | ||||
| Sets the address (host:port) of the collector endpoint. (Default: ```localhost:4318```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_GRPC`:   | ||||
| gRPC specific configuration for the OpenTelemetry collector. (Default: ```true```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_HEADERS_<NAME>`:   | ||||
| Defines additional headers to be sent with the payloads. | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_INSECURE`:   | ||||
| Disables client transport security for the exporter. (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_PATH`:   | ||||
| Sets the URL path of the collector endpoint. | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_TLS_CA`:   | ||||
| TLS CA | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_TLS_CERT`:   | ||||
| TLS cert | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_TLS_INSECURESKIPVERIFY`:   | ||||
| TLS insecure skip verify (Default: ```false```) | ||||
|  | ||||
| `TRAEFIK_TRACING_OPENTELEMETRY_TLS_KEY`:   | ||||
| TLS key | ||||
|  | ||||
| `TRAEFIK_TRACING_SERVICENAME`:   | ||||
| Set the name for this service. (Default: ```traefik```) | ||||
|  | ||||
|   | ||||
| @@ -14,6 +14,7 @@ | ||||
| [entryPoints] | ||||
|   [entryPoints.EntryPoint0] | ||||
|     address = "foobar" | ||||
|     asDefault = true | ||||
|     [entryPoints.EntryPoint0.transport] | ||||
|       [entryPoints.EntryPoint0.transport.lifeCycle] | ||||
|         requestAcceptGraceTimeout = "42s" | ||||
| @@ -70,7 +71,6 @@ | ||||
|     allowEmptyServices = true | ||||
|     [providers.docker.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -95,7 +95,6 @@ | ||||
|     respectReadinessChecks = true | ||||
|     [providers.marathon.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -158,7 +157,6 @@ | ||||
|     connectByDefault = true | ||||
|     serviceName = "foobar" | ||||
|     watch = true | ||||
|     namespace = "foobar" | ||||
|     namespaces = ["foobar", "foobar"] | ||||
|     [providers.consulCatalog.endpoint] | ||||
|       address = "foobar" | ||||
| @@ -168,7 +166,6 @@ | ||||
|       endpointWaitTime = "42s" | ||||
|       [providers.consulCatalog.endpoint.tls] | ||||
|         ca = "foobar" | ||||
|         caOptional = true | ||||
|         cert = "foobar" | ||||
|         key = "foobar" | ||||
|         insecureSkipVerify = true | ||||
| @@ -180,7 +177,7 @@ | ||||
|     constraints = "foobar" | ||||
|     prefix = "foobar" | ||||
|     stale = true | ||||
|     namespace = "foobar" | ||||
|     namespaces = ["foobar", "foobar"] | ||||
|     exposedByDefault = true | ||||
|     refreshInterval = "42s" | ||||
|     [providers.nomad.endpoint] | ||||
| @@ -190,7 +187,6 @@ | ||||
|       endpointWaitTime = "42s" | ||||
|       [providers.nomad.endpoint.tls] | ||||
|         ca = "foobar" | ||||
|         caOptional = true | ||||
|         cert = "foobar" | ||||
|         key = "foobar" | ||||
|         insecureSkipVerify = true | ||||
| @@ -205,15 +201,14 @@ | ||||
|     accessKeyID = "foobar" | ||||
|     secretAccessKey = "foobar" | ||||
|     ecsAnywhere = true | ||||
|     healthyTasksOnly = true | ||||
|   [providers.consul] | ||||
|     rootKey = "foobar" | ||||
|     endpoints = ["foobar", "foobar"] | ||||
|     token = "foobar" | ||||
|     namespace = "foobar" | ||||
|     namespaces = ["foobar", "foobar"] | ||||
|     [providers.consul.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -224,7 +219,6 @@ | ||||
|     password = "foobar" | ||||
|     [providers.etcd.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -241,7 +235,6 @@ | ||||
|     db = 42 | ||||
|     [providers.redis.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -249,9 +242,11 @@ | ||||
|     endpoint = "foobar" | ||||
|     pollInterval = "42s" | ||||
|     pollTimeout = "42s" | ||||
|     [providers.http.headers] | ||||
|       name0 = "foobar" | ||||
|       name1 = "foobar" | ||||
|     [providers.http.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
| @@ -312,6 +307,25 @@ | ||||
|     [metrics.influxDB2.additionalLabels] | ||||
|       name0 = "foobar" | ||||
|       name1 = "foobar" | ||||
|   [metrics.openTelemetry] | ||||
|     address = "foobar" | ||||
|     addEntryPointsLabels = true | ||||
|     addRoutersLabels = true | ||||
|     addServicesLabels = true | ||||
|     pushInterval = "42s" | ||||
|     path = "foobar" | ||||
|     explicitBoundaries =  [42.0, 42.0] | ||||
|     insecure = true | ||||
|     [metrics.openTelemetry.headers] | ||||
|       name0 = "foobar" | ||||
|       name1 = "foobar" | ||||
|     [metrics.openTelemetry.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       insecureSkipVerify = true | ||||
|       key = "foobar" | ||||
|     [metrics.openTelemetry.grpc] | ||||
|  | ||||
| [ping] | ||||
|   entryPoint = "foobar" | ||||
| @@ -320,8 +334,13 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "foobar" | ||||
|   filePath = "foobar" | ||||
|   format = "foobar" | ||||
|   noColor = true | ||||
|   filePath = "foobar" | ||||
|   maxSize = 42 | ||||
|   maxBackups = 42 | ||||
|   maxAge = 42 | ||||
|   compress = true | ||||
|  | ||||
| [accessLog] | ||||
|   filePath = "foobar" | ||||
| @@ -365,7 +384,6 @@ | ||||
|     sampleRate = 42.0 | ||||
|   [tracing.datadog] | ||||
|     localAgentHostPort = "foobar" | ||||
|     globalTag = "foobar" | ||||
|     [tracing.datadog.globalTags] | ||||
|       tag1 = "foobar" | ||||
|       tag2 = "foobar" | ||||
| @@ -392,6 +410,20 @@ | ||||
|     serverURL = "foobar" | ||||
|     secretToken = "foobar" | ||||
|     serviceEnvironment = "foobar" | ||||
|   [tracing.openTelemetry] | ||||
|     address = "foobar" | ||||
|     insecure = true | ||||
|     path = "foobar" | ||||
|     [tracing.openTelemetry.headers] | ||||
|       name0 = "foobar" | ||||
|       name1 = "foobar" | ||||
|     [tracing.openTelemetry.tls] | ||||
|       ca = "foobar" | ||||
|       caOptional = true | ||||
|       cert = "foobar" | ||||
|       key = "foobar" | ||||
|       insecureSkipVerify = true | ||||
|     [tracing.openTelemetry.grpc] | ||||
|  | ||||
| [hostResolver] | ||||
|   cnameFlattening = true | ||||
| @@ -418,25 +450,7 @@ | ||||
|       [certificatesResolvers.CertificateResolver0.acme.httpChallenge] | ||||
|         entryPoint = "foobar" | ||||
|       [certificatesResolvers.CertificateResolver0.acme.tlsChallenge] | ||||
|   [certificatesResolvers.CertificateResolver1] | ||||
|     [certificatesResolvers.CertificateResolver1.acme] | ||||
|       email = "foobar" | ||||
|       caServer = "foobar" | ||||
|       preferredChain = "foobar" | ||||
|       storage = "foobar" | ||||
|       keyType = "foobar" | ||||
|       certificatesDuration = 42 | ||||
|       [certificatesResolvers.CertificateResolver1.acme.eab] | ||||
|         kid = "foobar" | ||||
|         hmacEncoded = "foobar" | ||||
|       [certificatesResolvers.CertificateResolver1.acme.dnsChallenge] | ||||
|         provider = "foobar" | ||||
|         delayBeforeCheck = "42s" | ||||
|         resolvers = ["foobar", "foobar"] | ||||
|         disablePropagationCheck = true | ||||
|       [certificatesResolvers.CertificateResolver1.acme.httpChallenge] | ||||
|         entryPoint = "foobar" | ||||
|       [certificatesResolvers.CertificateResolver1.acme.tlsChallenge] | ||||
|   [certificatesResolvers.CertificateResolver1.tailscale] | ||||
|  | ||||
| [hub] | ||||
|   [hub.tls] | ||||
|   | ||||
| @@ -14,6 +14,7 @@ serversTransport: | ||||
| entryPoints: | ||||
|   EntryPoint0: | ||||
|     address: foobar | ||||
|     asDefault: true | ||||
|     transport: | ||||
|       lifeCycle: | ||||
|         requestAcceptGraceTimeout: 42s | ||||
| @@ -69,7 +70,6 @@ providers: | ||||
|     defaultRule: foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -95,7 +95,6 @@ providers: | ||||
|     dcosToken: foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -170,7 +169,6 @@ providers: | ||||
|     connectByDefault: true | ||||
|     serviceName: foobar | ||||
|     watch: true | ||||
|     namespace: foobar | ||||
|     namespaces: | ||||
|       - foobar | ||||
|       - foobar | ||||
| @@ -182,7 +180,6 @@ providers: | ||||
|       endpointWaitTime: 42s | ||||
|       tls: | ||||
|         ca: foobar | ||||
|         caOptional: true | ||||
|         cert: foobar | ||||
|         key: foobar | ||||
|         insecureSkipVerify: true | ||||
| @@ -194,7 +191,9 @@ providers: | ||||
|     constraints: foobar | ||||
|     prefix: foobar | ||||
|     stale: true | ||||
|     namespace: foobar | ||||
|     namespaces: | ||||
|       - foobar | ||||
|       - foobar | ||||
|     exposedByDefault: true | ||||
|     refreshInterval: 42s | ||||
|     endpoint: | ||||
| @@ -204,7 +203,6 @@ providers: | ||||
|       endpointWaitTime: 42s | ||||
|       tls: | ||||
|         ca: foobar | ||||
|         caOptional: true | ||||
|         cert: foobar | ||||
|         key: foobar | ||||
|         insecureSkipVerify: true | ||||
| @@ -221,19 +219,18 @@ providers: | ||||
|     accessKeyID: foobar | ||||
|     secretAccessKey: foobar | ||||
|     ecsAnywhere: true | ||||
|     healthyTasksOnly: true | ||||
|   consul: | ||||
|     rootKey: foobar | ||||
|     endpoints: | ||||
|       - foobar | ||||
|       - foobar | ||||
|     token: foobar | ||||
|     namespace: foobar | ||||
|     namespaces: | ||||
|       - foobar | ||||
|       - foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -246,7 +243,6 @@ providers: | ||||
|     password: foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -267,7 +263,6 @@ providers: | ||||
|     db: 42 | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -275,9 +270,11 @@ providers: | ||||
|     endpoint: foobar | ||||
|     pollInterval: 42s | ||||
|     pollTimeout: 42s | ||||
|     headers: | ||||
|       name0: foobar | ||||
|       name1: foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
| @@ -338,14 +335,41 @@ metrics: | ||||
|     additionalLabels: | ||||
|       name0: foobar | ||||
|       name1: foobar | ||||
|   openTelemetry: | ||||
|     address: foobar | ||||
|     addEntryPointsLabels: true | ||||
|     addRoutersLabels: true | ||||
|     addServicesLabels: true | ||||
|     explicitBoundaries: | ||||
|       - 42 | ||||
|       - 42 | ||||
|     headers: | ||||
|       name0: foobar | ||||
|       name1: foobar | ||||
|     insecure: true | ||||
|     path: foobar | ||||
|     pushInterval: 42s | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       insecureSkipVerify: true | ||||
|       key: foobar | ||||
|     grpc: {} | ||||
|  | ||||
| ping: | ||||
|   entryPoint: foobar | ||||
|   manualRouting: true | ||||
|   terminatingStatusCode: 42 | ||||
| log: | ||||
|   level: foobar | ||||
|   filePath: foobar | ||||
|   format: foobar | ||||
|   noColor: true | ||||
|   filePath: foobar | ||||
|   maxSize: 42 | ||||
|   maxBackups: 42 | ||||
|   maxAge: 42 | ||||
|   compress: true | ||||
| accessLog: | ||||
|   filePath: foobar | ||||
|   format: foobar | ||||
| @@ -389,7 +413,6 @@ tracing: | ||||
|     sampleRate: 42 | ||||
|   datadog: | ||||
|     localAgentHostPort: foobar | ||||
|     globalTag: foobar | ||||
|     globalTags: | ||||
|       tag1: foobar | ||||
|       tag2: foobar | ||||
| @@ -416,6 +439,20 @@ tracing: | ||||
|     serverURL: foobar | ||||
|     secretToken: foobar | ||||
|     serviceEnvironment: foobar | ||||
|   openTelemetry: | ||||
|     address: foobar | ||||
|     headers: | ||||
|       name0: foobar | ||||
|       name1: foobar | ||||
|     insecure: true | ||||
|     path: foobar | ||||
|     tls: | ||||
|       ca: foobar | ||||
|       caOptional: true | ||||
|       cert: foobar | ||||
|       key: foobar | ||||
|       insecureSkipVerify: true | ||||
|     grpc: {} | ||||
| hostResolver: | ||||
|   cnameFlattening: true | ||||
|   resolvConfig: foobar | ||||
| @@ -443,26 +480,7 @@ certificatesResolvers: | ||||
|         entryPoint: foobar | ||||
|       tlsChallenge: {} | ||||
|   CertificateResolver1: | ||||
|     acme: | ||||
|       email: foobar | ||||
|       caServer: foobar | ||||
|       certificatesDuration: 42 | ||||
|       preferredChain: foobar | ||||
|       storage: foobar | ||||
|       keyType: foobar | ||||
|       eab: | ||||
|         kid: foobar | ||||
|         hmacEncoded: foobar | ||||
|       dnsChallenge: | ||||
|         provider: foobar | ||||
|         delayBeforeCheck: 42s | ||||
|         resolvers: | ||||
|           - foobar | ||||
|           - foobar | ||||
|         disablePropagationCheck: true | ||||
|       httpChallenge: | ||||
|         entryPoint: foobar | ||||
|       tlsChallenge: {} | ||||
|     tailscale: {} | ||||
| hub: | ||||
|   tls: | ||||
|     insecure: true | ||||
|   | ||||
| @@ -233,6 +233,54 @@ If both TCP and UDP are wanted for the same port, two entryPoints definitions ar | ||||
|  | ||||
|     Full details for how to specify `address` can be found in [net.Listen](https://golang.org/pkg/net/#Listen) (and [net.Dial](https://golang.org/pkg/net/#Dial)) of the doc for go. | ||||
|  | ||||
| ### AsDefault | ||||
|  | ||||
| _Optional, Default=false_ | ||||
|  | ||||
| The `AsDefault` option marks the EntryPoint to be in the list of default EntryPoints. | ||||
| EntryPoints in this list are used (by default) on HTTP and TCP routers that do not define their own [EntryPoints option](./routers/index.md#entrypoints). | ||||
|  | ||||
| !!! info "List of default EntryPoints" | ||||
|  | ||||
|     If there is no EntryPoint with the `AsDefault` option set to `true`,  | ||||
|     then the list of default EntryPoints includes all HTTP/TCP EntryPoints. | ||||
|  | ||||
|     If at least one EntryPoint has the `AsDefault` option set to `true`, | ||||
|     then the list of default EntryPoints includes only EntryPoints that have the `AsDefault` option set to `true`. | ||||
|  | ||||
|     Some built-in EntryPoints are always excluded from the list, namely: `traefik`, `traefikhub-api`, and `traefikhub-tunl`. | ||||
|  | ||||
| !!! warning "Only TCP and HTTP" | ||||
|  | ||||
|     The `AsDefault` option has no effect on UDP EntryPoints. | ||||
|     When a UDP router does not define the [EntryPoints option](./routers/index.md#entrypoints_2), | ||||
|     it is attached to all available UDP EntryPoints. | ||||
|  | ||||
| ??? example "Defining only one EntryPoint as default" | ||||
|  | ||||
|     ```yaml tab="File (yaml)" | ||||
|     entryPoints: | ||||
|       web: | ||||
|         address: ":80" | ||||
|       websecure: | ||||
|         address: ":443" | ||||
|         asDefault: true | ||||
|     ``` | ||||
|  | ||||
|     ```toml tab="File (TOML)" | ||||
|     [entryPoints.web] | ||||
|       address = ":80" | ||||
|     [entryPoints.websecure] | ||||
|       address = ":443" | ||||
|       asDefault = true | ||||
|     ``` | ||||
|  | ||||
|     ```bash tab="CLI" | ||||
|     --entrypoints.web.address=:80 | ||||
|     --entrypoints.websecure.address=:443 | ||||
|     --entrypoints.websecure.asDefault=true | ||||
|     ``` | ||||
|  | ||||
| ### HTTP/2 | ||||
|  | ||||
| #### `maxConcurrentStreams` | ||||
|   | ||||
| @@ -325,6 +325,61 @@ serversTransport: | ||||
| --serversTransport.maxIdleConnsPerHost=7 | ||||
| ``` | ||||
|  | ||||
| ### `spiffe` | ||||
|  | ||||
| Please note that [SPIFFE](../https/spiffe.md) must be enabled in the static configuration  | ||||
| before using it to secure the connection between Traefik and the backends.   | ||||
|  | ||||
| #### `spiffe.ids` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `ids` defines the allowed SPIFFE IDs. | ||||
| This takes precedence over the SPIFFE TrustDomain. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| ## Static configuration | ||||
| serversTransport: | ||||
|     spiffe: | ||||
|       ids: | ||||
|         - spiffe://trust-domain/id1 | ||||
|         - spiffe://trust-domain/id2 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| ## Static configuration | ||||
| [serversTransport.spiffe] | ||||
|   ids = ["spiffe://trust-domain/id1", "spiffe://trust-domain/id2"] | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| ## Static configuration | ||||
| --serversTransport.spiffe.ids=spiffe://trust-domain/id1,spiffe://trust-domain/id2 | ||||
| ``` | ||||
|  | ||||
| #### `spiffe.trustDomain` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `trustDomain` defines the allowed SPIFFE trust domain. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| ## Static configuration | ||||
| serversTransport: | ||||
|   trustDomain: spiffe://trust-domain | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| ## Static configuration | ||||
| [serversTransport.spiffe] | ||||
|   trustDomain = "spiffe://trust-domain" | ||||
| ``` | ||||
|  | ||||
| ```bash tab="CLI" | ||||
| ## Static configuration | ||||
| --serversTransport.spiffe.trustDomain=spiffe://trust-domain | ||||
| ``` | ||||
|  | ||||
| ### `forwardingTimeouts` | ||||
|  | ||||
| `forwardingTimeouts` is about a number of timeouts relevant to when forwarding requests to the backend servers. | ||||
|   | ||||
| @@ -193,6 +193,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.method=foobar | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|      | ||||
|     ```yaml | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.status=42 | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -347,6 +347,14 @@ you'd add the label `traefik.http.services.<name-of-your-choice>.loadbalancer.pa | ||||
|     - "traefik.http.services.myservice.loadbalancer.healthcheck.method=foobar" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|  | ||||
|     ```yaml | ||||
|     - "traefik.http.services.myservice.loadbalancer.healthcheck.status=42" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -195,6 +195,14 @@ you'd add the label `traefik.http.services.{name-of-your-choice}.loadbalancer.pa | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.method=foobar | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|      | ||||
|     ```yaml | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.status=42 | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -48,7 +48,7 @@ The Kubernetes Ingress Controller, The Custom Resource Way. | ||||
|           serviceAccountName: traefik-ingress-controller | ||||
|           containers: | ||||
|             - name: traefik | ||||
|               image: traefik:v2.9 | ||||
|               image: traefik:v3.0 | ||||
|               args: | ||||
|                 - --log.level=DEBUG | ||||
|                 - --api | ||||
| @@ -1287,9 +1287,9 @@ Register the `MiddlewareTCP` [kind](../../reference/dynamic-configuration/kubern | ||||
|     apiVersion: traefik.containo.us/v1alpha1 | ||||
|     kind: MiddlewareTCP | ||||
|     metadata: | ||||
|       name: ipwhitelist | ||||
|       name: ipallowlist | ||||
|     spec: | ||||
|       ipWhiteList: | ||||
|       ipAllowList: | ||||
|         sourceRange: | ||||
|           - 127.0.0.1/32 | ||||
|           - 192.168.1.7 | ||||
| @@ -1305,13 +1305,13 @@ Register the `MiddlewareTCP` [kind](../../reference/dynamic-configuration/kubern | ||||
|       entryPoints: | ||||
|         - web | ||||
|       routes: | ||||
|       - match: Host(`example.com`) && PathPrefix(`/whitelist`) | ||||
|       - match: Host(`example.com`) && PathPrefix(`/allowlist`) | ||||
|         kind: Rule | ||||
|         services: | ||||
|         - name: whoami | ||||
|           port: 80 | ||||
|         middlewares: | ||||
|         - name: ipwhitelist | ||||
|         - name: ipallowlist | ||||
|           namespace: foo | ||||
|     ``` | ||||
|  | ||||
|   | ||||
| @@ -147,7 +147,7 @@ which in turn will create the resulting routers, services, handlers, etc. | ||||
|           serviceAccountName: traefik-ingress-controller | ||||
|           containers: | ||||
|             - name: traefik | ||||
|               image: traefik:v2.9 | ||||
|               image: traefik:v3.0 | ||||
|               args: | ||||
|                 - --entrypoints.web.address=:80 | ||||
|                 - --providers.kubernetesingress | ||||
| @@ -539,7 +539,7 @@ This way, any Ingress attached to this Entrypoint will have TLS termination by d | ||||
|           serviceAccountName: traefik-ingress-controller | ||||
|           containers: | ||||
|             - name: traefik | ||||
|               image: traefik:v2.9 | ||||
|               image: traefik:v3.0 | ||||
|               args: | ||||
|                 - --entrypoints.websecure.address=:443 | ||||
|                 - --entrypoints.websecure.http.tls | ||||
| @@ -749,7 +749,7 @@ For more options, please refer to the available [annotations](#on-ingress). | ||||
|           serviceAccountName: traefik-ingress-controller | ||||
|           containers: | ||||
|             - name: traefik | ||||
|               image: traefik:v2.9 | ||||
|               image: traefik:v3.0 | ||||
|               args: | ||||
|                 - --entrypoints.websecure.address=:443 | ||||
|                 - --providers.kubernetesingress | ||||
|   | ||||
| @@ -172,6 +172,14 @@ A Story of key & values | ||||
|     |-------------------------------------------------------------------|----------| | ||||
|     | `traefik/http/services/myservice/loadbalancer/healthcheck/method` | `foobar` | | ||||
|  | ||||
| ??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/status`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|  | ||||
|     | Key (Path)                                                        | Value | | ||||
|     |-------------------------------------------------------------------|-------| | ||||
|     | `traefik/http/services/myservice/loadbalancer/healthcheck/status` | `42`  | | ||||
|  | ||||
| ??? info "`traefik/http/services/<service_name>/loadbalancer/healthcheck/port`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -222,6 +222,14 @@ For example, to change the passHostHeader behavior, you'd add the label `"traefi | ||||
|     "traefik.http.services.myservice.loadbalancer.healthcheck.method": "foobar" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|      | ||||
|     ```json | ||||
|     "traefik.http.services.myservice.loadbalancer.healthcheck.status": "42" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -185,6 +185,14 @@ you'd add the tag `traefik.http.services.{name-of-your-choice}.loadbalancer.pass | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.path=/foo | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|  | ||||
|     ```yaml | ||||
|     traefik.http.services.myservice.loadbalancer.healthcheck.status=42 | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|  | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -228,6 +228,14 @@ you'd add the label `traefik.http.services.{name-of-your-choice}.loadbalancer.pa | ||||
|     - "traefik.http.services.myservice.loadbalancer.healthcheck.method=foobar" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.status`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|      | ||||
|     ```yaml | ||||
|     - "traefik.http.services.myservice.loadbalancer.healthcheck.status=42" | ||||
|     ``` | ||||
|  | ||||
| ??? info "`traefik.http.services.<service_name>.loadbalancer.healthcheck.port`" | ||||
|      | ||||
|     See [health check](../services/index.md#health-check) for more information. | ||||
|   | ||||
| @@ -94,7 +94,7 @@ or act before forwarding the request to the service. | ||||
|  | ||||
| ### EntryPoints | ||||
|  | ||||
| If not specified, HTTP routers will accept requests from all defined entry points. | ||||
| If not specified, HTTP routers will accept requests from all EntryPoints in the [list of default EntryPoints](../entrypoints.md#asdefault). | ||||
| If you want to limit the router scope to a set of entry points, set the `entryPoints` option. | ||||
|  | ||||
| ??? example "Listens to Every EntryPoint" | ||||
| @@ -106,7 +106,7 @@ If you want to limit the router scope to a set of entry points, set the `entryPo | ||||
|     http: | ||||
|       routers: | ||||
|         Router-1: | ||||
|           # By default, routers listen to every entry points | ||||
|           # By default, routers listen to every EntryPoints. | ||||
|           rule: "Host(`example.com`)" | ||||
|           service: "service-1" | ||||
|     ``` | ||||
| @@ -115,7 +115,7 @@ If you want to limit the router scope to a set of entry points, set the `entryPo | ||||
|     ## Dynamic configuration | ||||
|     [http.routers] | ||||
|       [http.routers.Router-1] | ||||
|         # By default, routers listen to every entry points | ||||
|         # By default, routers listen to every EntryPoints. | ||||
|         rule = "Host(`example.com`)" | ||||
|         service = "service-1" | ||||
|     ``` | ||||
| @@ -214,78 +214,224 @@ If you want to limit the router scope to a set of entry points, set the `entryPo | ||||
| Rules are a set of matchers configured with values, that determine if a particular request matches specific criteria. | ||||
| If the rule is verified, the router becomes active, calls middlewares, and then forwards the request to the service. | ||||
|  | ||||
| ??? tip "Backticks or Quotes?" | ||||
|     To set the value of a rule, use [backticks](https://en.wiktionary.org/wiki/backtick) ``` ` ``` or escaped double-quotes `\"`. | ||||
|  | ||||
|     Single quotes `'` are not accepted since the values are [Golang's String Literals](https://golang.org/ref/spec#String_literals). | ||||
|  | ||||
| !!! example "Host is example.com" | ||||
|  | ||||
|     ```toml | ||||
|     rule = "Host(`example.com`)" | ||||
|     ``` | ||||
|  | ||||
| !!! example "Host is example.com OR Host is example.org AND path is /traefik" | ||||
|  | ||||
|     ```toml | ||||
|     rule = "Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))" | ||||
|     ``` | ||||
|  | ||||
| The table below lists all the available matchers: | ||||
|  | ||||
| | Rule                                                                                       | Description                                                                                                    | | ||||
| |--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| | ||||
| | ```Headers(`key`, `value`)```                                                              | Check if there is a key `key`defined in the headers, with the value `value`                                    | | ||||
| | ```HeadersRegexp(`key`, `regexp`)```                                                       | Check if there is a key `key`defined in the headers, with a value that matches the regular expression `regexp` | | ||||
| | ```Host(`example.com`, ...)```                                                             | Check if the request domain (host header value) targets one of the given `domains`.                            | | ||||
| | ```HostHeader(`example.com`, ...)```                                                       | Same as `Host`, only exists for historical reasons.                                                            | | ||||
| | ```HostRegexp(`example.com`, `{subdomain:[a-z]+}.example.com`, ...)```                     | Match the request domain. See "Regexp Syntax" below.                                                           | | ||||
| | ```Method(`GET`, ...)```                                                                   | Check if the request method is one of the given `methods` (`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`)    | | ||||
| | ```Path(`/path`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`, ...)```                             | Match exact request path. See "Regexp Syntax" below.                                                           | | ||||
| | ```PathPrefix(`/products/`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`)```                       | Match request prefix path. See "Regexp Syntax" below.                                                          | | ||||
| | ```Query(`foo=bar`, `bar=baz`)```                                                          | Match Query String parameters. It accepts a sequence of key=value pairs.                                       | | ||||
| | ```ClientIP(`10.0.0.0/16`, `::1`)```                                                       | Match if the request client IP is one of the given IP/CIDR. It accepts IPv4, IPv6 and CIDR formats.            | | ||||
| | Rule                                                            | Description                                                                    | | ||||
| |-----------------------------------------------------------------|:-------------------------------------------------------------------------------| | ||||
| | [```Header(`key`, `value`)```](#header-and-headerregexp)        | Matches requests containing a header named `key` set to `value`.               | | ||||
| | [```HeaderRegexp(`key`, `regexp`)```](#header-and-headerregexp) | Matches requests containing a header named `key` matching `regexp`.            | | ||||
| | [```Host(`domain`)```](#host-and-hostregexp)                    | Matches requests host set to `domain`.                                         | | ||||
| | [```HostRegexp(`regexp`)```](#host-and-hostregexp)              | Matches requests host matching `regexp`.                                       | | ||||
| | [```Method(`method`)```](#method)                               | Matches requests method set to `method`.                                       | | ||||
| | [```Path(`path`)```](#path-pathprefix-and-pathregexp)           | Matches requests path set to `path`.                                           | | ||||
| | [```PathPrefix(`prefix`)```](#path-pathprefix-and-pathregexp)   | Matches requests path prefix set to `prefix`.                                  | | ||||
| | [```PathRegexp(`regexp`)```](#path-pathprefix-and-pathregexp)   | Matches request path using `regexp`.                                           | | ||||
| | [```Query(`key`, `value`)```](#query-and-queryregexp)           | Matches requests query parameters named `key` set to `value`.                  | | ||||
| | [```QueryRegexp(`key`, `regexp`)```](#query-and-queryregexp)    | Matches requests query parameters named `key` matching `regexp`.               | | ||||
| | [```ClientIP(`ip`)```](#clientip)                               | Matches requests client IP using `ip`. It accepts IPv4, IPv6 and CIDR formats. | | ||||
|  | ||||
| !!! important "Non-ASCII Domain Names" | ||||
| !!! tip "Backticks or Quotes?" | ||||
|  | ||||
|     Non-ASCII characters are not supported in `Host` and `HostRegexp` expressions, and by doing so the associated router will be invalid. | ||||
|     For the `Host` expression, domain names containing non-ASCII characters must be provided as punycode encoded values ([rfc 3492](https://tools.ietf.org/html/rfc3492)). | ||||
|     As well, when using the `HostRegexp` expressions, in order to match domain names containing non-ASCII characters, the regular expression should match a punycode encoded domain name. | ||||
|     To set the value of a rule, use [backticks](https://en.wiktionary.org/wiki/backtick) ``` ` ``` or escaped double-quotes `\"`. | ||||
|  | ||||
|     Single quotes `'` are not accepted since the values are [Go's String Literals](https://golang.org/ref/spec#String_literals). | ||||
|  | ||||
| !!! important "Regexp Syntax" | ||||
|  | ||||
|     `HostRegexp`, `PathPrefix`, and `Path` accept an expression with zero or more groups enclosed by curly braces, which are called named regexps. | ||||
|     Named regexps, of the form `{name:regexp}`, are the only expressions considered for regexp matching. | ||||
|     The regexp name (`name` in the above example) is an arbitrary value, that exists only for historical reasons. | ||||
|     Matchers that accept a regexp as their value use a [Go](https://golang.org/pkg/regexp/) flavored syntax. | ||||
|  | ||||
|     Any `regexp` supported by [Go's regexp package](https://golang.org/pkg/regexp/) may be used. | ||||
|     For example, here is a case insensitive path matcher syntax: ```Path(`/{path:(?i:Products)}`)```. | ||||
|  | ||||
| !!! info "Combining Matchers Using Operators and Parenthesis" | ||||
| !!! info "Expressing Complex Rules Using Operators and Parenthesis" | ||||
|  | ||||
|     The usual AND (`&&`) and OR (`||`) logical operators can be used, with the expected precedence rules, | ||||
|     as well as parentheses. | ||||
|      | ||||
|     One can invert a matcher by using the NOT (`!`) operator. | ||||
|      | ||||
|     The following rule matches requests where: | ||||
|      | ||||
|     - either host is `example.com` OR, | ||||
|     - host is `example.org` AND path is NOT `/traefik` | ||||
|      | ||||
|     ```yaml | ||||
|     Host(`example.com`) || (Host(`example.org`) && !Path(`/traefik`)) | ||||
|     ``` | ||||
|  | ||||
| !!! info "Inverting a matcher" | ||||
| #### Header and HeaderRegexp | ||||
|  | ||||
|     One can invert a matcher by using the `!` operator. | ||||
| The `Header` and `HeaderRegexp` matchers allow to match requests that contain specific header. | ||||
|  | ||||
| !!! important "Rule, Middleware, and Services" | ||||
| !!! example "Examples" | ||||
|      | ||||
|     Match requests with a `Content-Type` header set to `application/yaml`: | ||||
|      | ||||
|     ```yaml | ||||
|     Header(`Content-Type`, `application/yaml`) | ||||
|     ``` | ||||
|      | ||||
|     Match requests with a `Content-Type` header set to either `application/json` or `application/yaml`: | ||||
|      | ||||
|     ```yaml | ||||
|     HeaderRegexp(`Content-Type`, `^application/(json|yaml)$`) | ||||
|     ``` | ||||
|      | ||||
|     To match headers [case-insensitively](https://en.wikipedia.org/wiki/Case_sensitivity), use the `(?i)` option: | ||||
|      | ||||
|     ```yaml | ||||
|     HeaderRegexp(`Content-Type`, `(?i)^application/(json|yaml)$`) | ||||
|     ``` | ||||
|  | ||||
|     The rule is evaluated "before" any middleware has the opportunity to work, and "before" the request is forwarded to the service. | ||||
| #### Host and HostRegexp | ||||
|  | ||||
| !!! info "Path Vs PathPrefix" | ||||
| The `Host` and `HostRegexp` matchers allow to match requests that are targeted to a given host. | ||||
|  | ||||
|     Use `Path` if your service listens on the exact path only. For instance, ```Path(`/products`)``` would match `/products` but not `/products/shoes`. | ||||
| These matchers do not support non-ASCII characters, use punycode encoded values ([rfc 3492](https://tools.ietf.org/html/rfc3492)) to match such domains. | ||||
|  | ||||
|     Use a `*Prefix*` matcher if your service listens on a particular base path but also serves requests on sub-paths. | ||||
|     For instance, ```PathPrefix(`/products`)``` would match `/products` and `/products/shoes`, | ||||
|     as well as `/productsforsale`, and `/productsforsale/shoes`. | ||||
|     Since the path is forwarded as-is, your service is expected to listen on `/products`. | ||||
| If no Host is set in the request URL (e.g., it's an IP address), these matchers will look at the `Host` header. | ||||
|  | ||||
| !!! info "ClientIP matcher" | ||||
| !!! example "Examples" | ||||
|  | ||||
|     The `ClientIP` matcher will only match the request client IP and does not use the `X-Forwarded-For` header for matching. | ||||
|     Match requests with `Host` set to `example.com`: | ||||
|      | ||||
|     ```yaml | ||||
|     Host(`example.com`) | ||||
|     ``` | ||||
|   | ||||
|     Match requests sent to any subdomain of `example.com`: | ||||
|      | ||||
|     ```yaml | ||||
|     HostRegexp(`^.+\.example\.com$`) | ||||
|     ``` | ||||
|  | ||||
|     Match requests with `Host` set to either `example.com` or `example.org`: | ||||
|      | ||||
|     ```yaml | ||||
|     HostRegexp(`^example\.(com|org)$`) | ||||
|     ``` | ||||
|  | ||||
|     To match domains [case-insensitively](https://en.wikipedia.org/wiki/Case_sensitivity), use the `(?i)` option: | ||||
|  | ||||
|     ```yaml | ||||
|     HostRegexp(`(?i)^example\.(com|org)$`) | ||||
|     ``` | ||||
|  | ||||
| #### Method | ||||
|  | ||||
| The `Method` matchers allows to match requests sent with the given method. | ||||
|  | ||||
| !!! example "Example" | ||||
|  | ||||
|     Match `OPTIONS` requests: | ||||
|      | ||||
|     ```yaml | ||||
|     Method(`OPTIONS`) | ||||
|     ``` | ||||
|  | ||||
| #### Path, PathPrefix, and PathRegexp | ||||
|  | ||||
| These matchers allow matching requests based on their URL path. | ||||
|  | ||||
| For exact matches, use `Path` and its prefixed alternative `PathPrefix`, for regexp matches, use `PathRegexp`. | ||||
|  | ||||
| Path are always starting with a `/`, except for `PathRegexp`. | ||||
|  | ||||
| !!! example "Examples" | ||||
|  | ||||
|     Match `/products` but neither `/products/shoes` nor `/products/`: | ||||
|      | ||||
|     ```yaml | ||||
|     Path(`/products`) | ||||
|     ``` | ||||
|      | ||||
|     Match `/products` as well as everything under `/products`, | ||||
|     such as `/products/shoes`, `/products/` but also `/products-for-sale`: | ||||
|      | ||||
|     ```yaml | ||||
|     PathPrefix(`/products`) | ||||
|     ``` | ||||
|  | ||||
|     Match both `/products/shoes` and `/products/socks` with and ID like `/products/shoes/57`: | ||||
|  | ||||
|     ```yaml | ||||
|     PathRegexp(`^/products/(shoes|socks)/[0-9]+$`) | ||||
|     ``` | ||||
|  | ||||
|     Match requests with a path ending in either `.jpeg`, `.jpg` or `.png`: | ||||
|  | ||||
|     ```yaml | ||||
|     PathRegexp(`\.(jpeg|jpg|png)$`) | ||||
|     ``` | ||||
|  | ||||
|     Match `/products` as well as everything under `/products`, | ||||
|     such as `/products/shoes`, `/products/` but also `/products-for-sale`, | ||||
|     [case-insensitively](https://en.wikipedia.org/wiki/Case_sensitivity): | ||||
|  | ||||
|     ```yaml | ||||
|     HostRegexp(`(?i)^/products`) | ||||
|     ``` | ||||
|  | ||||
| #### Query and QueryRegexp | ||||
|  | ||||
| The `Query` and `QueryRegexp` matchers allow to match requests based on query parameters. | ||||
|  | ||||
| !!! example "Examples" | ||||
|  | ||||
|     Match requests with a `mobile` query parameter set to `true`, such as in `/search?mobile=true`: | ||||
|      | ||||
|     ```yaml | ||||
|     Query(`mobile`, `true`) | ||||
|     ``` | ||||
|  | ||||
|     To match requests with a query parameter `mobile` that has no value, such as in `/search?mobile`, use: | ||||
|  | ||||
|     ```yaml | ||||
|     Query(`mobile`) | ||||
|     ``` | ||||
|  | ||||
|     Match requests with a `mobile` query parameter set to either `true` or `yes`: | ||||
|      | ||||
|     ```yaml | ||||
|     QueryRegexp(`mobile`, `^(true|yes)$`) | ||||
|     ``` | ||||
|  | ||||
|     Match requests with a `mobile` query parameter set to any value (including the empty value): | ||||
|      | ||||
|     ```yaml | ||||
|     QueryRegexp(`mobile`, `^.*$`) | ||||
|     ``` | ||||
|  | ||||
|     To match query parameters [case-insensitively](https://en.wikipedia.org/wiki/Case_sensitivity), use the `(?i)` option: | ||||
|  | ||||
|     ```yaml | ||||
|     QueryRegexp(`mobile`, `(?i)^(true|yes)$`) | ||||
|     ``` | ||||
|  | ||||
| #### ClientIP | ||||
|  | ||||
| The `ClientIP` matcher allows matching requests sent from the given client IP. | ||||
|  | ||||
| It only matches the request client IP and does not use the `X-Forwarded-For` header for matching. | ||||
|  | ||||
| !!! example "Examples" | ||||
|  | ||||
|     Match requests coming from a given IP: | ||||
|      | ||||
|     ```yaml tab="IPv4" | ||||
|     ClientIP(`10.76.105.11`) | ||||
|     ``` | ||||
|      | ||||
|     ```yaml tab="IPv6" | ||||
|     ClientIP(`::1`) | ||||
|     ``` | ||||
|      | ||||
|     Match requests coming from a given subnet: | ||||
|  | ||||
|     ```yaml tab="IPv4" | ||||
|     ClientIP(`192.168.1.0/24`) | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="IPv6" | ||||
|     ClientIP(`fe80::/10`) | ||||
|     ``` | ||||
|  | ||||
| ### Priority | ||||
|  | ||||
| @@ -300,7 +446,7 @@ A value of `0` for the priority is ignored: `priority = 0` means that the defaul | ||||
|     http: | ||||
|       routers: | ||||
|         Router-1: | ||||
|           rule: "HostRegexp(`{subdomain:[a-z]+}.traefik.com`)" | ||||
|           rule: "HostRegexp(`[a-z]+\.traefik\.com`)" | ||||
|           # ... | ||||
|         Router-2: | ||||
|           rule: "Host(`foobar.traefik.com`)" | ||||
| @@ -311,7 +457,7 @@ A value of `0` for the priority is ignored: `priority = 0` means that the defaul | ||||
|     ## Dynamic configuration | ||||
|     [http.routers] | ||||
|       [http.routers.Router-1] | ||||
|         rule = "HostRegexp(`{subdomain:[a-z]+}.traefik.com`)" | ||||
|         rule = "HostRegexp(`[a-z]+\\.traefik\\.com`)" | ||||
|         # ... | ||||
|       [http.routers.Router-2] | ||||
|         rule = "Host(`foobar.traefik.com`)" | ||||
| @@ -320,10 +466,10 @@ A value of `0` for the priority is ignored: `priority = 0` means that the defaul | ||||
|  | ||||
|     In this case, all requests with host `foobar.traefik.com` will be routed through `Router-1` instead of `Router-2`. | ||||
|  | ||||
|     | Name     | Rule                                               | Priority | | ||||
|     |----------|----------------------------------------------------|----------| | ||||
|     | Router-1 | ```HostRegexp(`{subdomain:[a-z]+}.traefik.com`)``` | 44       | | ||||
|     | Router-2 | ```Host(`foobar.traefik.com`)```                   | 26       | | ||||
|     | Name     | Rule                                     | Priority | | ||||
|     |----------|------------------------------------------|----------| | ||||
|     | Router-1 | ```HostRegexp(`[a-z]+\.traefik\.com`)``` | 44       | | ||||
|     | Router-2 | ```Host(`foobar.traefik.com`)```         | 26       | | ||||
|  | ||||
|     The previous table shows that `Router-1` has a higher priority than `Router-2`. | ||||
|  | ||||
| @@ -336,7 +482,7 @@ A value of `0` for the priority is ignored: `priority = 0` means that the defaul | ||||
|     http: | ||||
|       routers: | ||||
|         Router-1: | ||||
|           rule: "HostRegexp(`{subdomain:[a-z]+}.traefik.com`)" | ||||
|           rule: "HostRegexp(`[a-z]+\\.traefik\\.com`)" | ||||
|           entryPoints: | ||||
|           - "web" | ||||
|           service: service-1 | ||||
| @@ -353,7 +499,7 @@ A value of `0` for the priority is ignored: `priority = 0` means that the defaul | ||||
|     ## Dynamic configuration | ||||
|     [http.routers] | ||||
|       [http.routers.Router-1] | ||||
|         rule = "HostRegexp(`{subdomain:[a-z]+}.traefik.com`)" | ||||
|         rule = "HostRegexp(`[a-z]+\\.traefik\\.com`)" | ||||
|         entryPoints = ["web"] | ||||
|         service = "service-1" | ||||
|         priority = 1 | ||||
| @@ -667,12 +813,12 @@ The [supported `provider` table](../../https/acme.md#providers) indicates if the | ||||
|  | ||||
| ### General | ||||
|  | ||||
| If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply *before* the HTTP routers. | ||||
| If both HTTP routers and TCP routers listen to the same EntryPoint, the TCP routers will apply *before* the HTTP routers. | ||||
| If no matching route is found for the TCP routers, then the HTTP routers will take over. | ||||
|  | ||||
| ### EntryPoints | ||||
|  | ||||
| If not specified, TCP routers will accept requests from all defined entry points. | ||||
| If not specified, TCP routers will accept requests from all EntryPoints in the [list of default EntryPoints](../entrypoints.md#asdefault).. | ||||
| If you want to limit the router scope to a set of entry points, set the entry points option. | ||||
|  | ||||
| ??? info "How to handle Server First protocols?" | ||||
| @@ -700,7 +846,7 @@ If you want to limit the router scope to a set of entry points, set the entry po | ||||
|     tcp: | ||||
|       routers: | ||||
|         Router-1: | ||||
|           # By default, routers listen to every entrypoints | ||||
|           # By default, routers listen to every EntryPoints. | ||||
|           rule: "HostSNI(`example.com`)" | ||||
|           service: "service-1" | ||||
|           # will route TLS requests (and ignore non tls requests) | ||||
| @@ -712,7 +858,7 @@ If you want to limit the router scope to a set of entry points, set the entry po | ||||
|  | ||||
|     [tcp.routers] | ||||
|       [tcp.routers.Router-1] | ||||
|         # By default, routers listen to every entrypoints | ||||
|         # By default, routers listen to every EntryPoints. | ||||
|         rule = "HostSNI(`example.com`)" | ||||
|         service = "service-1" | ||||
|         # will route TLS requests (and ignore non tls requests) | ||||
| @@ -752,7 +898,7 @@ If you want to limit the router scope to a set of entry points, set the entry po | ||||
|     --entrypoints.other.address=:9090 | ||||
|     ``` | ||||
|  | ||||
| ??? example "Listens to Specific Entry Points" | ||||
| ??? example "Listens to Specific EntryPoints" | ||||
|  | ||||
|     **Dynamic Configuration** | ||||
|  | ||||
| @@ -818,48 +964,49 @@ If you want to limit the router scope to a set of entry points, set the entry po | ||||
|  | ||||
| ### Rule | ||||
|  | ||||
| Rules are a set of matchers configured with values, that determine if a particular request matches specific criteria. | ||||
| Rules are a set of matchers configured with values, that determine if a particular connection matches specific criteria. | ||||
| If the rule is verified, the router becomes active, calls middlewares, and then forwards the request to the service. | ||||
|  | ||||
| ??? tip "Backticks or Quotes?" | ||||
|  | ||||
|      To set the value of a rule, use [backticks](https://en.wiktionary.org/wiki/backtick) ``` ` ``` or escaped double-quotes `\"`. | ||||
|  | ||||
|     Single quotes `'` are not accepted since the values are [Golang's String Literals](https://golang.org/ref/spec#String_literals). | ||||
|  | ||||
| !!! example "HostSNI is example.com" | ||||
|  | ||||
|     ```toml | ||||
|     rule = "HostSNI(`example.com`)" | ||||
|     ``` | ||||
|  | ||||
| !!! example "HostSNI is example.com OR HostSNI is example.org AND ClientIP is 0.0.0.0" | ||||
|  | ||||
|     ```toml | ||||
|     rule = "HostSNI(`example.com`) || (HostSNI(`example.org`) && ClientIP(`0.0.0.0`))" | ||||
|     ``` | ||||
|  | ||||
| The table below lists all the available matchers: | ||||
|  | ||||
| | Rule                                                                      | Description                                                                                             | | ||||
| |---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------| | ||||
| | ```HostSNI(`domain-1`, ...)```                                            | Checks if the Server Name Indication corresponds to the given `domains`.                                | | ||||
| | ```HostSNIRegexp(`example.com`, `{subdomain:[a-z]+}.example.com`, ...)``` | Checks if the Server Name Indication matches the given regular expressions. See "Regexp Syntax" below.  | | ||||
| | ```ClientIP(`10.0.0.0/16`, `::1`)```                                      | Checks if the connection client IP is one of the given IP/CIDR. It accepts IPv4, IPv6 and CIDR formats. | | ||||
| | ```ALPN(`mqtt`, `h2c`)```                                                 | Checks if any of the connection ALPN protocols is one of the given protocols.                           | | ||||
| | Rule                                                        | Description                                                                                      | | ||||
| |-------------------------------------------------------------|:-------------------------------------------------------------------------------------------------| | ||||
| | [```HostSNI(`domain`)```](#hostsni-and-hostsniregexp)       | Checks if the connection's Server Name Indication is equal to `domain`.                          | | ||||
| | [```HostSNIRegexp(`regexp`)```](#hostsni-and-hostsniregexp) | Checks if the connection's Server Name Indication matches `regexp`.                              | | ||||
| | [```ClientIP(`ip`)```](#clientip_1)                         | Checks if the connection's client IP correspond to `ip`. It accepts IPv4, IPv6 and CIDR formats. | | ||||
| | [```ALPN(`protocol`)```](#alpn)                             | Checks if the connection's ALPN protocol equals `protocol`.                                      | | ||||
|  | ||||
| !!! important "Non-ASCII Domain Names" | ||||
| !!! tip "Backticks or Quotes?" | ||||
|  | ||||
|     Non-ASCII characters are not supported in the `HostSNI` and `HostSNIRegexp` expressions, and so using them would invalidate the associated TCP router. | ||||
|     Domain names containing non-ASCII characters must be provided as punycode encoded values ([rfc 3492](https://tools.ietf.org/html/rfc3492)). | ||||
|      To set the value of a rule, use [backticks](https://en.wiktionary.org/wiki/backtick) ``` ` ``` or escaped double-quotes `\"`. | ||||
|  | ||||
|     Single quotes `'` are not accepted since the values are [Go's String Literals](https://golang.org/ref/spec#String_literals). | ||||
|  | ||||
| !!! important "Regexp Syntax" | ||||
|  | ||||
|     `HostSNIRegexp` accepts an expression with zero or more groups enclosed by curly braces, which are called named regexps. | ||||
|     Named regexps, of the form `{name:regexp}`, are the only expressions considered for regexp matching. | ||||
|     The regexp name (`name` in the above example) is an arbitrary value, that exists only for historical reasons. | ||||
|     Matchers that accept a regexp as their value use a [Go](https://golang.org/pkg/regexp/) flavored syntax. | ||||
|  | ||||
|     Any `regexp` supported by [Go's regexp package](https://golang.org/pkg/regexp/) may be used. | ||||
| !!! info "Expressing Complex Rules Using Operators and Parenthesis" | ||||
|  | ||||
|     The usual AND (`&&`) and OR (`||`) logical operators can be used, with the expected precedence rules, | ||||
|     as well as parentheses. | ||||
|      | ||||
|     One can invert a matcher by using the NOT (`!`) operator. | ||||
|      | ||||
|     The following rule matches connections where: | ||||
|      | ||||
|     - either Server Name Indication is `example.com` OR, | ||||
|     - Server Name Indication is `example.org` AND ALPN protocol is NOT `h2` | ||||
|      | ||||
|     ```yaml | ||||
|     HostSNI(`example.com`) || (HostSNI(`example.org`) && !ALPN(`h2`)) | ||||
|     ``` | ||||
|  | ||||
| #### HostSNI and HostSNIRegexp | ||||
|  | ||||
| `HostSNI` and `HostSNIRegexp` matchers allow to match connections targeted to a given domain. | ||||
|  | ||||
| These matchers do not support non-ASCII characters, use punycode encoded values ([rfc 3492](https://tools.ietf.org/html/rfc3492)) to match such domains. | ||||
|  | ||||
| !!! important "HostSNI & TLS" | ||||
|  | ||||
| @@ -869,25 +1016,72 @@ The table below lists all the available matchers: | ||||
|     when one wants a non-TLS router that matches all (non-TLS) requests, | ||||
|     one should use the specific ```HostSNI(`*`)``` syntax. | ||||
|  | ||||
| !!! info "Combining Matchers Using Operators and Parenthesis" | ||||
| !!! example "Examples" | ||||
|  | ||||
|     The usual AND (`&&`) and OR (`||`) logical operators can be used, with the expected precedence rules, | ||||
|     as well as parentheses. | ||||
|     Match all connections: | ||||
|      | ||||
|     ```yaml tab="HostSNI" | ||||
|     HostSNI(`*`) | ||||
|     ``` | ||||
|      | ||||
|     ```yaml tab="HostSNIRegexp" | ||||
|     HostSNIRegexp(`^.*$`) | ||||
|     ``` | ||||
|  | ||||
| !!! info "Inverting a matcher" | ||||
|     Match TCP connections sent to `example.com`: | ||||
|      | ||||
|     ```yaml | ||||
|     HostSNI(`example.com`) | ||||
|     ``` | ||||
|  | ||||
|     One can invert a matcher by using the `!` operator. | ||||
|     Match TCP connections openned on any subdomain of `example.com`: | ||||
|      | ||||
|     ```yaml | ||||
|     HostSNIRegexp(`^.+\.example\.com$`) | ||||
|     ``` | ||||
|  | ||||
| !!! important "Rule, Middleware, and Services" | ||||
| #### ClientIP | ||||
|  | ||||
|     The rule is evaluated "before" any middleware has the opportunity to work, and "before" the request is forwarded to the service. | ||||
| The `ClientIP` matcher allows matching connections opened by a client with the given IP. | ||||
|  | ||||
| !!! important "ALPN ACME-TLS/1" | ||||
| !!! example "Examples" | ||||
|  | ||||
|     It would be a security issue to let a user-defined router catch the response to | ||||
|     an ACME TLS challenge previously initiated by Traefik. | ||||
|     For this reason, the `ALPN` matcher is not allowed to match the `ACME-TLS/1` | ||||
|     protocol, and Traefik returns an error if this is attempted. | ||||
|     Match connections opened by a given IP: | ||||
|      | ||||
|     ```yaml tab="IPv4" | ||||
|     ClientIP(`10.76.105.11`) | ||||
|     ``` | ||||
|      | ||||
|     ```yaml tab="IPv6" | ||||
|     ClientIP(`::1`) | ||||
|     ``` | ||||
|      | ||||
|     Match connections coming from a given subnet: | ||||
|      | ||||
|     ```yaml tab="IPv4" | ||||
|     ClientIP(`192.168.1.0/24`) | ||||
|     ``` | ||||
|  | ||||
|     ```yaml tab="IPv6" | ||||
|     ClientIP(`fe80::/10`) | ||||
|     ``` | ||||
|  | ||||
| #### ALPN | ||||
|  | ||||
| The `ALPN` matcher allows matching connections the given protocol. | ||||
|  | ||||
| It would be a security issue to let a user-defined router catch the response to | ||||
| an ACME TLS challenge previously initiated by Traefik. | ||||
| For this reason, the `ALPN` matcher is not allowed to match the `ACME-TLS/1` | ||||
| protocol, and Traefik returns an error if this is attempted. | ||||
|  | ||||
| !!! example "Example" | ||||
|  | ||||
|     Match connections using the ALPN protocol `h2`: | ||||
|      | ||||
|     ```yaml | ||||
|     ALPN(`h2`) | ||||
|     ``` | ||||
|  | ||||
| ### Priority | ||||
|  | ||||
| @@ -987,7 +1181,7 @@ The middlewares will take effect only if the rule matches, and before connecting | ||||
|       [tcp.routers.my-router] | ||||
|         rule = "HostSNI(`*`)" | ||||
|         # declared elsewhere | ||||
|         middlewares = ["ipwhitelist"] | ||||
|         middlewares = ["ipallowlist"] | ||||
|         service = "service-foo" | ||||
|     ``` | ||||
|  | ||||
| @@ -999,7 +1193,7 @@ The middlewares will take effect only if the rule matches, and before connecting | ||||
|           rule: "HostSNI(`*`)" | ||||
|           # declared elsewhere | ||||
|           middlewares: | ||||
|           - ipwhitelist | ||||
|           - ipallowlist | ||||
|           service: service-foo | ||||
|     ``` | ||||
|  | ||||
| @@ -1042,6 +1236,30 @@ By default, a router with a TLS section will terminate the TLS connections, mean | ||||
|         [tcp.routers.Router-1.tls] | ||||
|     ``` | ||||
|  | ||||
| ??? info "Postgres STARTTLS" | ||||
|  | ||||
|     Traefik supports the Postgres STARTTLS protocol, | ||||
|     which allows TLS routing for Postgres connections. | ||||
|  | ||||
|     To do so, Traefik reads the first bytes sent by a Postgres client, | ||||
|     identifies if they correspond to the message of a STARTTLS negotiation, | ||||
|     and, if so, acknowledges and signals the client that it can start the TLS handshake. | ||||
|  | ||||
|     Please note/remember that there are subtleties inherent to STARTTLS in whether | ||||
|     the connection ends up being a TLS one or not. These subtleties depend on the | ||||
|     `sslmode` value in the client configuration (and on the server authentication | ||||
|     rules). Therefore, it is recommended to use the `require` value for the | ||||
|     `sslmode`. | ||||
|  | ||||
|     Afterwards, the TLS handshake, and routing based on TLS, can proceed as expected. | ||||
|  | ||||
|     !!! warning "Postgres STARTTLS with TCP TLS PassThrough routers" | ||||
|  | ||||
|         As mentioned above, the `sslmode` configuration parameter does have an impact on | ||||
|         whether a STARTTLS session will succeed. In particular in the context of TCP TLS | ||||
|         PassThrough, some of the values (such as `allow`) do not even make sense. Which | ||||
|         is why, once more it is recommended to use the `require` value. | ||||
|  | ||||
| #### `passthrough` | ||||
|  | ||||
| As seen above, a TLS router will terminate the TLS connection by default. | ||||
| @@ -1199,12 +1417,12 @@ So UDP "routers" at this time are pretty much only load-balancers in one form or | ||||
| 	As expected, a `timeout` is associated to each of these sessions, | ||||
| 	so that they get cleaned out if they go through a period of inactivity longer than a given duration.  | ||||
| 	Timeout can be configured using the `entryPoints.name.udp.timeout` option as described  | ||||
| 	under [entry points](../entrypoints/#udp-options). | ||||
| 	under [EntryPoints](../entrypoints/#udp-options). | ||||
|  | ||||
| ### EntryPoints | ||||
|  | ||||
| If not specified, UDP routers will accept packets from all defined (UDP) entry points. | ||||
| If one wants to limit the router scope to a set of entry points, one should set the entry points option. | ||||
| If not specified, UDP routers will accept packets from all defined (UDP) EntryPoints. | ||||
| If one wants to limit the router scope to a set of EntryPoints, one should set the `entryPoints` option. | ||||
|  | ||||
| ??? example "Listens to Every Entry Point" | ||||
|  | ||||
| @@ -1268,7 +1486,7 @@ If one wants to limit the router scope to a set of entry points, one should set | ||||
|     --entrypoints.streaming.address=":9191/udp" | ||||
|     ``` | ||||
|  | ||||
| ??? example "Listens to Specific Entry Points" | ||||
| ??? example "Listens to Specific EntryPoints" | ||||
|  | ||||
|     **Dynamic Configuration** | ||||
|  | ||||
|   | ||||
| @@ -316,7 +316,8 @@ On subsequent requests, to keep the session alive with the same server, the clie | ||||
| #### Health Check | ||||
|  | ||||
| Configure health check to remove unhealthy servers from the load balancing rotation. | ||||
| Traefik will consider your servers healthy as long as they return status codes between `2XX` and `3XX` to the health check requests (carried out every `interval`). | ||||
| Traefik will consider HTTP(s) servers healthy as long as they return a status code to the health check request (carried out every `interval`) between `2XX` and `3XX`, or matching the configured status. | ||||
| For gRPC servers, Traefik will consider them healthy as long as they return `SERVING` to [gRPC health check v1](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) requests. | ||||
|  | ||||
| To propagate status changes (e.g. all servers of this service are down) upwards, HealthCheck must also be enabled on the parent(s) of this service. | ||||
|  | ||||
| @@ -324,6 +325,7 @@ Below are the available options for the health check mechanism: | ||||
|  | ||||
| - `path` (required), defines the server URL path for the health check endpoint . | ||||
| - `scheme` (optional), replaces the server URL `scheme` for the health check endpoint. | ||||
| - `mode` (default: http), if defined to `grpc`, will use the gRPC health check protocol to probe the server. | ||||
| - `hostname` (optional), sets the value of `hostname` in the `Host` header of the health check request. | ||||
| - `port` (optional), replaces the server URL `port` for the health check endpoint. | ||||
| - `interval` (default: 30s), defines the frequency of the health check calls. | ||||
| @@ -331,6 +333,7 @@ Below are the available options for the health check mechanism: | ||||
| - `headers` (optional), defines custom headers to be sent to the health check endpoint. | ||||
| - `followRedirects` (default: true), defines whether redirects should be followed during the health check calls. | ||||
| - `method` (default: GET), defines the HTTP method that will be used while connecting to the endpoint. | ||||
| - `status` (optional), defines the expected HTTP status code of the response to the health check request. | ||||
|  | ||||
| !!! info "Interval & Timeout Format" | ||||
|  | ||||
| @@ -774,6 +777,82 @@ spec: | ||||
|     peerCertURI: foobar | ||||
| ``` | ||||
|  | ||||
| #### `spiffe` | ||||
|  | ||||
| Please note that [SPIFFE](../../https/spiffe.md) must be enabled in the static configuration | ||||
| before using it to secure the connection between Traefik and the backends. | ||||
|  | ||||
| ##### `spiffe.ids` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `ids` defines the allowed SPIFFE IDs.  | ||||
| This takes precedence over the SPIFFE TrustDomain. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| ## Dynamic configuration | ||||
| http: | ||||
|   serversTransports: | ||||
|     mytransport: | ||||
|       spiffe: | ||||
|         ids: | ||||
|           - spiffe://trust-domain/id1 | ||||
|           - spiffe://trust-domain/id2 | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| ## Dynamic configuration | ||||
| [http.serversTransports.mytransport.spiffe] | ||||
|   ids = ["spiffe://trust-domain/id1", "spiffe://trust-domain/id2"] | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: ServersTransport | ||||
| metadata: | ||||
|   name: mytransport | ||||
|   namespace: default | ||||
|  | ||||
| spec: | ||||
|     spiffe: | ||||
|       ids: | ||||
|         - spiffe://trust-domain/id1 | ||||
|         - spiffe://trust-domain/id2 | ||||
| ``` | ||||
|  | ||||
| ##### `spiffe.trustDomain` | ||||
|  | ||||
| _Optional_ | ||||
|  | ||||
| `trustDomain` defines the allowed SPIFFE trust domain. | ||||
|  | ||||
| ```yaml tab="File (YAML)" | ||||
| ## Dynamic configuration | ||||
| http: | ||||
|   serversTransports: | ||||
|     mytransport: | ||||
|         spiffe: | ||||
|           trustDomain: spiffe://trust-domain | ||||
| ``` | ||||
|  | ||||
| ```toml tab="File (TOML)" | ||||
| ## Dynamic configuration | ||||
| [http.serversTransports.mytransport.spiffe] | ||||
|   trustDomain = "spiffe://trust-domain" | ||||
| ``` | ||||
|  | ||||
| ```yaml tab="Kubernetes" | ||||
| apiVersion: traefik.containo.us/v1alpha1 | ||||
| kind: ServersTransport | ||||
| metadata: | ||||
|   name: mytransport | ||||
|   namespace: default | ||||
|  | ||||
| spec: | ||||
|     spiffe: | ||||
|       trustDomain: "spiffe://trust-domain" | ||||
| ``` | ||||
|  | ||||
| #### `forwardingTimeouts` | ||||
|  | ||||
| `forwardingTimeouts` are the timeouts applied when forwarding requests to the servers. | ||||
|   | ||||
| @@ -26,7 +26,7 @@ spec: | ||||
|       serviceAccountName: traefik-ingress-controller | ||||
|       containers: | ||||
|         - name: traefik | ||||
|           image: traefik:v2.9 | ||||
|           image: traefik:v3.0 | ||||
|           args: | ||||
|             - --api.insecure | ||||
|             - --accesslog | ||||
|   | ||||
| @@ -26,5 +26,5 @@ node: | ||||
|     - K3S_CLUSTER_SECRET=somethingtotallyrandom | ||||
|   volumes: | ||||
|     # 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:v2.9 image. | ||||
|     # 'docker save'), if you want to use it, instead of the traefik:v3.0 image. | ||||
|     - /somewhere/on/your/host/custom-image:/var/lib/rancher/k3s/agent/images | ||||
|   | ||||
| @@ -3,7 +3,7 @@ version: "3.3" | ||||
| services: | ||||
|  | ||||
|   traefik: | ||||
|     image: "traefik:v2.9" | ||||
|     image: "traefik:v3.0" | ||||
|     container_name: "traefik" | ||||
|     command: | ||||
|       #- "--log.level=DEBUG" | ||||
|   | ||||
| @@ -13,7 +13,7 @@ secrets: | ||||
| services: | ||||
|  | ||||
|   traefik: | ||||
|     image: "traefik:v2.9" | ||||
|     image: "traefik:v3.0" | ||||
|     container_name: "traefik" | ||||
|     command: | ||||
|       #- "--log.level=DEBUG" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ version: "3.3" | ||||
| services: | ||||
|  | ||||
|   traefik: | ||||
|     image: "traefik:v2.9" | ||||
|     image: "traefik:v3.0" | ||||
|     container_name: "traefik" | ||||
|     command: | ||||
|       #- "--log.level=DEBUG" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ version: "3.3" | ||||
| services: | ||||
|  | ||||
|   traefik: | ||||
|     image: "traefik:v2.9" | ||||
|     image: "traefik:v3.0" | ||||
|     container_name: "traefik" | ||||
|     command: | ||||
|       #- "--log.level=DEBUG" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ version: "3.3" | ||||
| services: | ||||
|  | ||||
|   traefik: | ||||
|     image: "traefik:v2.9" | ||||
|     image: "traefik:v3.0" | ||||
|     container_name: "traefik" | ||||
|     command: | ||||
|       #- "--log.level=DEBUG" | ||||
|   | ||||
| @@ -32,7 +32,7 @@ This will also be used as a starting point for the other docker-compose guides. | ||||
|     services: | ||||
|  | ||||
|       traefik: | ||||
|         image: "traefik:v2.9" | ||||
|         image: "traefik:v3.0" | ||||
|         ... | ||||
|         networks: | ||||
|           - traefiknet | ||||
|   | ||||
| @@ -109,6 +109,8 @@ nav: | ||||
|       - 'Overview': 'https/overview.md' | ||||
|       - 'TLS': 'https/tls.md' | ||||
|       - 'Let''s Encrypt': 'https/acme.md' | ||||
|       - 'Tailscale': 'https/tailscale.md' | ||||
|       - 'SPIFFE': 'https/spiffe.md' | ||||
|   - 'Middlewares': | ||||
|     - 'Overview': 'middlewares/overview.md' | ||||
|     - 'HTTP': | ||||
| @@ -123,8 +125,9 @@ nav: | ||||
|         - 'DigestAuth': 'middlewares/http/digestauth.md' | ||||
|         - 'Errors': 'middlewares/http/errorpages.md' | ||||
|         - 'ForwardAuth': 'middlewares/http/forwardauth.md' | ||||
|         - 'GrpcWeb': 'middlewares/http/grpcweb.md' | ||||
|         - 'Headers': 'middlewares/http/headers.md' | ||||
|         - 'IpWhitelist': 'middlewares/http/ipwhitelist.md' | ||||
|         - 'IpAllowList': 'middlewares/http/ipallowlist.md' | ||||
|         - 'InFlightReq': 'middlewares/http/inflightreq.md' | ||||
|         - 'PassTLSClientCert': 'middlewares/http/passtlsclientcert.md' | ||||
|         - 'RateLimit': 'middlewares/http/ratelimit.md' | ||||
| @@ -138,7 +141,7 @@ nav: | ||||
|     - 'TCP': | ||||
|         - 'Overview': 'middlewares/tcp/overview.md' | ||||
|         - 'InFlightConn': 'middlewares/tcp/inflightconn.md' | ||||
|         - 'IpWhitelist': 'middlewares/tcp/ipwhitelist.md' | ||||
|         - 'IpAllowList': 'middlewares/tcp/ipallowlist.md' | ||||
|   - 'Traefik Hub': 'traefik-hub/index.md' | ||||
|   - 'Plugins & Plugin Catalog': 'plugins/index.md' | ||||
|   - 'Operations': | ||||
| @@ -154,6 +157,7 @@ nav: | ||||
|           - 'Datadog': 'observability/metrics/datadog.md' | ||||
|           - 'InfluxDB': 'observability/metrics/influxdb.md' | ||||
|           - 'InfluxDB2': 'observability/metrics/influxdb2.md' | ||||
|           - 'OpenTelemetry': 'observability/metrics/opentelemetry.md' | ||||
|           - 'Prometheus': 'observability/metrics/prometheus.md' | ||||
|           - 'StatsD': 'observability/metrics/statsd.md' | ||||
|       - 'Tracing': | ||||
| @@ -164,6 +168,7 @@ nav: | ||||
|           - 'Instana': 'observability/tracing/instana.md' | ||||
|           - 'Haystack': 'observability/tracing/haystack.md' | ||||
|           - 'Elastic': 'observability/tracing/elastic.md' | ||||
|           - 'OpenTelemetry': 'observability/tracing/opentelemetry.md' | ||||
|   - 'User Guides': | ||||
|       - 'Kubernetes and Let''s Encrypt': 'user-guides/crd-acme/index.md' | ||||
|       - 'gRPC Examples': 'user-guides/grpc.md' | ||||
| @@ -175,6 +180,7 @@ nav: | ||||
|           - 'HTTP Challenge': 'user-guides/docker-compose/acme-http/index.md' | ||||
|           - 'DNS Challenge': 'user-guides/docker-compose/acme-dns/index.md' | ||||
|   - 'Migration': | ||||
|       - 'Traefik v2 to v3': 'migration/v2-to-v3.md' | ||||
|       - 'Traefik v2 minor migrations': 'migration/v2.md' | ||||
|       - 'Traefik v1 to v2': 'migration/v1-to-v2.md' | ||||
|   - 'Contributing': | ||||
|   | ||||
							
								
								
									
										113
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								go.mod
									
									
									
									
									
								
							| @@ -7,6 +7,7 @@ require ( | ||||
| 	github.com/ExpediaDotCom/haystack-client-go v0.0.0-20190315171017-e7edbdf53a61 | ||||
| 	github.com/Masterminds/sprig/v3 v3.2.2 | ||||
| 	github.com/abbot/go-http-auth v0.0.0-00010101000000-000000000000 | ||||
| 	github.com/andybalholm/brotli v1.0.4 | ||||
| 	github.com/aws/aws-sdk-go v1.44.47 | ||||
| 	github.com/cenkalti/backoff/v4 v4.1.3 | ||||
| 	github.com/compose-spec/compose-go v1.0.3 | ||||
| @@ -30,8 +31,10 @@ require ( | ||||
| 	github.com/hashicorp/consul/api v1.14.0 | ||||
| 	github.com/hashicorp/go-hclog v1.2.0 | ||||
| 	github.com/hashicorp/go-multierror v1.1.1 | ||||
| 	github.com/hashicorp/go-retryablehttp v0.7.1 | ||||
| 	github.com/hashicorp/go-version v1.6.0 | ||||
| 	github.com/hashicorp/nomad/api v0.0.0-20220506174431-b5665129cd1f | ||||
| 	github.com/improbable-eng/grpc-web v0.15.0 | ||||
| 	github.com/influxdata/influxdb-client-go/v2 v2.7.0 | ||||
| 	github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d | ||||
| 	github.com/instana/go-sensor v1.38.3 | ||||
| @@ -44,9 +47,10 @@ require ( | ||||
| 	github.com/lucas-clemente/quic-go v0.28.1 | ||||
| 	github.com/mailgun/ttlmap v0.0.0-20170619185759-c1c17f74874f | ||||
| 	github.com/miekg/dns v1.1.50 | ||||
| 	github.com/mitchellh/copystructure v1.0.0 | ||||
| 	github.com/mitchellh/copystructure v1.2.0 | ||||
| 	github.com/mitchellh/hashstructure v1.0.0 | ||||
| 	github.com/mitchellh/mapstructure v1.5.0 | ||||
| 	github.com/natefinch/lumberjack v0.0.0-20201021141957-47ffae23317c | ||||
| 	github.com/opentracing/opentracing-go v1.2.0 | ||||
| 	github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 | ||||
| 	github.com/openzipkin/zipkin-go v0.2.2 | ||||
| @@ -56,9 +60,12 @@ require ( | ||||
| 	github.com/prometheus/client_golang v1.12.2-0.20220704083116-e8f91604d835 | ||||
| 	github.com/prometheus/client_model v0.2.0 | ||||
| 	github.com/rancher/go-rancher-metadata v0.0.0-20200311180630-7f4c936a06ac | ||||
| 	github.com/rs/zerolog v1.28.0 | ||||
| 	github.com/sirupsen/logrus v1.9.0 | ||||
| 	github.com/spiffe/go-spiffe/v2 v2.1.1 | ||||
| 	github.com/stretchr/testify v1.8.1 | ||||
| 	github.com/stvp/go-udp-testing v0.0.0-20191102171040-06b61409b154 | ||||
| 	github.com/tailscale/tscert v0.0.0-20220316030059-54bbcb9f74e2 | ||||
| 	github.com/traefik/paerser v0.1.9 | ||||
| 	github.com/traefik/yaegi v0.14.3 | ||||
| 	github.com/uber/jaeger-client-go v2.30.0+incompatible | ||||
| @@ -70,32 +77,45 @@ require ( | ||||
| 	github.com/vulcand/predicate v1.2.0 | ||||
| 	go.elastic.co/apm v1.13.1 | ||||
| 	go.elastic.co/apm/module/apmot v1.13.1 | ||||
| 	golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 | ||||
| 	go.opentelemetry.io/collector/pdata v0.64.1 | ||||
| 	go.opentelemetry.io/otel v1.11.1 | ||||
| 	go.opentelemetry.io/otel/bridge/opentracing v1.11.1 | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.33.0 | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.33.0 | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 | ||||
| 	go.opentelemetry.io/otel/metric v0.33.0 | ||||
| 	go.opentelemetry.io/otel/sdk v1.11.1 | ||||
| 	go.opentelemetry.io/otel/sdk/metric v0.33.0 | ||||
| 	go.opentelemetry.io/otel/trace v1.11.1 | ||||
| 	golang.org/x/exp v0.0.0-20221114191408-850992195362 | ||||
| 	golang.org/x/mod v0.6.0 | ||||
| 	golang.org/x/net v0.1.0 | ||||
| 	golang.org/x/text v0.4.0 | ||||
| 	golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 | ||||
| 	golang.org/x/tools v0.1.12 | ||||
| 	google.golang.org/grpc v1.41.0 | ||||
| 	golang.org/x/time v0.0.0-20220609170525-579cf78fd858 | ||||
| 	golang.org/x/tools v0.2.0 | ||||
| 	google.golang.org/grpc v1.50.1 | ||||
| 	gopkg.in/DataDog/dd-trace-go.v1 v1.43.1 | ||||
| 	gopkg.in/fsnotify.v1 v1.4.7 | ||||
| 	gopkg.in/yaml.v3 v3.0.1 | ||||
| 	k8s.io/api v0.22.1 | ||||
| 	k8s.io/apiextensions-apiserver v0.21.3 | ||||
| 	k8s.io/apimachinery v0.22.1 | ||||
| 	k8s.io/client-go v0.22.1 | ||||
| 	k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e | ||||
| 	k8s.io/api v0.25.0 | ||||
| 	k8s.io/apiextensions-apiserver v0.25.0 | ||||
| 	k8s.io/apimachinery v0.25.0 | ||||
| 	k8s.io/client-go v0.25.0 | ||||
| 	k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed | ||||
| 	mvdan.cc/xurls/v2 v2.1.0 | ||||
| 	sigs.k8s.io/gateway-api v0.4.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	cloud.google.com/go v0.81.0 // indirect | ||||
| 	cloud.google.com/go v0.97.0 // indirect | ||||
| 	github.com/AlecAivazis/survey/v2 v2.2.3 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go v40.3.0+incompatible // indirect | ||||
| 	github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect | ||||
| 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect | ||||
| 	github.com/Azure/go-autorest/autorest v0.11.24 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest v0.11.27 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect | ||||
| @@ -110,9 +130,11 @@ require ( | ||||
| 	github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect | ||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||
| 	github.com/Masterminds/semver/v3 v3.1.1 // indirect | ||||
| 	github.com/Microsoft/go-winio v0.5.1 // indirect | ||||
| 	github.com/Microsoft/go-winio v0.5.2 // indirect | ||||
| 	github.com/Microsoft/hcsshim v0.8.23 // indirect | ||||
| 	github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect | ||||
| 	github.com/PuerkitoBio/purell v1.1.1 // indirect | ||||
| 	github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | ||||
| 	github.com/Shopify/sarama v1.23.1 // indirect | ||||
| 	github.com/VividCortex/gohistogram v1.0.0 // indirect | ||||
| 	github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect | ||||
| @@ -137,9 +159,10 @@ require ( | ||||
| 	github.com/containerd/continuity v0.1.0 // indirect | ||||
| 	github.com/containerd/typeurl v1.0.2 // indirect | ||||
| 	github.com/coreos/go-semver v0.3.0 // indirect | ||||
| 	github.com/coreos/go-systemd/v22 v22.3.2 // indirect | ||||
| 	github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 // indirect | ||||
| 	github.com/cpu/goacmedns v0.1.1 // indirect | ||||
| 	github.com/deepmap/oapi-codegen v1.9.1 // indirect | ||||
| 	github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect | ||||
| 	github.com/dgraph-io/ristretto v0.1.0 // indirect | ||||
| 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect | ||||
| 	github.com/dimchansky/utfbom v1.1.1 // indirect | ||||
| @@ -156,7 +179,8 @@ require ( | ||||
| 	github.com/elastic/go-licenser v0.3.1 // indirect | ||||
| 	github.com/elastic/go-sysinfo v1.1.1 // indirect | ||||
| 	github.com/elastic/go-windows v1.0.0 // indirect | ||||
| 	github.com/evanphx/json-patch v4.11.0+incompatible // indirect | ||||
| 	github.com/emicklei/go-restful/v3 v3.8.0 // indirect | ||||
| 	github.com/evanphx/json-patch v4.12.0+incompatible // indirect | ||||
| 	github.com/exoscale/egoscale v0.90.0 // indirect | ||||
| 	github.com/fatih/color v1.13.0 // indirect | ||||
| 	github.com/fsnotify/fsnotify v1.5.4 // indirect | ||||
| @@ -164,7 +188,11 @@ require ( | ||||
| 	github.com/ghodss/yaml v1.0.0 // indirect | ||||
| 	github.com/go-errors/errors v1.0.1 // indirect | ||||
| 	github.com/go-logfmt/logfmt v0.5.1 // indirect | ||||
| 	github.com/go-logr/logr v0.4.0 // indirect | ||||
| 	github.com/go-logr/logr v1.2.3 // indirect | ||||
| 	github.com/go-logr/stdr v1.2.2 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.19.5 // indirect | ||||
| 	github.com/go-openapi/jsonreference v0.19.5 // indirect | ||||
| 	github.com/go-openapi/swag v0.19.14 // indirect | ||||
| 	github.com/go-redis/redis/v8 v8.11.5 // indirect | ||||
| 	github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48 // indirect | ||||
| 	github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect | ||||
| @@ -173,21 +201,22 @@ require ( | ||||
| 	github.com/gogo/googleapis v1.4.0 // indirect | ||||
| 	github.com/gogo/protobuf v1.3.2 // indirect | ||||
| 	github.com/golang-jwt/jwt/v4 v4.2.0 // indirect | ||||
| 	github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect | ||||
| 	github.com/golang/glog v1.0.0 // indirect | ||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||
| 	github.com/golang/mock v1.6.0 // indirect | ||||
| 	github.com/google/btree v1.0.1 // indirect | ||||
| 	github.com/google/go-cmp v0.5.8 // indirect | ||||
| 	github.com/google/gnostic v0.5.7-v3refs // indirect | ||||
| 	github.com/google/go-cmp v0.5.9 // indirect | ||||
| 	github.com/google/go-querystring v1.1.0 // indirect | ||||
| 	github.com/google/gofuzz v1.2.0 // indirect | ||||
| 	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect | ||||
| 	github.com/google/uuid v1.3.0 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.0.5 // indirect | ||||
| 	github.com/googleapis/gnostic v0.5.5 // indirect | ||||
| 	github.com/googleapis/gax-go/v2 v2.1.0 // indirect | ||||
| 	github.com/gophercloud/gophercloud v1.0.0 // indirect | ||||
| 	github.com/gophercloud/utils v0.0.0-20210216074907-f6de111f2eae // indirect | ||||
| 	github.com/gravitational/trace v1.1.16-0.20220114165159-14a9a7dd6aaf // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-middleware v1.2.0 // indirect | ||||
| 	github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect | ||||
| 	github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect | ||||
| 	github.com/hashicorp/consul/sdk v0.10.0 // indirect | ||||
| 	github.com/hashicorp/cronexpr v1.1.1 // indirect | ||||
| @@ -195,7 +224,6 @@ require ( | ||||
| 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||||
| 	github.com/hashicorp/go-immutable-radix v1.3.1 // indirect | ||||
| 	github.com/hashicorp/go-msgpack v0.5.5 // indirect | ||||
| 	github.com/hashicorp/go-retryablehttp v0.7.1 // indirect | ||||
| 	github.com/hashicorp/go-rootcerts v1.0.2 // indirect | ||||
| 	github.com/hashicorp/go-sockaddr v1.0.2 // indirect | ||||
| 	github.com/hashicorp/go-uuid v1.0.2 // indirect | ||||
| @@ -229,6 +257,7 @@ require ( | ||||
| 	github.com/liquidweb/liquidweb-cli v0.6.9 // indirect | ||||
| 	github.com/liquidweb/liquidweb-go v1.6.3 // indirect | ||||
| 	github.com/looplab/fsm v0.1.0 // indirect | ||||
| 	github.com/magiconair/properties v1.8.6 // indirect | ||||
| 	github.com/mailgun/minheap v0.0.0-20170619185613-3dbe6c6bf55f // indirect | ||||
| 	github.com/mailgun/multibuf v0.1.2 // indirect | ||||
| 	github.com/mailgun/timetools v0.0.0-20141028012446-7e6055773c51 // indirect | ||||
| @@ -246,8 +275,9 @@ require ( | ||||
| 	github.com/miekg/pkcs11 v1.0.3 // indirect | ||||
| 	github.com/mimuret/golang-iij-dpf v0.7.1 // indirect | ||||
| 	github.com/mitchellh/go-homedir v1.1.0 // indirect | ||||
| 	github.com/mitchellh/go-ps v1.0.0 // indirect | ||||
| 	github.com/mitchellh/go-testing-interface v1.14.1 // indirect | ||||
| 	github.com/mitchellh/reflectwalk v1.0.1 // indirect | ||||
| 	github.com/mitchellh/reflectwalk v1.0.2 // indirect | ||||
| 	github.com/moby/buildkit v0.8.2-0.20210401015549-df49b648c8bf // indirect | ||||
| 	github.com/moby/locker v1.0.1 // indirect | ||||
| 	github.com/moby/sys/mount v0.2.0 // indirect | ||||
| @@ -256,6 +286,7 @@ require ( | ||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||
| 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||
| 	github.com/morikuni/aec v1.0.0 // indirect | ||||
| 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect | ||||
| 	github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 // indirect | ||||
| 	github.com/nrdcg/auroradns v1.1.0 // indirect | ||||
| 	github.com/nrdcg/desec v0.6.0 // indirect | ||||
| @@ -277,6 +308,7 @@ require ( | ||||
| 	github.com/pquerna/otp v1.3.0 // indirect | ||||
| 	github.com/prometheus/common v0.35.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.7.3 // indirect | ||||
| 	github.com/rs/cors v1.7.0 // indirect | ||||
| 	github.com/sacloud/api-client-go v0.2.1 // indirect | ||||
| 	github.com/sacloud/go-http v0.1.2 // indirect | ||||
| 	github.com/sacloud/iaas-api-go v1.3.2 // indirect | ||||
| @@ -285,13 +317,12 @@ require ( | ||||
| 	github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect | ||||
| 	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9 // indirect | ||||
| 	github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect | ||||
| 	github.com/segmentio/fasthash v1.0.3 // indirect | ||||
| 	github.com/shopspring/decimal v1.2.0 // indirect | ||||
| 	github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect | ||||
| 	github.com/softlayer/softlayer-go v1.0.6 // indirect | ||||
| 	github.com/softlayer/xmlrpc v0.0.0-20200409220501-5f089df7cb7e // indirect | ||||
| 	github.com/spf13/cast v1.3.1 // indirect | ||||
| 	github.com/spf13/cobra v1.2.1 // indirect | ||||
| 	github.com/spf13/cobra v1.4.0 // indirect | ||||
| 	github.com/spf13/pflag v1.0.5 // indirect | ||||
| 	github.com/stretchr/objx v0.5.0 // indirect | ||||
| 	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490 // indirect | ||||
| @@ -309,29 +340,33 @@ require ( | ||||
| 	github.com/xeipuuv/gojsonschema v1.2.0 // indirect | ||||
| 	github.com/yandex-cloud/go-genproto v0.0.0-20220805142335-27b56ddae16f // indirect | ||||
| 	github.com/yandex-cloud/go-sdk v0.0.0-20220805164847-cf028e604997 // indirect | ||||
| 	github.com/zeebo/errs v1.2.2 // indirect | ||||
| 	go.elastic.co/apm/module/apmhttp v1.13.1 // indirect | ||||
| 	go.elastic.co/fastjson v1.1.0 // indirect | ||||
| 	go.etcd.io/etcd/api/v3 v3.5.4 // indirect | ||||
| 	go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect | ||||
| 	go.etcd.io/etcd/client/v3 v3.5.4 // indirect | ||||
| 	go.opencensus.io v0.23.0 // indirect | ||||
| 	go.uber.org/atomic v1.7.0 // indirect | ||||
| 	go.uber.org/multierr v1.6.0 // indirect | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 // indirect | ||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.33.0 // indirect | ||||
| 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect | ||||
| 	go.uber.org/atomic v1.9.0 // indirect | ||||
| 	go.uber.org/multierr v1.8.0 // indirect | ||||
| 	go.uber.org/ratelimit v0.2.0 // indirect | ||||
| 	go.uber.org/zap v1.18.1 // indirect | ||||
| 	go.uber.org/zap v1.21.0 // indirect | ||||
| 	go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect | ||||
| 	go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f // indirect | ||||
| 	golang.org/x/crypto v0.1.0 // indirect | ||||
| 	golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect | ||||
| 	golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 // indirect | ||||
| 	golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect | ||||
| 	golang.org/x/sys v0.1.0 // indirect | ||||
| 	golang.org/x/term v0.1.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect | ||||
| 	google.golang.org/api v0.44.0 // indirect | ||||
| 	google.golang.org/api v0.57.0 // indirect | ||||
| 	google.golang.org/appengine v1.6.7 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20211021150943-2b146023228c // indirect | ||||
| 	google.golang.org/protobuf v1.28.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect | ||||
| 	google.golang.org/protobuf v1.28.1 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
| 	gopkg.in/ini.v1 v1.66.6 // indirect | ||||
| 	gopkg.in/ns1/ns1-go.v2 v2.6.5 // indirect | ||||
| @@ -340,10 +375,12 @@ require ( | ||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||
| 	howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect | ||||
| 	inet.af/netaddr v0.0.0-20220617031823-097006376321 // indirect | ||||
| 	k8s.io/klog/v2 v2.10.0 // indirect | ||||
| 	k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e // indirect | ||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect | ||||
| 	sigs.k8s.io/yaml v1.2.0 // indirect | ||||
| 	k8s.io/klog/v2 v2.70.1 // indirect | ||||
| 	k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect | ||||
| 	nhooyr.io/websocket v1.8.7 // indirect | ||||
| 	sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect | ||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect | ||||
| 	sigs.k8s.io/yaml v1.3.0 // indirect | ||||
| ) | ||||
|  | ||||
| // Containous forks | ||||
| @@ -360,3 +397,5 @@ replace github.com/jaguilar/vt100 => github.com/tonistiigi/vt100 v0.0.0-20190402 | ||||
| // ambiguous import: found package github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http in multiple modules | ||||
| // tencentcloud uses monorepo with multimodule but the go.mod files are incomplete. | ||||
| exclude github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible | ||||
|  | ||||
| // replace github.com/go-logr/logr => github.com/go-logr/logr v0.4.0 | ||||
|   | ||||
							
								
								
									
										285
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										285
									
								
								go.sum
									
									
									
									
									
								
							| @@ -24,8 +24,15 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP | ||||
| cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= | ||||
| cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= | ||||
| cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= | ||||
| cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= | ||||
| cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= | ||||
| cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= | ||||
| cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= | ||||
| cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= | ||||
| cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= | ||||
| cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= | ||||
| cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= | ||||
| cloud.google.com/go v0.97.0 h1:3DXvAyifywvq64LfkKaMOmkWPS1CikIQdMe2lY9vxU8= | ||||
| cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= | ||||
| cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | ||||
| cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= | ||||
| cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | ||||
| @@ -70,8 +77,9 @@ github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUd | ||||
| github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= | ||||
| github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= | ||||
| github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= | ||||
| github.com/Azure/go-autorest/autorest v0.11.24 h1:1fIGgHKqVm54KIPT+q8Zmd1QlVsmHqeUGso5qm2BqqE= | ||||
| github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= | ||||
| github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= | ||||
| github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= | ||||
| @@ -79,8 +87,9 @@ github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMl | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= | ||||
| github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= | ||||
| github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= | ||||
| github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= | ||||
| github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= | ||||
| @@ -95,8 +104,9 @@ github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxB | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= | ||||
| github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= | ||||
| github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= | ||||
| github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= | ||||
| github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= | ||||
| @@ -150,8 +160,9 @@ github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JP | ||||
| github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= | ||||
| github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= | ||||
| github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= | ||||
| github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= | ||||
| github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= | ||||
| github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= | ||||
| github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= | ||||
| github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= | ||||
| github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= | ||||
| github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= | ||||
| @@ -174,8 +185,10 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE | ||||
| github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 h1:xPMsUicZ3iosVPSIP7bW5EcGUzjiiMl1OYTe14y/R24= | ||||
| github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= | ||||
| github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | ||||
| github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= | ||||
| github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= | ||||
| github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | ||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= | ||||
| github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= | ||||
| github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= | ||||
| github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= | ||||
| @@ -206,6 +219,8 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755 h1:J45/QHgrzUdqe/Vco/Vxk0wRvdS | ||||
| github.com/aliyun/alibaba-cloud-sdk-go v1.61.1755/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= | ||||
| github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= | ||||
| github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= | ||||
| github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= | ||||
| github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= | ||||
| github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= | ||||
| github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= | ||||
| github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= | ||||
| @@ -322,8 +337,12 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX | ||||
| github.com/cncf/udpa/go v0.0.0-20200313221541-5f7e5dd04533/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||
| github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||
| github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||
| github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= | ||||
| github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
| github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
| github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
| github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
| github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||
| github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= | ||||
| github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | ||||
| github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= | ||||
| @@ -463,8 +482,9 @@ github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pq | ||||
| github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||
| github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= | ||||
| github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= | ||||
| github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= | ||||
| github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | ||||
| github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 h1:rtAn27wIbmOGUs7RIbVgPEjb31ehTVniDwPGXyMxm5U= | ||||
| github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | ||||
| github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | ||||
| github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | ||||
| github.com/cpu/goacmedns v0.1.1 h1:DM3H2NiN2oam7QljgGY5ygy4yDXhK5Z4JUnqaugs2C4= | ||||
| @@ -472,6 +492,7 @@ github.com/cpu/goacmedns v0.1.1/go.mod h1:MuaouqEhPAHxsbqjgnck5zeghuwBP1dLnPoobe | ||||
| github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||
| github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||
| github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= | ||||
| @@ -497,6 +518,8 @@ github.com/denisenkom/go-mssqldb v0.0.0-20190315220205-a8ed825ac853/go.mod h1:xN | ||||
| github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= | ||||
| github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= | ||||
| github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= | ||||
| github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= | ||||
| github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= | ||||
| github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= | ||||
| github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= | ||||
| github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | ||||
| @@ -598,6 +621,8 @@ github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484/go.mod h1:Ro8st/El | ||||
| github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= | ||||
| github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | ||||
| github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= | ||||
| github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= | ||||
| github.com/emicklei/go-restful/v3 v3.8.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.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= | ||||
| @@ -608,13 +633,15 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m | ||||
| github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | ||||
| github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= | ||||
| github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= | ||||
| github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= | ||||
| github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | ||||
| github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= | ||||
| github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= | ||||
| github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||
| github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||
| github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs= | ||||
| github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||
| github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= | ||||
| github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= | ||||
| github.com/exoscale/egoscale v0.90.0 h1:DZBXVU3iHqu5Ju5lQ5jWVlPo0IpI98SUo8Aa1UQVrmo= | ||||
| github.com/exoscale/egoscale v0.90.0/go.mod h1:wyXE5zrnFynMXA0jMhwQqSe24CfUhmBk2WI5wFZcq6Y= | ||||
| github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||
| @@ -651,8 +678,11 @@ github.com/getsentry/raven-go v0.0.0-20180121060056-563b81fc02b7/go.mod h1:KungG | ||||
| github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||
| github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= | ||||
| github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||
| github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= | ||||
| github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | ||||
| github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= | ||||
| github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= | ||||
| github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= | ||||
| github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= | ||||
| github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= | ||||
| github.com/go-acme/lego/v4 v4.9.1 h1:n9Z5MQwANeGSQKlVE3bEh9SDvAySK9oVYOKCGCESqQE= | ||||
| @@ -668,6 +698,7 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 | ||||
| github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= | ||||
| github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= | ||||
| github.com/go-kit/kit v0.10.1-0.20200915143503-439c4d2ed3ea h1:CnEQOUv4ilElSwFB9g/lVmz206oLE4aNZDYngIY1Gvg= | ||||
| github.com/go-kit/kit v0.10.1-0.20200915143503-439c4d2ed3ea/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= | ||||
| github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= | ||||
| @@ -680,17 +711,24 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV | ||||
| github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= | ||||
| github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= | ||||
| github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= | ||||
| github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= | ||||
| github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= | ||||
| github.com/go-logr/logr v1.2.0/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.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= | ||||
| github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||
| 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/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= | ||||
| github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= | ||||
| github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= | ||||
| github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= | ||||
| github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= | ||||
| github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= | ||||
| github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= | ||||
| github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= | ||||
| github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= | ||||
| github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= | ||||
| github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= | ||||
| github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= | ||||
| github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= | ||||
| github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= | ||||
| @@ -698,14 +736,19 @@ github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHK | ||||
| github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= | ||||
| github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= | ||||
| github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= | ||||
| github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= | ||||
| github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= | ||||
| 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.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= | ||||
| github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= | ||||
| github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= | ||||
| github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= | ||||
| github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= | ||||
| github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= | ||||
| github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= | ||||
| github.com/go-playground/validator/v10 v10.9.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= | ||||
| github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= | ||||
| github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= | ||||
| github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= | ||||
| github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48 h1:JVrqSeQfdhYRFk24TvhTZWU0q8lfCojxZQFi3Ou7+uY= | ||||
| @@ -726,6 +769,12 @@ github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg | ||||
| github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= | ||||
| github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b h1:/vQ+oYKu+JoyaMPDsv5FzwuL2wwWBgBbtj/YLCi4LuA= | ||||
| github.com/gobuffalo/flect v0.2.3/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc= | ||||
| github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= | ||||
| github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= | ||||
| github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= | ||||
| github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= | ||||
| github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= | ||||
| github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= | ||||
| github.com/goccy/go-json v0.7.8/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= | ||||
| github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= | ||||
| github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= | ||||
| @@ -759,8 +808,9 @@ github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw | ||||
| github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= | ||||
| github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= | ||||
| github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= | ||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= | ||||
| github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | ||||
| github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= | ||||
| github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= | ||||
| github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||||
| @@ -801,6 +851,7 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw | ||||
| github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||
| github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||
| github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | ||||
| github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= | ||||
| github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= | ||||
| @@ -811,6 +862,8 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= | ||||
| github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= | ||||
| github.com/google/certificate-transparency-go v1.0.21 h1:Yf1aXowfZ2nuboBsg7iYGLmwsOARdV86pfH3g95wXmE= | ||||
| github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= | ||||
| github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= | ||||
| github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= | ||||
| github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | ||||
| github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | ||||
| @@ -824,8 +877,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | ||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||
| github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= | ||||
| github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= | ||||
| github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||
| github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||||
| github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||
| github.com/google/go-containerregistry v0.0.0-20191015185424-71da34e4d9b3/go.mod h1:ZXFeSndFcK4vB1NR4voH1Zm38K7ViUNiYtfIBDxrwf0= | ||||
| github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= | ||||
| github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= | ||||
| @@ -844,6 +897,7 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ | ||||
| github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | ||||
| github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | ||||
| github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | ||||
| github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= | ||||
| github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
| github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | ||||
| github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| @@ -857,6 +911,8 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe | ||||
| github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | ||||
| github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= | ||||
| github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= | ||||
| @@ -870,15 +926,15 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ | ||||
| github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= | ||||
| github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= | ||||
| github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | ||||
| github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= | ||||
| github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | ||||
| github.com/googleapis/gax-go/v2 v2.1.0 h1:6DWmvNpomjL1+3liNSZbVns3zsYzzCjm6pRBO1tLeso= | ||||
| github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= | ||||
| github.com/googleapis/gnostic v0.0.0-20170426233943-68f4ded48ba9/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||
| github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||
| github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||
| github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= | ||||
| github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= | ||||
| github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= | ||||
| github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= | ||||
| github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= | ||||
| github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= | ||||
| github.com/gophercloud/gophercloud v0.15.1-0.20210202035223-633d73521055/go.mod h1:wRtmUelyIIv3CSSDI47aUwbs075O6i+LY+pXsKCBsb4= | ||||
| @@ -892,6 +948,7 @@ github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu | ||||
| github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= | ||||
| github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||
| github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||||
| 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.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= | ||||
| github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||
| @@ -902,13 +959,17 @@ github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:Fecb | ||||
| github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.2.0 h1:0IKlLyQ3Hs9nDaiK5cSHAGmcQEIC8l2Ts1u6x5Dfrqg= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= | ||||
| github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= | ||||
| github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||||
| github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= | ||||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= | ||||
| github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= | ||||
| github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= | ||||
| github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= | ||||
| @@ -1051,6 +1112,8 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH | ||||
| github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= | ||||
| github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= | ||||
| github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= | ||||
| github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= | ||||
| github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= | ||||
| github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= | ||||
| github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= | ||||
| github.com/influxdata/influxdb-client-go/v2 v2.7.0 h1:QgP5mlBE9sGnzplpnf96pr+p7uqlIlL4W2GAP3n+XZg= | ||||
| @@ -1137,7 +1200,9 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI | ||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||
| github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= | ||||
| github.com/kisom/goutils v1.1.0/go.mod h1:+UBTfd78habUYWFbNWTJNG+jNG/i/lGURakr4A/yNRw= | ||||
| github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
| github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
| github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
| github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||
| github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= | ||||
| github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | ||||
| @@ -1183,6 +1248,7 @@ github.com/labstack/echo/v4 v4.6.3/go.mod h1:Hk5OiHj0kDqmFq7aHe7eDqI7CUhuCrfpupQ | ||||
| github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= | ||||
| github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= | ||||
| github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= | ||||
| github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= | ||||
| github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= | ||||
| github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= | ||||
| github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= | ||||
| @@ -1217,8 +1283,9 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q | ||||
| github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
| github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||||
| github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= | ||||
| github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= | ||||
| github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= | ||||
| github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= | ||||
| github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= | ||||
| github.com/mailgun/multibuf v0.1.2 h1:QE9kE27lK6LFZB4aYNVtUPlWVHVCT0zpgUr2uoq/+jk= | ||||
| github.com/mailgun/multibuf v0.1.2/go.mod h1:E+sUhIy69qgT6EM57kCPdUTlHnjTuxQBO/yf6af9Hes= | ||||
| github.com/mailgun/timetools v0.0.0-20141028012446-7e6055773c51 h1:Kg/NPZLLC3aAFr1YToMs98dbCdhootQ1hZIvZU28hAQ= | ||||
| @@ -1294,11 +1361,14 @@ github.com/mimuret/golang-iij-dpf v0.7.1/go.mod h1:IXWYcQVIHYzuM+W7kDWX0mseHDfUo | ||||
| github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= | ||||
| github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= | ||||
| github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= | ||||
| github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= | ||||
| github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= | ||||
| github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= | ||||
| github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= | ||||
| github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | ||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | ||||
| github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= | ||||
| github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= | ||||
| github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= | ||||
| github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= | ||||
| github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= | ||||
| @@ -1324,8 +1394,9 @@ github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQ | ||||
| github.com/mitchellh/pointerstructure v1.0.0 h1:ATSdz4NWrmWPOF1CeCBU4sMCno2hgqdbSrRPFWQSVZI= | ||||
| github.com/mitchellh/pointerstructure v1.0.0/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8= | ||||
| github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
| github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= | ||||
| github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
| github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= | ||||
| github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= | ||||
| github.com/moby/buildkit v0.8.2-0.20210401015549-df49b648c8bf h1:dHwWBX8OhYb69qVcT27rFSwzKsn4CRbg0HInQyVh33c= | ||||
| github.com/moby/buildkit v0.8.2-0.20210401015549-df49b648c8bf/go.mod h1:GJcrUlTGFAPlEmPQtbrTsJYn+cy+Jwl7vTZS7jYAoow= | ||||
| github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= | ||||
| @@ -1359,12 +1430,17 @@ github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1 | ||||
| github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= | ||||
| github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= | ||||
| github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= | ||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||
| github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
| github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= | ||||
| github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
| github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= | ||||
| github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= | ||||
| github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 h1:o6uBwrhM5C8Ll3MAAxrQxRHEu7FkapwTuI2WmL1rw4g= | ||||
| github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8= | ||||
| github.com/natefinch/lumberjack v0.0.0-20201021141957-47ffae23317c h1:194MYKszq5DlJ73wpFuOTEsC/ryOOxt2F901D/07tec= | ||||
| github.com/natefinch/lumberjack v0.0.0-20201021141957-47ffae23317c/go.mod h1:tanojtwrLPxkEzT+bGGz9kb6bm8+yVwgAE44c3v1Au4= | ||||
| github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= | ||||
| github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= | ||||
| github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= | ||||
| @@ -1418,6 +1494,7 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= | ||||
| github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= | ||||
| github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= | ||||
| github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= | ||||
| github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= | ||||
| github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | ||||
| github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= | ||||
| github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= | ||||
| @@ -1565,6 +1642,7 @@ github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+ | ||||
| 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.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= | ||||
| github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= | ||||
| github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= | ||||
| github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= | ||||
| github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= | ||||
| @@ -1583,6 +1661,7 @@ github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa | ||||
| github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= | ||||
| github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | ||||
| github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= | ||||
| github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | ||||
| @@ -1602,8 +1681,13 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR | ||||
| github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | ||||
| github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= | ||||
| github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= | ||||
| github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= | ||||
| github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= | ||||
| github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= | ||||
| github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||
| github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= | ||||
| github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= | ||||
| github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= | ||||
| github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= | ||||
| github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| @@ -1633,7 +1717,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUt | ||||
| github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= | ||||
| github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= | ||||
| github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= | ||||
| github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= | ||||
| github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= | ||||
| github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= | ||||
| github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= | ||||
| @@ -1707,8 +1790,9 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL | ||||
| github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= | ||||
| github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= | ||||
| github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= | ||||
| github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= | ||||
| github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= | ||||
| github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= | ||||
| github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= | ||||
| github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||||
| github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= | ||||
| github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | ||||
| @@ -1725,6 +1809,8 @@ 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.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= | ||||
| github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= | ||||
| 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/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= | ||||
| github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= | ||||
| github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= | ||||
| @@ -1757,6 +1843,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 | ||||
| github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= | ||||
| github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= | ||||
| github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= | ||||
| github.com/tailscale/tscert v0.0.0-20220316030059-54bbcb9f74e2 h1:xwMw7LFhV9dbvot9A7NLClP9udqbjrQlIwWMH8e7uiQ= | ||||
| github.com/tailscale/tscert v0.0.0-20220316030059-54bbcb9f74e2/go.mod h1:hL4gB6APAasMR2NNi/JHzqKkxW3EPQlFgLEq9PMi2t0= | ||||
| github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= | ||||
| github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= | ||||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490 h1:mmz27tVi2r70JYnm5y0Zk8w0Qzsx+vfUw3oqSyrEfP8= | ||||
| @@ -1791,9 +1879,11 @@ github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/ | ||||
| github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | ||||
| github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= | ||||
| github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | ||||
| github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E= | ||||
| github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= | ||||
| github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= | ||||
| github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | ||||
| github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= | ||||
| github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= | ||||
| github.com/unrolled/render v1.0.2 h1:dGS3EmChQP3yOi1YeFNO/Dx+MbWZhdvhQJTXochM5bs= | ||||
| github.com/unrolled/render v1.0.2/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM= | ||||
| @@ -1863,6 +1953,8 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go | ||||
| github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= | ||||
| github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ= | ||||
| github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= | ||||
| github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= | ||||
| github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= | ||||
| github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= | ||||
| github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE= | ||||
| github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is= | ||||
| @@ -1904,26 +1996,60 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||
| go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= | ||||
| go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= | ||||
| go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= | ||||
| go.opentelemetry.io/collector/pdata v0.64.1 h1:8E06uHr0nnenGftFwhwdenA88QhVnF4dJam+qVXgdVg= | ||||
| go.opentelemetry.io/collector/pdata v0.64.1/go.mod h1:IzvXUGQml2mrnvdb8zIlEW3qQs9oFLdD2hLwJdZ+pek= | ||||
| go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= | ||||
| go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= | ||||
| go.opentelemetry.io/otel/bridge/opentracing v1.11.1 h1:/ZBsgjXWUpiZ5M9zm+Ft3kuDUGErIGcEJbKRIsFN6jA= | ||||
| go.opentelemetry.io/otel/bridge/opentracing v1.11.1/go.mod h1:vw9hN4H+G0ek+XQtxP+Mm1McLcmdx2FXHNrWn2bBqxU= | ||||
| go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 h1:X2GndnMCsUPh6CiY2a+frAbNsXaPLbB0soHRYhAZ5Ig= | ||||
| go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1/go.mod h1:i8vjiSzbiUC7wOQplijSXMYUpNM93DtlS5CbUT+C6oQ= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.33.0 h1:OT/UjHcjog4A1s1UMCtyehIKS+vpjM5Du0r7KGsH6TE= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.33.0/go.mod h1:0XctNDHEWmiSDIU8NPbJElrK05gBJFcYlGP4FMGo4g4= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.33.0 h1:1SVtGtRsNyGgv1fRfNXfh+sJowIwzF0gkf+61lvTgdg= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.33.0/go.mod h1:ryB27ubOBXsiqfh6MwtSdx5knzbSZtjvPnMMmt3AykQ= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.33.0 h1:NoG4v01cdLZfOeNGBQmSe4f4SeP+fx8I/0qzRgTKsGI= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.33.0/go.mod h1:6anbDXBcTp3Qit87pfFmT0paxTJ8sWRccTNYVywN/H8= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1 h1:MEQNafcNCB0uQIti/oHgU7CZpUMYQ7qigBwMVKycHvc= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.1/go.mod h1:19O5I2U5iys38SsmT2uDJja/300woyzE1KPIQxEUBUc= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1 h1:LYyG/f1W/jzAix16jbksJfMQFpOH/Ma6T639pVPMgfI= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.1/go.mod h1:QrRRQiY3kzAoYPNLP0W/Ikg0gR6V3LMc+ODSxr7yyvg= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1 h1:tFl63cpAAcD9TOU6U8kZU7KyXuSRYAZlbx1C61aaB74= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.1/go.mod h1:X620Jww3RajCJXw/unA+8IRTgxkdS7pi+ZwK9b7KUJk= | ||||
| go.opentelemetry.io/otel/metric v0.33.0 h1:xQAyl7uGEYvrLAiV/09iTJlp1pZnQ9Wl793qbVvED1E= | ||||
| go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= | ||||
| go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= | ||||
| go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= | ||||
| go.opentelemetry.io/otel/sdk/metric v0.33.0 h1:oTqyWfksgKoJmbrs2q7O7ahkJzt+Ipekihf8vhpa9qo= | ||||
| go.opentelemetry.io/otel/sdk/metric v0.33.0/go.mod h1:xdypMeA21JBOvjjzDUtD0kzIcHO/SPez+a8HOzJPGp0= | ||||
| go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= | ||||
| go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= | ||||
| go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= | ||||
| go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= | ||||
| go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= | ||||
| 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.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | ||||
| go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= | ||||
| go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= | ||||
| go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= | ||||
| go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= | ||||
| go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= | ||||
| go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= | ||||
| go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= | ||||
| go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= | ||||
| 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.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= | ||||
| go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= | ||||
| go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= | ||||
| go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= | ||||
| go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= | ||||
| go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= | ||||
| 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.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= | ||||
| go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= | ||||
| go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4= | ||||
| go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= | ||||
| go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= | ||||
| go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= | ||||
| go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= | ||||
| go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE= | ||||
| go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA= | ||||
| @@ -1976,8 +2102,8 @@ golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5y | ||||
| golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||
| golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= | ||||
| golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= | ||||
| golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= | ||||
| golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| @@ -1991,7 +2117,9 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 | ||||
| golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= | ||||
| golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= | ||||
| golang.org/x/exp v0.0.0-20200908183739-ae8ad444f925 h1:5XVKs2rlCg8EFyRcvO8/XFwYxh1oKJO1Q3X5vttIf9c= | ||||
| golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= | ||||
| golang.org/x/exp v0.0.0-20221114191408-850992195362 h1:NoHlPRbyl1VFI6FjwHtPQCN7wAMXI6cKcqrmXhOOfBQ= | ||||
| golang.org/x/exp v0.0.0-20221114191408-850992195362/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= | ||||
| 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-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | ||||
| @@ -2021,8 +2149,8 @@ golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hM | ||||
| golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= | ||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||||
| golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= | ||||
| golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= | ||||
| golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| @@ -2062,6 +2190,7 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||
| @@ -2084,9 +2213,11 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd | ||||
| golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||
| golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= | ||||
| golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= | ||||
| golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| @@ -2111,6 +2242,10 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ | ||||
| golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||
| golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= | ||||
| golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA= | ||||
| golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= | ||||
| @@ -2196,6 +2331,7 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| @@ -2240,11 +2376,16 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| @@ -2283,8 +2424,8 @@ golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxb | ||||
| golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs= | ||||
| golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= | ||||
| golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| @@ -2358,10 +2499,12 @@ golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4f | ||||
| golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | ||||
| golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| 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.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= | ||||
| golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||||
| golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= | ||||
| golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/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= | ||||
| @@ -2400,8 +2543,15 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q | ||||
| google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= | ||||
| google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= | ||||
| google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= | ||||
| google.golang.org/api v0.44.0 h1:URs6qR1lAxDsqWITsQXI4ZkGiYJ5dHtRNiCpfs2OeKA= | ||||
| google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= | ||||
| google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= | ||||
| google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= | ||||
| google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= | ||||
| google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= | ||||
| google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= | ||||
| google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= | ||||
| google.golang.org/api v0.57.0 h1:4t9zuDlHLcIx0ZEhmXEeFVCRsiOgpgn2QOH9N0MNjPI= | ||||
| google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= | ||||
| google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||
| google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| @@ -2444,6 +2594,7 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG | ||||
| google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= | ||||
| @@ -2452,6 +2603,7 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY | ||||
| google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= | ||||
| google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| @@ -2460,14 +2612,31 @@ google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6D | ||||
| google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= | ||||
| google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= | ||||
| google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | ||||
| google.golang.org/genproto v0.0.0-20211021150943-2b146023228c h1:FqrtZMB5Wr+/RecOM3uPJNPfWR8Upb5hAPnt7PU6i4k= | ||||
| google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | ||||
| google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | ||||
| google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= | ||||
| google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= | ||||
| google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= | ||||
| google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= | ||||
| google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= | ||||
| google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= | ||||
| google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||
| google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20211021150943-2b146023228c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||
| google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= | ||||
| google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= | ||||
| google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= | ||||
| google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= | ||||
| @@ -2491,16 +2660,26 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji | ||||
| google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | ||||
| google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= | ||||
| google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= | ||||
| google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= | ||||
| google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
| google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
| google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | ||||
| google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | ||||
| google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | ||||
| google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | ||||
| google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= | ||||
| google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= | ||||
| google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= | ||||
| google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= | ||||
| google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= | ||||
| google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= | ||||
| google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= | ||||
| google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= | ||||
| google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= | ||||
| google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= | ||||
| google.golang.org/grpc/examples v0.0.0-20201130180447-c456688b1860/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= | ||||
| google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | ||||
| google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= | ||||
| google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | ||||
| @@ -2514,8 +2693,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba | ||||
| google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | ||||
| 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.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= | ||||
| google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||
| google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= | ||||
| google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||
| gopkg.in/DataDog/dd-trace-go.v1 v1.43.1 h1:Dez4VzRQWAI5YXJRBx58BiC0gONGuW/oY4l8fWKzOXY= | ||||
| gopkg.in/DataDog/dd-trace-go.v1 v1.43.1/go.mod h1:YL9g+nlUY7ByCffD5pDytAqy99GNbytRV0EBpKuldM4= | ||||
| gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= | ||||
| @@ -2565,6 +2745,7 @@ gopkg.in/ns1/ns1-go.v2 v2.6.5/go.mod h1:GMnKY+ZuoJ+lVLL+78uSTjwTz2jMazq6AfGKQOYh | ||||
| gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | ||||
| gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||
| gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||
| gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||
| gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||
| gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= | ||||
| gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||
| @@ -2612,10 +2793,12 @@ k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= | ||||
| k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= | ||||
| k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= | ||||
| k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg= | ||||
| k8s.io/api v0.22.1 h1:ISu3tD/jRhYfSW8jI/Q1e+lRxkR7w9UwQEZ7FgslrwY= | ||||
| k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY= | ||||
| k8s.io/apiextensions-apiserver v0.21.3 h1:+B6biyUWpqt41kz5x6peIsljlsuwvNAp/oFax/j2/aY= | ||||
| k8s.io/api v0.25.0 h1:H+Q4ma2U/ww0iGB78ijZx6DRByPz6/733jIuFpX70e0= | ||||
| k8s.io/api v0.25.0/go.mod h1:ttceV1GyV1i1rnmvzT3BST08N6nGt+dudGrquzVQWPk= | ||||
| k8s.io/apiextensions-apiserver v0.21.3/go.mod h1:kl6dap3Gd45+21Jnh6utCx8Z2xxLm8LGDkprcd+KbsE= | ||||
| k8s.io/apiextensions-apiserver v0.25.0 h1:CJ9zlyXAbq0FIW8CD7HHyozCMBpDSiH7EdrSTCZcZFY= | ||||
| k8s.io/apiextensions-apiserver v0.25.0/go.mod h1:3pAjZiN4zw7R8aZC5gR0y3/vCkGlAjCazcg1me8iB/E= | ||||
| k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= | ||||
| k8s.io/apimachinery v0.0.0-20190806215851-162a2dabc72f/go.mod h1:+ntn62igV2hyNj7/0brOvXSMONE2KxcePkSxK7/9FFQ= | ||||
| k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ= | ||||
| @@ -2625,8 +2808,9 @@ k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRp | ||||
| k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= | ||||
| k8s.io/apimachinery v0.21.0/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= | ||||
| k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI= | ||||
| k8s.io/apimachinery v0.22.1 h1:DTARnyzmdHMz7bFWFDDm22AM4pLWTQECMpRTFu2d2OM= | ||||
| k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= | ||||
| k8s.io/apimachinery v0.25.0 h1:MlP0r6+3XbkUG2itd6vp3oxbtdQLQI94fD5gCS+gnoU= | ||||
| k8s.io/apimachinery v0.25.0/go.mod h1:qMx9eAk0sZQGsXGu86fab8tZdffHbwUfsvzqKn4mfB0= | ||||
| k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= | ||||
| k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= | ||||
| k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= | ||||
| @@ -2639,8 +2823,9 @@ k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= | ||||
| k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= | ||||
| k8s.io/client-go v0.21.0/go.mod h1:nNBytTF9qPFDEhoqgEPaarobC8QPae13bElIVHzIglA= | ||||
| k8s.io/client-go v0.21.3/go.mod h1:+VPhCgTsaFmGILxR/7E1N0S+ryO010QBeNCv5JwRGYU= | ||||
| k8s.io/client-go v0.22.1 h1:jW0ZSHi8wW260FvcXHkIa0NLxFBQszTlhiAVsU5mopw= | ||||
| k8s.io/client-go v0.22.1/go.mod h1:BquC5A4UOo4qVDUtoc04/+Nxp1MeHcVc1HJm1KmG8kk= | ||||
| k8s.io/client-go v0.25.0 h1:CVWIaCETLMBNiTUta3d5nzRbXvY5Hy9Dpl+VvREpu5E= | ||||
| k8s.io/client-go v0.25.0/go.mod h1:lxykvypVfKilxhTklov0wz1FoaUZ8X4EwbhS6rpRfN8= | ||||
| k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo= | ||||
| k8s.io/code-generator v0.22.0/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= | ||||
| k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= | ||||
| @@ -2666,26 +2851,32 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= | ||||
| k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= | ||||
| k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= | ||||
| k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= | ||||
| k8s.io/klog/v2 v2.10.0 h1:R2HDMDJsHVTHA2n4RjwbeYXdOcBymXdX/JRb1v0VGhE= | ||||
| k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= | ||||
| k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= | ||||
| k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= | ||||
| k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= | ||||
| k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= | ||||
| k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= | ||||
| k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= | ||||
| k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= | ||||
| k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e h1:KLHHjkdQFomZy8+06csTWZ0m1343QqxZhR2LJ1OxCYM= | ||||
| k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= | ||||
| k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= | ||||
| k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= | ||||
| k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= | ||||
| k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= | ||||
| k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= | ||||
| k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | ||||
| k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | ||||
| k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | ||||
| k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e h1:ldQh+neBabomh7+89dTpiFAB8tGdfVmuIzAHbvtl+9I= | ||||
| k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | ||||
| k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= | ||||
| k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= | ||||
| launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= | ||||
| mvdan.cc/xurls/v2 v2.1.0 h1:KaMb5GLhlcSX+e+qhbRJODnUUBvlw01jt4yrjFIHAuA= | ||||
| mvdan.cc/xurls/v2 v2.1.0/go.mod h1:5GrSd9rOnKOpZaji1OZLYL/yeAAtGDlo/cFe+8K5n8E= | ||||
| nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= | ||||
| nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= | ||||
| nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= | ||||
| 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/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | ||||
| @@ -2697,15 +2888,19 @@ sigs.k8s.io/controller-runtime v0.9.6/go.mod h1:q6PpkM5vqQubEKUKOM6qr06oXGzOBcCb | ||||
| sigs.k8s.io/controller-tools v0.6.2/go.mod h1:oaeGpjXn6+ZSEIQkUe/+3I40PNiDYp9aeawbt3xTgJ8= | ||||
| sigs.k8s.io/gateway-api v0.4.0 h1:07IJkTt21NetZTHtPKJk2I4XIgDN4BAlTIq1wK7V11o= | ||||
| sigs.k8s.io/gateway-api v0.4.0/go.mod h1:r3eiNP+0el+NTLwaTfOrCNXy8TukC+dIM3ggc+fbNWk= | ||||
| sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= | ||||
| sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= | ||||
| sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= | ||||
| sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||
| sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= | ||||
| sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= | ||||
| sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= | ||||
| sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= | ||||
| sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= | ||||
| sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= | ||||
| sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= | ||||
|   | ||||
| @@ -12,8 +12,8 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/go-check/check" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| 	"github.com/traefik/traefik/v2/integration/try" | ||||
| 	"github.com/traefik/traefik/v2/pkg/log" | ||||
| 	"github.com/traefik/traefik/v2/pkg/middlewares/accesslog" | ||||
| 	checker "github.com/vdemeester/shakers" | ||||
| ) | ||||
| @@ -54,7 +54,7 @@ func (s *AccessLogSuite) TestAccessLog(c *check.C) { | ||||
| 	defer func() { | ||||
| 		traefikLog, err := os.ReadFile(traefikTestLogFile) | ||||
| 		c.Assert(err, checker.IsNil) | ||||
| 		log.WithoutContext().Info(string(traefikLog)) | ||||
| 		log.Info().Msg(string(traefikLog)) | ||||
| 	}() | ||||
|  | ||||
| 	err := cmd.Start() | ||||
| @@ -262,7 +262,7 @@ func digestParts(resp *http.Response) map[string]string { | ||||
| func getMD5(data string) string { | ||||
| 	digest := md5.New() | ||||
| 	if _, err := digest.Write([]byte(data)); err != nil { | ||||
| 		log.WithoutContext().Error(err) | ||||
| 		log.Error().Err(err).Send() | ||||
| 	} | ||||
| 	return fmt.Sprintf("%x", digest.Sum(nil)) | ||||
| } | ||||
| @@ -270,7 +270,7 @@ func getMD5(data string) string { | ||||
| func getCnonce() string { | ||||
| 	b := make([]byte, 8) | ||||
| 	if _, err := io.ReadFull(rand.Reader, b); err != nil { | ||||
| 		log.WithoutContext().Error(err) | ||||
| 		log.Error().Err(err).Send() | ||||
| 	} | ||||
| 	return fmt.Sprintf("%x", b)[:16] | ||||
| } | ||||
| @@ -435,7 +435,7 @@ func (s *AccessLogSuite) TestAccessLogBackendNotFound(c *check.C) { | ||||
| 	checkNoOtherTraefikProblems(c) | ||||
| } | ||||
|  | ||||
| func (s *AccessLogSuite) TestAccessLogFrontendWhitelist(c *check.C) { | ||||
| func (s *AccessLogSuite) TestAccessLogFrontendAllowlist(c *check.C) { | ||||
| 	ensureWorkingDirectoryIsClean() | ||||
|  | ||||
| 	expected := []accessLogValue{ | ||||
| @@ -443,7 +443,7 @@ func (s *AccessLogSuite) TestAccessLogFrontendWhitelist(c *check.C) { | ||||
| 			formatOnly: false, | ||||
| 			code:       "403", | ||||
| 			user:       "-", | ||||
| 			routerName: "rt-frontendWhitelist", | ||||
| 			routerName: "rt-frontendAllowlist", | ||||
| 			serviceURL: "-", | ||||
| 		}, | ||||
| 	} | ||||
| @@ -458,7 +458,7 @@ func (s *AccessLogSuite) TestAccessLogFrontendWhitelist(c *check.C) { | ||||
|  | ||||
| 	checkStatsForLogFile(c) | ||||
|  | ||||
| 	waitForTraefik(c, "frontendWhitelist") | ||||
| 	waitForTraefik(c, "frontendAllowlist") | ||||
|  | ||||
| 	// Verify Traefik started OK | ||||
| 	checkTraefikStarted(c) | ||||
| @@ -466,7 +466,7 @@ func (s *AccessLogSuite) TestAccessLogFrontendWhitelist(c *check.C) { | ||||
| 	// Test rate limit | ||||
| 	req, err := http.NewRequest(http.MethodGet, "http://127.0.0.1:8000/", nil) | ||||
| 	c.Assert(err, checker.IsNil) | ||||
| 	req.Host = "frontend.whitelist.docker.local" | ||||
| 	req.Host = "frontend.allowlist.docker.local" | ||||
|  | ||||
| 	err = try.Request(req, 500*time.Millisecond, try.StatusCodeIs(http.StatusForbidden), try.HasBody()) | ||||
| 	c.Assert(err, checker.IsNil) | ||||
|   | ||||
| @@ -102,7 +102,6 @@ func (s *ConsulSuite) TestSimpleConfiguration(c *check.C) { | ||||
| 		"traefik/http/middlewares/compressor/compress":            "", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/prefixes/0": "foo", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/prefixes/1": "bar", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/forceSlash": "true", | ||||
| 	} | ||||
|  | ||||
| 	for k, v := range data { | ||||
|   | ||||
| @@ -97,7 +97,6 @@ func (s *EtcdSuite) TestSimpleConfiguration(c *check.C) { | ||||
| 		"traefik/http/middlewares/compressor/compress":            "", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/prefixes/0": "foo", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/prefixes/1": "bar", | ||||
| 		"traefik/http/middlewares/striper/stripPrefix/forceSlash": "true", | ||||
| 	} | ||||
|  | ||||
| 	for k, v := range data { | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import ( | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/miekg/dns" | ||||
| 	"github.com/traefik/traefik/v2/pkg/log" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| ) | ||||
|  | ||||
| type handler struct { | ||||
| @@ -17,14 +17,12 @@ type handler struct { | ||||
| // Simplified version of the Challenge Test Server from Boulder | ||||
| // https://github.com/letsencrypt/boulder/blob/a6597b9f120207eff192c3e4107a7e49972a0250/test/challtestsrv/dnsone.go#L40 | ||||
| func (s *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { | ||||
| 	logger := log.WithoutContext() | ||||
|  | ||||
| 	m := new(dns.Msg) | ||||
| 	m.SetReply(r) | ||||
| 	m.Compress = false | ||||
|  | ||||
| 	for _, q := range r.Question { | ||||
| 		logger.Infof("Query -- [%s] %s", q.Name, dns.TypeToString[q.Qtype]) | ||||
| 		log.Info().Msgf("Query -- [%s] %s", q.Name, dns.TypeToString[q.Qtype]) | ||||
|  | ||||
| 		switch q.Qtype { | ||||
| 		case dns.TypeA: | ||||
| @@ -94,7 +92,7 @@ func (s *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { | ||||
| 	m.Ns = append(m.Ns, auth) | ||||
|  | ||||
| 	if err := w.WriteMsg(m); err != nil { | ||||
| 		logger.Fatalf("Failed to write message %v", err) | ||||
| 		log.Fatal().Err(err).Msg("Failed to write message") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -106,9 +104,9 @@ func startFakeDNSServer(traefikIP string) *dns.Server { | ||||
| 	} | ||||
|  | ||||
| 	go func() { | ||||
| 		log.WithoutContext().Infof("Start a fake DNS server.") | ||||
| 		log.Info().Msg("Start a fake DNS server.") | ||||
| 		if err := srv.ListenAndServe(); err != nil { | ||||
| 			log.WithoutContext().Fatalf("Failed to set udp listener %v", err) | ||||
| 			log.Fatal().Err(err).Msg("Failed to set udp listener") | ||||
| 		} | ||||
| 	}() | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints.web] | ||||
|   address = ":8000" | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
|  | ||||
| [log] | ||||
|   level = "DEBUG" | ||||
|   noColor = true | ||||
|  | ||||
| [entryPoints] | ||||
|   [entryPoints.web] | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user