Merge current v2.7 into v2.8
This commit is contained in:
commit
aa8fda5eae
11 changed files with 84 additions and 41 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
## [v2.7.3](https://github.com/traefik/traefik/tree/v2.7.3) (2022-06-29)
|
||||||
|
[All Commits](https://github.com/traefik/traefik/compare/v2.7.2...v2.7.3)
|
||||||
|
|
||||||
|
**Bug fixes:**
|
||||||
|
- **[metrics]** Ensure Datadog client is cleanly stopped ([#9137](https://github.com/traefik/traefik/pull/9137) by [jbdoumenjou](https://github.com/jbdoumenjou))
|
||||||
|
|
||||||
|
**Documentation:**
|
||||||
|
- **[middleware,k8s/crd]** Add documentation for main, SANs and plugin CRD fields ([#9136](https://github.com/traefik/traefik/pull/9136) by [mloiseleur](https://github.com/mloiseleur))
|
||||||
|
|
||||||
## [v2.8.0-rc2](https://github.com/traefik/traefik/tree/v2.8.0-rc2) (2022-06-27)
|
## [v2.8.0-rc2](https://github.com/traefik/traefik/tree/v2.8.0-rc2) (2022-06-27)
|
||||||
[All Commits](https://github.com/traefik/traefik/compare/v2.8.0-rc1...v2.8.0-rc2)
|
[All Commits](https://github.com/traefik/traefik/compare/v2.8.0-rc1...v2.8.0-rc2)
|
||||||
|
|
||||||
|
|
|
@ -153,3 +153,7 @@ http:
|
||||||
| [Retry](retry.md) | Automatically retries in case of error | Request lifecycle |
|
| [Retry](retry.md) | Automatically retries in case of error | Request lifecycle |
|
||||||
| [StripPrefix](stripprefix.md) | Changes the path of the request | Path Modifier |
|
| [StripPrefix](stripprefix.md) | Changes the path of the request | Path Modifier |
|
||||||
| [StripPrefixRegex](stripprefixregex.md) | Changes the path of the request | Path Modifier |
|
| [StripPrefixRegex](stripprefixregex.md) | Changes the path of the request | Path Modifier |
|
||||||
|
|
||||||
|
## Community Middlewares
|
||||||
|
|
||||||
|
Please take a look at the community-contributed plugins in the [plugin catalog](https://pilot.traefik.io/plugins).
|
||||||
|
|
|
@ -204,8 +204,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -408,8 +411,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -1300,6 +1306,8 @@ spec:
|
||||||
plugin:
|
plugin:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
x-kubernetes-preserve-unknown-fields: true
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
description: 'Plugin defines the middleware plugin configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/plugins/'
|
||||||
type: object
|
type: object
|
||||||
rateLimit:
|
rateLimit:
|
||||||
description: 'RateLimit holds the rate limit configuration. This middleware
|
description: 'RateLimit holds the rate limit configuration. This middleware
|
||||||
|
|
|
@ -204,8 +204,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
|
|
@ -143,8 +143,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
|
|
@ -729,6 +729,8 @@ spec:
|
||||||
plugin:
|
plugin:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
x-kubernetes-preserve-unknown-fields: true
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
description: 'Plugin defines the middleware plugin configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/plugins/'
|
||||||
type: object
|
type: object
|
||||||
rateLimit:
|
rateLimit:
|
||||||
description: 'RateLimit holds the rate limit configuration. This middleware
|
description: 'RateLimit holds the rate limit configuration. This middleware
|
||||||
|
|
|
@ -204,8 +204,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -408,8 +411,11 @@ spec:
|
||||||
description: Domain holds a domain name with SANs.
|
description: Domain holds a domain name with SANs.
|
||||||
properties:
|
properties:
|
||||||
main:
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
type: string
|
type: string
|
||||||
sans:
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
|
@ -1300,6 +1306,8 @@ spec:
|
||||||
plugin:
|
plugin:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
x-kubernetes-preserve-unknown-fields: true
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
description: 'Plugin defines the middleware plugin configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/plugins/'
|
||||||
type: object
|
type: object
|
||||||
rateLimit:
|
rateLimit:
|
||||||
description: 'RateLimit holds the rate limit configuration. This middleware
|
description: 'RateLimit holds the rate limit configuration. This middleware
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
datadogClient *dogstatsd.Dogstatsd
|
datadogClient *dogstatsd.Dogstatsd
|
||||||
datadogTicker *time.Ticker
|
datadogLoopCancelFunc context.CancelFunc
|
||||||
)
|
)
|
||||||
|
|
||||||
// Metric names consistent with https://github.com/DataDog/integrations-extras/pull/64
|
// Metric names consistent with https://github.com/DataDog/integrations-extras/pull/64
|
||||||
|
@ -44,6 +44,9 @@ const (
|
||||||
|
|
||||||
// RegisterDatadog registers the metrics pusher if this didn't happen yet and creates a datadog Registry instance.
|
// RegisterDatadog registers the metrics pusher if this didn't happen yet and creates a datadog Registry instance.
|
||||||
func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
|
func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
|
||||||
|
// Ensures there is only one DataDog client sending metrics at any given time.
|
||||||
|
StopDatadog()
|
||||||
|
|
||||||
// just to be sure there is a prefix defined
|
// just to be sure there is a prefix defined
|
||||||
if config.Prefix == "" {
|
if config.Prefix == "" {
|
||||||
config.Prefix = defaultMetricsPrefix
|
config.Prefix = defaultMetricsPrefix
|
||||||
|
@ -54,9 +57,7 @@ func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
|
||||||
return nil
|
return nil
|
||||||
}))
|
}))
|
||||||
|
|
||||||
if datadogTicker == nil {
|
initDatadogClient(ctx, config)
|
||||||
datadogTicker = initDatadogClient(ctx, config)
|
|
||||||
}
|
|
||||||
|
|
||||||
registry := &standardRegistry{
|
registry := &standardRegistry{
|
||||||
configReloadsCounter: datadogClient.NewCounter(ddConfigReloadsName, 1.0),
|
configReloadsCounter: datadogClient.NewCounter(ddConfigReloadsName, 1.0),
|
||||||
|
@ -95,25 +96,26 @@ func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
|
||||||
return registry
|
return registry
|
||||||
}
|
}
|
||||||
|
|
||||||
func initDatadogClient(ctx context.Context, config *types.Datadog) *time.Ticker {
|
func initDatadogClient(ctx context.Context, config *types.Datadog) {
|
||||||
address := config.Address
|
address := config.Address
|
||||||
if len(address) == 0 {
|
if len(address) == 0 {
|
||||||
address = "localhost:8125"
|
address = "localhost:8125"
|
||||||
}
|
}
|
||||||
|
|
||||||
report := time.NewTicker(time.Duration(config.PushInterval))
|
ctx, datadogLoopCancelFunc = context.WithCancel(ctx)
|
||||||
|
|
||||||
safe.Go(func() {
|
safe.Go(func() {
|
||||||
datadogClient.SendLoop(ctx, report.C, "udp", address)
|
ticker := time.NewTicker(time.Duration(config.PushInterval))
|
||||||
|
defer ticker.Stop()
|
||||||
|
|
||||||
|
datadogClient.SendLoop(ctx, ticker.C, "udp", address)
|
||||||
})
|
})
|
||||||
|
|
||||||
return report
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StopDatadog stops internal datadogTicker which controls the pushing of metrics to DD Agent and resets it to `nil`.
|
// StopDatadog stops the Datadog metrics pusher.
|
||||||
func StopDatadog() {
|
func StopDatadog() {
|
||||||
if datadogTicker != nil {
|
if datadogLoopCancelFunc != nil {
|
||||||
datadogTicker.Stop()
|
datadogLoopCancelFunc()
|
||||||
|
datadogLoopCancelFunc = nil
|
||||||
}
|
}
|
||||||
datadogTicker = nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,8 @@ type MiddlewareSpec struct {
|
||||||
PassTLSClientCert *dynamic.PassTLSClientCert `json:"passTLSClientCert,omitempty"`
|
PassTLSClientCert *dynamic.PassTLSClientCert `json:"passTLSClientCert,omitempty"`
|
||||||
Retry *Retry `json:"retry,omitempty"`
|
Retry *Retry `json:"retry,omitempty"`
|
||||||
ContentType *dynamic.ContentType `json:"contentType,omitempty"`
|
ContentType *dynamic.ContentType `json:"contentType,omitempty"`
|
||||||
|
// Plugin defines the middleware plugin configuration.
|
||||||
|
// More info: https://doc.traefik.io/traefik/plugins/
|
||||||
Plugin map[string]apiextensionv1.JSON `json:"plugin,omitempty"`
|
Plugin map[string]apiextensionv1.JSON `json:"plugin,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,9 @@ import (
|
||||||
|
|
||||||
// Domain holds a domain name with SANs.
|
// Domain holds a domain name with SANs.
|
||||||
type Domain struct {
|
type Domain struct {
|
||||||
|
// Main defines the main domain name.
|
||||||
Main string `description:"Default subject name." json:"main,omitempty" toml:"main,omitempty" yaml:"main,omitempty"`
|
Main string `description:"Default subject name." json:"main,omitempty" toml:"main,omitempty" yaml:"main,omitempty"`
|
||||||
|
// SANs defines the subject alternative domain names.
|
||||||
SANs []string `description:"Subject alternative names." json:"sans,omitempty" toml:"sans,omitempty" yaml:"sans,omitempty"`
|
SANs []string `description:"Subject alternative names." json:"sans,omitempty" toml:"sans,omitempty" yaml:"sans,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,11 @@ RepositoryName = "traefik"
|
||||||
OutputType = "file"
|
OutputType = "file"
|
||||||
FileName = "traefik_changelog.md"
|
FileName = "traefik_changelog.md"
|
||||||
|
|
||||||
# example new bugfix v2.7.2
|
# example new bugfix v2.7.3
|
||||||
CurrentRef = "v2.7"
|
CurrentRef = "v2.7"
|
||||||
PreviousRef = "v2.7.1"
|
PreviousRef = "v2.7.2"
|
||||||
BaseBranch = "v2.7"
|
BaseBranch = "v2.7"
|
||||||
FutureCurrentRefName = "v2.7.2"
|
FutureCurrentRefName = "v2.7.3"
|
||||||
|
|
||||||
ThresholdPreviousRef = 10
|
ThresholdPreviousRef = 10
|
||||||
ThresholdCurrentRef = 10
|
ThresholdCurrentRef = 10
|
||||||
|
|
Loading…
Add table
Reference in a new issue