diff --git a/docs/content/reference/install-configuration/observability/logs-and-accesslogs.md b/docs/content/reference/install-configuration/observability/logs-and-accesslogs.md
index ea92f0d34f..fe5a26f329 100644
--- a/docs/content/reference/install-configuration/observability/logs-and-accesslogs.md
+++ b/docs/content/reference/install-configuration/observability/logs-and-accesslogs.md
@@ -384,6 +384,10 @@ Below the fields displayed with the generic CLF format:
| `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`). |
+| `KubernetesIngressNamespace` | The namespace of the Kubernetes Ingress resource the router handles. Only available with the Kubernetes Ingress and Kubernetes Ingress Nginx providers. |
+| `KubernetesIngressName` | The name of the Kubernetes Ingress resource the router handles. Only available with the Kubernetes Ingress and Kubernetes Ingress Nginx providers. |
+| `KubernetesServiceName` | The name of the Kubernetes Service associated with the Ingress the router handles. Only available with the Kubernetes Ingress and Kubernetes Ingress Nginx providers. |
+| `KubernetesServicePort` | The port of the Kubernetes Service associated with the Ingress the router handles. Only available with the Kubernetes Ingress and Kubernetes Ingress Nginx providers. |
### Log Rotation
diff --git a/integration/k8s_test.go b/integration/k8s_test.go
index 2c70d6adbb..df2c28724a 100644
--- a/integration/k8s_test.go
+++ b/integration/k8s_test.go
@@ -111,13 +111,13 @@ func (s *K8sSuite) TestGatewayConfiguration() {
s.testConfiguration("testdata/rawdata-gateway.json", "8080")
}
-func (s *K8sSuite) TestIngressclass() {
+func (s *K8sSuite) TestIngressClass() {
s.traefikCmd(withConfigFile("fixtures/k8s_ingressclass.toml"))
s.testConfiguration("testdata/rawdata-ingressclass.json", "8080")
}
-func (s *K8sSuite) TestDisableIngressclassLookup() {
+func (s *K8sSuite) TestDisableIngressClassLookup() {
s.traefikCmd(withConfigFile("fixtures/k8s_ingressclass_disabled.toml"))
s.testConfiguration("testdata/rawdata-ingressclass-disabled.json", "8080")
diff --git a/integration/testdata/rawdata-ingress-label-selector.json b/integration/testdata/rawdata-ingress-label-selector.json
index a4081171c1..c4203aa7e2 100644
--- a/integration/testdata/rawdata-ingress-label-selector.json
+++ b/integration/testdata/rawdata-ingress-label-selector.json
@@ -47,13 +47,21 @@
"web"
],
"service": "default-whoami-http",
- "rule": "Host(`whoami.test`) \u0026\u0026 PathPrefix(`/whoami`)",
+ "rule": "Host(\"whoami.test\") \u0026\u0026 PathPrefix(\"/whoami\")",
"priority": 44,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "test.ingress",
+ "serviceName": "whoami",
+ "servicePort": "http"
+ }
+ }
},
"status": "enabled",
"using": [
diff --git a/integration/testdata/rawdata-ingress.json b/integration/testdata/rawdata-ingress.json
index a317099fb8..b4498b43fe 100644
--- a/integration/testdata/rawdata-ingress.json
+++ b/integration/testdata/rawdata-ingress.json
@@ -47,13 +47,21 @@
"web"
],
"service": "default-whoami-http",
- "rule": "Host(`whoami.test.https`) \u0026\u0026 PathPrefix(`/whoami`)",
+ "rule": "Host(\"whoami.test.https\") \u0026\u0026 PathPrefix(\"/whoami\")",
"priority": 50,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "test.ingress.https",
+ "serviceName": "whoami",
+ "servicePort": "http"
+ }
+ }
},
"status": "enabled",
"using": [
@@ -65,13 +73,21 @@
"web"
],
"service": "default-whoami-http",
- "rule": "Host(`whoami.test`) \u0026\u0026 PathPrefix(`/whoami`)",
+ "rule": "Host(\"whoami.test\") \u0026\u0026 PathPrefix(\"/whoami\")",
"priority": 44,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "test.ingress",
+ "serviceName": "whoami",
+ "servicePort": "http"
+ }
+ }
},
"status": "enabled",
"using": [
@@ -83,13 +99,21 @@
"web"
],
"service": "default-whoami-80",
- "rule": "Host(`whoami.test.drop`) \u0026\u0026 PathPrefix(`/drop`)",
+ "rule": "Host(\"whoami.test.drop\") \u0026\u0026 PathPrefix(\"/drop\")",
"priority": 47,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "whoami-drop-route",
+ "serviceName": "whoami",
+ "servicePort": "80"
+ }
+ }
},
"status": "enabled",
"using": [
@@ -101,13 +125,21 @@
"web"
],
"service": "default-whoami-80",
- "rule": "Host(`whoami.test.keep`) \u0026\u0026 PathPrefix(`/keep`)",
+ "rule": "Host(\"whoami.test.keep\") \u0026\u0026 PathPrefix(\"/keep\")",
"priority": 47,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "whoami-keep-route",
+ "serviceName": "whoami",
+ "servicePort": "80"
+ }
+ }
},
"status": "enabled",
"using": [
diff --git a/integration/testdata/rawdata-ingressclass.json b/integration/testdata/rawdata-ingressclass.json
index c860c8862d..2874aafcdb 100644
--- a/integration/testdata/rawdata-ingressclass.json
+++ b/integration/testdata/rawdata-ingressclass.json
@@ -47,13 +47,21 @@
"web"
],
"service": "default-whoami-80",
- "rule": "Host(`whoami.test.keep`) \u0026\u0026 PathPrefix(`/keep`)",
+ "rule": "Host(\"whoami.test.keep\") \u0026\u0026 PathPrefix(\"/keep\")",
"priority": 47,
"observability": {
"accessLogs": true,
"metrics": true,
"tracing": true,
- "traceVerbosity": "minimal"
+ "traceVerbosity": "minimal",
+ "metadata": {
+ "ingress": {
+ "namespace": "default",
+ "ingressName": "whoami-keep-route",
+ "serviceName": "whoami",
+ "servicePort": "80"
+ }
+ }
},
"status": "enabled",
"using": [
diff --git a/pkg/config/dynamic/http_config.go b/pkg/config/dynamic/http_config.go
index 1a8aeb31aa..cf716d5948 100644
--- a/pkg/config/dynamic/http_config.go
+++ b/pkg/config/dynamic/http_config.go
@@ -168,6 +168,10 @@ type RouterObservabilityConfig struct {
// +kubebuilder:validation:Enum=minimal;detailed
// +kubebuilder:default=minimal
TraceVerbosity otypes.TracingVerbosity `json:"traceVerbosity,omitempty" toml:"traceVerbosity,omitempty" yaml:"traceVerbosity,omitempty" export:"true"`
+
+ // Metadata holds the metadata for this router.
+ // Metadata cannot be user-defined for now.
+ Metadata *ObservabilityMetadata `json:"metadata,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-"`
}
// SetDefaults Default values for a RouterObservabilityConfig.
@@ -177,6 +181,23 @@ func (r *RouterObservabilityConfig) SetDefaults() {
// +k8s:deepcopy-gen=true
+// ObservabilityMetadata holds the observability metadata configuration.
+type ObservabilityMetadata struct {
+ Ingress *KubernetesIngressMetadata `json:"ingress,omitempty" toml:"-" yaml:"-" label:"-" file:"-" kv:"-"`
+}
+
+// +k8s:deepcopy-gen=true
+
+// KubernetesIngressMetadata holds the Kubernetes Ingress metadata.
+type KubernetesIngressMetadata struct {
+ Namespace string `json:"namespace,omitempty"`
+ IngressName string `json:"ingressName,omitempty"`
+ ServiceName string `json:"serviceName,omitempty"`
+ ServicePort string `json:"servicePort,omitempty"`
+}
+
+// +k8s:deepcopy-gen=true
+
// Mirroring holds the Mirroring configuration.
type Mirroring struct {
Service string `json:"service,omitempty" toml:"service,omitempty" yaml:"service,omitempty" export:"true"`
diff --git a/pkg/config/dynamic/zz_generated.deepcopy.go b/pkg/config/dynamic/zz_generated.deepcopy.go
index 5eb1d5488b..b470070274 100644
--- a/pkg/config/dynamic/zz_generated.deepcopy.go
+++ b/pkg/config/dynamic/zz_generated.deepcopy.go
@@ -957,6 +957,22 @@ func (in *InFlightReq) DeepCopy() *InFlightReq {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KubernetesIngressMetadata) DeepCopyInto(out *KubernetesIngressMetadata) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesIngressMetadata.
+func (in *KubernetesIngressMetadata) DeepCopy() *KubernetesIngressMetadata {
+ if in == nil {
+ return nil
+ }
+ out := new(KubernetesIngressMetadata)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Message) DeepCopyInto(out *Message) {
*out = *in
@@ -1245,6 +1261,27 @@ func (in *Model) DeepCopy() *Model {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ObservabilityMetadata) DeepCopyInto(out *ObservabilityMetadata) {
+ *out = *in
+ if in.Ingress != nil {
+ in, out := &in.Ingress, &out.Ingress
+ *out = new(KubernetesIngressMetadata)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObservabilityMetadata.
+func (in *ObservabilityMetadata) DeepCopy() *ObservabilityMetadata {
+ if in == nil {
+ return nil
+ }
+ out := new(ObservabilityMetadata)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PassTLSClientCert) DeepCopyInto(out *PassTLSClientCert) {
*out = *in
@@ -1614,6 +1651,11 @@ func (in *RouterObservabilityConfig) DeepCopyInto(out *RouterObservabilityConfig
*out = new(bool)
**out = **in
}
+ if in.Metadata != nil {
+ in, out := &in.Metadata, &out.Metadata
+ *out = new(ObservabilityMetadata)
+ (*in).DeepCopyInto(*out)
+ }
return
}
diff --git a/pkg/middlewares/accesslog/logdata.go b/pkg/middlewares/accesslog/logdata.go
index c9010fdd61..4d7aee2d3e 100644
--- a/pkg/middlewares/accesslog/logdata.go
+++ b/pkg/middlewares/accesslog/logdata.go
@@ -87,6 +87,17 @@ const (
OTelTraceID = "trace_id"
// OTelSpanID is the OTel-conformant log attribute for the span identifier.
OTelSpanID = "span_id"
+
+ // Kubernetes Ingress fields.
+
+ // KubernetesIngressNamespace is the namespace of the Kubernetes Ingress resource the router handles.
+ KubernetesIngressNamespace = "KubernetesIngressNamespace"
+ // KubernetesIngressName is the name of the Kubernetes Ingress resource the router handles.
+ KubernetesIngressName = "KubernetesIngressName"
+ // KubernetesServiceName is the name of the Kubernetes service associated with Ingress the router handles.
+ KubernetesServiceName = "KubernetesServiceName"
+ // KubernetesServicePort is the port of the Kubernetes service associated with Ingress the router handles.
+ KubernetesServicePort = "KubernetesServicePort"
)
// These are written out in the default case when no config is provided to specify keys of interest.
@@ -94,11 +105,21 @@ var defaultCoreKeys = [...]string{
StartUTC,
Duration,
RouterName,
+ ServiceAddr,
ServiceName,
ServiceURL,
+ ClientAddr,
ClientHost,
ClientPort,
ClientUsername,
+ GzipRatio,
+ StartLocal,
+ Overhead,
+ RetryAttempts,
+ TLSVersion,
+ TLSCipher,
+ TLSClientSubject,
+ RequestAddr,
RequestHost,
RequestPort,
RequestMethod,
@@ -121,18 +142,6 @@ func init() {
for _, k := range defaultCoreKeys {
allCoreKeys[k] = struct{}{}
}
- allCoreKeys[ServiceAddr] = struct{}{}
- allCoreKeys[ClientAddr] = struct{}{}
- allCoreKeys[RequestAddr] = struct{}{}
- allCoreKeys[GzipRatio] = struct{}{}
- allCoreKeys[StartLocal] = struct{}{}
- allCoreKeys[Overhead] = struct{}{}
- allCoreKeys[RetryAttempts] = struct{}{}
- allCoreKeys[TLSVersion] = struct{}{}
- allCoreKeys[TLSCipher] = struct{}{}
- allCoreKeys[TLSClientSubject] = struct{}{}
- allCoreKeys[OTelTraceID] = struct{}{}
- allCoreKeys[OTelSpanID] = struct{}{}
}
// CoreLogData holds the fields computed from the request/response.
diff --git a/pkg/middlewares/accesslog/logger.go b/pkg/middlewares/accesslog/logger.go
index f0c8300910..c5eca1228c 100644
--- a/pkg/middlewares/accesslog/logger.go
+++ b/pkg/middlewares/accesslog/logger.go
@@ -204,6 +204,15 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request, next http
},
}
+ if metadata := observability.GetObservabilityMetadata(req.Context()); metadata != nil {
+ if metadata.Ingress != nil {
+ logDataTable.Core[KubernetesIngressNamespace] = metadata.Ingress.Namespace
+ logDataTable.Core[KubernetesIngressName] = metadata.Ingress.IngressName
+ logDataTable.Core[KubernetesServiceName] = metadata.Ingress.ServiceName
+ logDataTable.Core[KubernetesServicePort] = metadata.Ingress.ServicePort
+ }
+ }
+
if span := trace.SpanFromContext(req.Context()); span != nil {
spanContext := span.SpanContext()
if spanContext.HasTraceID() && spanContext.HasSpanID() {
diff --git a/pkg/middlewares/accesslog/logger_test.go b/pkg/middlewares/accesslog/logger_test.go
index 557f1ef0c4..8bd07c0626 100644
--- a/pkg/middlewares/accesslog/logger_test.go
+++ b/pkg/middlewares/accesslog/logger_test.go
@@ -25,6 +25,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
ptypes "github.com/traefik/paerser/types"
+ "github.com/traefik/traefik/v3/pkg/config/dynamic"
"github.com/traefik/traefik/v3/pkg/middlewares/capture"
"github.com/traefik/traefik/v3/pkg/middlewares/observability"
otypes "github.com/traefik/traefik/v3/pkg/observability/types"
@@ -452,7 +453,7 @@ func TestLoggerHeaderFields(t *testing.T) {
func TestCommonLogger(t *testing.T) {
logFilePath := filepath.Join(t.TempDir(), logFileNameSuffix)
config := &otypes.AccessLog{FilePath: logFilePath, Format: CommonFormat}
- doLogging(t, config, false)
+ doLogging(t, config, false, false)
logData, err := os.ReadFile(logFilePath)
require.NoError(t, err)
@@ -464,7 +465,7 @@ func TestCommonLogger(t *testing.T) {
func TestCommonLoggerWithBufferingSize(t *testing.T) {
logFilePath := filepath.Join(t.TempDir(), logFileNameSuffix)
config := &otypes.AccessLog{FilePath: logFilePath, Format: CommonFormat, BufferingSize: 1024}
- doLogging(t, config, false)
+ doLogging(t, config, false, false)
// wait a bit for the buffer to be written in the file.
time.Sleep(50 * time.Millisecond)
@@ -479,7 +480,7 @@ func TestCommonLoggerWithBufferingSize(t *testing.T) {
func TestLoggerGenericCLF(t *testing.T) {
logFilePath := filepath.Join(t.TempDir(), logFileNameSuffix)
config := &otypes.AccessLog{FilePath: logFilePath, Format: GenericCLFFormat}
- doLogging(t, config, false)
+ doLogging(t, config, false, false)
logData, err := os.ReadFile(logFilePath)
require.NoError(t, err)
@@ -491,7 +492,7 @@ func TestLoggerGenericCLF(t *testing.T) {
func TestLoggerGenericCLFWithBufferingSize(t *testing.T) {
logFilePath := filepath.Join(t.TempDir(), logFileNameSuffix)
config := &otypes.AccessLog{FilePath: logFilePath, Format: GenericCLFFormat, BufferingSize: 1024}
- doLogging(t, config, false)
+ doLogging(t, config, false, false)
// wait a bit for the buffer to be written in the file.
time.Sleep(50 * time.Millisecond)
@@ -541,6 +542,7 @@ func TestLoggerJSON(t *testing.T) {
config *otypes.AccessLog
tls bool
tracing bool
+ metadata bool
expected map[string]func(t *testing.T, value any)
}{
{
@@ -626,6 +628,50 @@ func TestLoggerJSON(t *testing.T) {
OTelSpanID: assertString("0100000000000000"),
},
},
+ {
+ desc: "default config with metadata",
+ config: &otypes.AccessLog{
+ FilePath: "",
+ Format: JSONFormat,
+ },
+ metadata: true,
+ expected: map[string]func(t *testing.T, value any){
+ RequestContentSize: assertFloat64(0),
+ RequestHost: assertString(testHostname),
+ RequestAddr: assertString(testHostname),
+ RequestMethod: assertString(testMethod),
+ RequestPath: assertString(testPath),
+ RequestProtocol: assertString(testProto),
+ RequestScheme: assertString(testScheme),
+ RequestPort: assertString("-"),
+ DownstreamStatus: assertFloat64(float64(testStatus)),
+ DownstreamContentSize: assertFloat64(float64(len(testContent))),
+ OriginContentSize: assertFloat64(float64(len(testContent))),
+ OriginStatus: assertFloat64(float64(testStatus)),
+ RequestRefererHeader: assertString(testReferer),
+ RequestUserAgentHeader: assertString(testUserAgent),
+ RouterName: assertString(testRouterName),
+ ServiceURL: assertString(testServiceName),
+ ClientUsername: assertString(testUsername),
+ ClientHost: assertString(testHostname),
+ ClientPort: assertString(strconv.Itoa(testPort)),
+ ClientAddr: assertString(fmt.Sprintf("%s:%d", testHostname, testPort)),
+ "level": assertString("info"),
+ "msg": assertString(""),
+ "downstream_Content-Type": assertString("text/plain; charset=utf-8"),
+ RequestCount: assertFloat64NotZero(),
+ Duration: assertFloat64NotZero(),
+ Overhead: assertFloat64NotZero(),
+ RetryAttempts: assertFloat64(float64(testRetryAttempts)),
+ "time": assertNotEmpty(),
+ "StartLocal": assertNotEmpty(),
+ "StartUTC": assertNotEmpty(),
+ KubernetesIngressNamespace: assertString("test-namespace"),
+ KubernetesIngressName: assertString("test-ingress"),
+ KubernetesServiceName: assertString("test-service"),
+ KubernetesServicePort: assertString("test-port"),
+ },
+ },
{
desc: "default config, with TLS request",
config: &otypes.AccessLog{
@@ -788,9 +834,9 @@ func TestLoggerJSON(t *testing.T) {
test.config.FilePath = logFilePath
if test.tls {
- doLoggingTLS(t, test.config, test.tracing)
+ doLoggingTLS(t, test.config, test.tracing, test.metadata)
} else {
- doLogging(t, test.config, test.tracing)
+ doLogging(t, test.config, test.tracing, test.metadata)
}
logData, err := os.ReadFile(logFilePath)
@@ -1062,7 +1108,7 @@ func TestNewLogHandlerOutputStdout(t *testing.T) {
file, restoreStdout := captureStdout(t)
defer restoreStdout()
- doLogging(t, test.config, false)
+ doLogging(t, test.config, false, false)
written, err := os.ReadFile(file.Name())
require.NoError(t, err, "unable to read captured stdout from file")
@@ -1150,7 +1196,7 @@ func captureStdout(t *testing.T) (out *os.File, restoreStdout func()) {
return file, restoreStdout
}
-func doLoggingTLSOpt(t *testing.T, config *otypes.AccessLog, enableTLS, tracing bool) {
+func doLoggingTLSOpt(t *testing.T, config *otypes.AccessLog, enableTLS, tracing, metadata bool) {
t.Helper()
logger, err := NewHandler(t.Context(), config)
require.NoError(t, err)
@@ -1199,9 +1245,22 @@ func doLoggingTLSOpt(t *testing.T, config *otypes.AccessLog, enableTLS, tracing
// Injection of the observability variables in the request context.
chain = chain.Append(func(next http.Handler) (http.Handler, error) {
- return observability.WithObservabilityHandler(next, observability.Observability{
+ obs := observability.Observability{
AccessLogsEnabled: true,
- }), nil
+ }
+
+ if metadata {
+ obs.Metadata = &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "test-namespace",
+ IngressName: "test-ingress",
+ ServiceName: "test-service",
+ ServicePort: "test-port",
+ },
+ }
+ }
+
+ return observability.WithObservabilityHandler(next, obs), nil
})
chain = chain.Append(logger.AliceConstructor())
@@ -1211,16 +1270,16 @@ func doLoggingTLSOpt(t *testing.T, config *otypes.AccessLog, enableTLS, tracing
handler.ServeHTTP(httptest.NewRecorder(), req)
}
-func doLoggingTLS(t *testing.T, config *otypes.AccessLog, tracing bool) {
+func doLoggingTLS(t *testing.T, config *otypes.AccessLog, tracing, metadata bool) {
t.Helper()
- doLoggingTLSOpt(t, config, true, tracing)
+ doLoggingTLSOpt(t, config, true, tracing, metadata)
}
-func doLogging(t *testing.T, config *otypes.AccessLog, tracing bool) {
+func doLogging(t *testing.T, config *otypes.AccessLog, tracing, metadata bool) {
t.Helper()
- doLoggingTLSOpt(t, config, false, tracing)
+ doLoggingTLSOpt(t, config, false, tracing, metadata)
}
func logWriterTestHandlerFunc(rw http.ResponseWriter, r *http.Request) {
diff --git a/pkg/middlewares/observability/observability.go b/pkg/middlewares/observability/observability.go
index a02ca292dc..b9f63e94f7 100644
--- a/pkg/middlewares/observability/observability.go
+++ b/pkg/middlewares/observability/observability.go
@@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
+ "github.com/traefik/traefik/v3/pkg/config/dynamic"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
)
@@ -19,6 +20,7 @@ type Observability struct {
SemConvMetricsEnabled bool
TracingEnabled bool
DetailedTracingEnabled bool
+ Metadata *dynamic.ObservabilityMetadata
}
// WithObservabilityHandler sets the observability state in the context for the next handler.
@@ -64,6 +66,15 @@ func DetailedTracingEnabled(ctx context.Context) bool {
return ok && obs.DetailedTracingEnabled
}
+// GetObservabilityMetadata returns the observability metadata.
+func GetObservabilityMetadata(ctx context.Context) *dynamic.ObservabilityMetadata {
+ obs, ok := ctx.Value(observabilityKey).(Observability)
+ if ok {
+ return obs.Metadata
+ }
+ return nil
+}
+
// SetStatusErrorf flags the span as in error and log an event.
func SetStatusErrorf(ctx context.Context, format string, args ...any) {
if span := trace.SpanFromContext(ctx); span != nil {
diff --git a/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/route.go b/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/route.go
index bdb04f4d3e..59adbc6ca2 100644
--- a/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/route.go
+++ b/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/route.go
@@ -26,10 +26,6 @@ THE SOFTWARE.
package v1alpha1
-import (
- dynamic "github.com/traefik/traefik/v3/pkg/config/dynamic"
-)
-
// RouteApplyConfiguration represents a declarative configuration of the Route type for use
// with apply.
//
@@ -58,7 +54,7 @@ type RouteApplyConfiguration struct {
Middlewares []MiddlewareRefApplyConfiguration `json:"middlewares,omitempty"`
// Observability defines the observability configuration for a router.
// More info: https://doc.traefik.io/traefik/v3.7/reference/routing-configuration/http/routing/observability/
- Observability *dynamic.RouterObservabilityConfig `json:"observability,omitempty"`
+ Observability *RouterObservabilityConfigApplyConfiguration `json:"observability,omitempty"`
}
// RouteApplyConfiguration constructs a declarative configuration of the Route type for use with
@@ -128,7 +124,7 @@ func (b *RouteApplyConfiguration) WithMiddlewares(values ...*MiddlewareRefApplyC
// WithObservability sets the Observability field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Observability field is set to the value of the last call.
-func (b *RouteApplyConfiguration) WithObservability(value dynamic.RouterObservabilityConfig) *RouteApplyConfiguration {
- b.Observability = &value
+func (b *RouteApplyConfiguration) WithObservability(value *RouterObservabilityConfigApplyConfiguration) *RouteApplyConfiguration {
+ b.Observability = value
return b
}
diff --git a/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/routerobservabilityconfig.go b/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/routerobservabilityconfig.go
new file mode 100644
index 0000000000..59520c082d
--- /dev/null
+++ b/pkg/provider/kubernetes/crd/generated/applyconfiguration/traefikio/v1alpha1/routerobservabilityconfig.go
@@ -0,0 +1,85 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016-2020 Containous SAS; 2020-2026 Traefik Labs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+ types "github.com/traefik/traefik/v3/pkg/observability/types"
+)
+
+// RouterObservabilityConfigApplyConfiguration represents a declarative configuration of the RouterObservabilityConfig type for use
+// with apply.
+//
+// RouterObservabilityConfig holds the observability configuration for a router.
+// More info: https://doc.traefik.io/traefik/v3.7/reference/routing-configuration/http/routing/observability/
+type RouterObservabilityConfigApplyConfiguration struct {
+ // AccessLogs enables access logs for this router.
+ AccessLogs *bool `json:"accessLogs,omitempty"`
+ // Metrics enables metrics for this router.
+ Metrics *bool `json:"metrics,omitempty"`
+ // Tracing enables tracing for this router.
+ Tracing *bool `json:"tracing,omitempty"`
+ // TraceVerbosity defines the verbosity level of the tracing for this router.
+ TraceVerbosity *types.TracingVerbosity `json:"traceVerbosity,omitempty"`
+}
+
+// RouterObservabilityConfigApplyConfiguration constructs a declarative configuration of the RouterObservabilityConfig type for use with
+// apply.
+func RouterObservabilityConfig() *RouterObservabilityConfigApplyConfiguration {
+ return &RouterObservabilityConfigApplyConfiguration{}
+}
+
+// WithAccessLogs sets the AccessLogs field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the AccessLogs field is set to the value of the last call.
+func (b *RouterObservabilityConfigApplyConfiguration) WithAccessLogs(value bool) *RouterObservabilityConfigApplyConfiguration {
+ b.AccessLogs = &value
+ return b
+}
+
+// WithMetrics sets the Metrics field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Metrics field is set to the value of the last call.
+func (b *RouterObservabilityConfigApplyConfiguration) WithMetrics(value bool) *RouterObservabilityConfigApplyConfiguration {
+ b.Metrics = &value
+ return b
+}
+
+// WithTracing sets the Tracing field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Tracing field is set to the value of the last call.
+func (b *RouterObservabilityConfigApplyConfiguration) WithTracing(value bool) *RouterObservabilityConfigApplyConfiguration {
+ b.Tracing = &value
+ return b
+}
+
+// WithTraceVerbosity sets the TraceVerbosity field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the TraceVerbosity field is set to the value of the last call.
+func (b *RouterObservabilityConfigApplyConfiguration) WithTraceVerbosity(value types.TracingVerbosity) *RouterObservabilityConfigApplyConfiguration {
+ b.TraceVerbosity = &value
+ return b
+}
diff --git a/pkg/provider/kubernetes/crd/generated/applyconfiguration/utils.go b/pkg/provider/kubernetes/crd/generated/applyconfiguration/utils.go
index 082e745a88..de36fd858d 100644
--- a/pkg/provider/kubernetes/crd/generated/applyconfiguration/utils.go
+++ b/pkg/provider/kubernetes/crd/generated/applyconfiguration/utils.go
@@ -118,6 +118,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &traefikiov1alpha1.RootCAApplyConfiguration{}
case v1alpha1.SchemeGroupVersion.WithKind("Route"):
return &traefikiov1alpha1.RouteApplyConfiguration{}
+ case v1alpha1.SchemeGroupVersion.WithKind("RouterObservabilityConfig"):
+ return &traefikiov1alpha1.RouterObservabilityConfigApplyConfiguration{}
case v1alpha1.SchemeGroupVersion.WithKind("RouteTCP"):
return &traefikiov1alpha1.RouteTCPApplyConfiguration{}
case v1alpha1.SchemeGroupVersion.WithKind("RouteUDP"):
diff --git a/pkg/provider/kubernetes/crd/kubernetes_http.go b/pkg/provider/kubernetes/crd/kubernetes_http.go
index bec8285a1d..054592e1cc 100644
--- a/pkg/provider/kubernetes/crd/kubernetes_http.go
+++ b/pkg/provider/kubernetes/crd/kubernetes_http.go
@@ -122,14 +122,22 @@ func (p *Provider) loadIngressRouteConfiguration(ctx context.Context, client Cli
}
r := &dynamic.Router{
- Middlewares: mds,
- Priority: route.Priority,
- RuleSyntax: route.Syntax,
- EntryPoints: ingressRoute.Spec.EntryPoints,
- Rule: route.Match,
- Service: serviceName,
- Observability: route.Observability,
- ParentRefs: parentRouterNames,
+ Middlewares: mds,
+ Priority: route.Priority,
+ RuleSyntax: route.Syntax,
+ EntryPoints: ingressRoute.Spec.EntryPoints,
+ Rule: route.Match,
+ Service: serviceName,
+ ParentRefs: parentRouterNames,
+ }
+
+ if route.Observability != nil {
+ r.Observability = &dynamic.RouterObservabilityConfig{
+ AccessLogs: route.Observability.AccessLogs,
+ Metrics: route.Observability.Metrics,
+ Tracing: route.Observability.Tracing,
+ TraceVerbosity: route.Observability.TraceVerbosity,
+ }
}
if ingressRoute.Spec.TLS != nil {
diff --git a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroute.go b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroute.go
index 52733b871d..3c4d13ddb3 100644
--- a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroute.go
+++ b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/ingressroute.go
@@ -2,6 +2,7 @@ package v1alpha1
import (
"github.com/traefik/traefik/v3/pkg/config/dynamic"
+ otypes "github.com/traefik/traefik/v3/pkg/observability/types"
"github.com/traefik/traefik/v3/pkg/types"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
@@ -54,7 +55,22 @@ type Route struct {
Middlewares []MiddlewareRef `json:"middlewares,omitempty"`
// Observability defines the observability configuration for a router.
// More info: https://doc.traefik.io/traefik/v3.7/reference/routing-configuration/http/routing/observability/
- Observability *dynamic.RouterObservabilityConfig `json:"observability,omitempty"`
+ Observability *RouterObservabilityConfig `json:"observability,omitempty"`
+}
+
+// RouterObservabilityConfig holds the observability configuration for a router.
+// More info: https://doc.traefik.io/traefik/v3.7/reference/routing-configuration/http/routing/observability/
+type RouterObservabilityConfig struct {
+ // AccessLogs enables access logs for this router.
+ AccessLogs *bool `json:"accessLogs,omitempty" toml:"accessLogs,omitempty" yaml:"accessLogs,omitempty" export:"true"`
+ // Metrics enables metrics for this router.
+ Metrics *bool `json:"metrics,omitempty" toml:"metrics,omitempty" yaml:"metrics,omitempty" export:"true"`
+ // Tracing enables tracing for this router.
+ Tracing *bool `json:"tracing,omitempty" toml:"tracing,omitempty" yaml:"tracing,omitempty" export:"true"`
+ // TraceVerbosity defines the verbosity level of the tracing for this router.
+ // +kubebuilder:validation:Enum=minimal;detailed
+ // +kubebuilder:default=minimal
+ TraceVerbosity otypes.TracingVerbosity `json:"traceVerbosity,omitempty" toml:"traceVerbosity,omitempty" yaml:"traceVerbosity,omitempty" export:"true"`
}
// TLS holds the TLS configuration.
diff --git a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/zz_generated.deepcopy.go b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/zz_generated.deepcopy.go
index feb3dedfab..10098f252d 100644
--- a/pkg/provider/kubernetes/crd/traefikio/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/provider/kubernetes/crd/traefikio/v1alpha1/zz_generated.deepcopy.go
@@ -1382,7 +1382,7 @@ func (in *Route) DeepCopyInto(out *Route) {
}
if in.Observability != nil {
in, out := &in.Observability, &out.Observability
- *out = new(dynamic.RouterObservabilityConfig)
+ *out = new(RouterObservabilityConfig)
(*in).DeepCopyInto(*out)
}
return
@@ -1449,6 +1449,37 @@ func (in *RouteUDP) DeepCopy() *RouteUDP {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *RouterObservabilityConfig) DeepCopyInto(out *RouterObservabilityConfig) {
+ *out = *in
+ if in.AccessLogs != nil {
+ in, out := &in.AccessLogs, &out.AccessLogs
+ *out = new(bool)
+ **out = **in
+ }
+ if in.Metrics != nil {
+ in, out := &in.Metrics, &out.Metrics
+ *out = new(bool)
+ **out = **in
+ }
+ if in.Tracing != nil {
+ in, out := &in.Tracing, &out.Tracing
+ *out = new(bool)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouterObservabilityConfig.
+func (in *RouterObservabilityConfig) DeepCopy() *RouterObservabilityConfig {
+ if in == nil {
+ return nil
+ }
+ out := new(RouterObservabilityConfig)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ServerHealthCheck) DeepCopyInto(out *ServerHealthCheck) {
*out = *in
diff --git a/pkg/provider/kubernetes/ingress-nginx/kubernetes.go b/pkg/provider/kubernetes/ingress-nginx/kubernetes.go
index f86ffd684c..6b5de19c6a 100644
--- a/pkg/provider/kubernetes/ingress-nginx/kubernetes.go
+++ b/pkg/provider/kubernetes/ingress-nginx/kubernetes.go
@@ -417,24 +417,36 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
return conf
}
+ obs := &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ // No ingress and no service port with the global default backend.
+ Namespace: p.defaultBackendServiceNamespace,
+ ServiceName: p.defaultBackendServiceName,
+ },
+ },
+ }
+
// Add the default backend service router to the configuration.
conf.HTTP.Routers[defaultBackendName] = &dynamic.Router{
EntryPoints: p.NonTLSEntryPoints,
Rule: `PathPrefix("/")`,
// "default" stands for the default rule syntax in Traefik v3, i.e. the v3 syntax.
- RuleSyntax: "default",
- Priority: math.MinInt32,
- Service: defaultBackendName,
+ RuleSyntax: "default",
+ Priority: math.MinInt32,
+ Service: defaultBackendName,
+ Observability: obs,
}
conf.HTTP.Routers[defaultBackendTLSName] = &dynamic.Router{
EntryPoints: p.TLSEntryPoints,
Rule: `PathPrefix("/")`,
// "default" stands for the default rule syntax in Traefik v3, i.e. the v3 syntax.
- RuleSyntax: "default",
- Priority: math.MinInt32,
- Service: defaultBackendName,
- TLS: &dynamic.RouterTLSConfig{},
+ RuleSyntax: "default",
+ Priority: math.MinInt32,
+ Service: defaultBackendName,
+ TLS: &dynamic.RouterTLSConfig{},
+ Observability: obs,
}
conf.HTTP.Services[defaultBackendName] = svc
@@ -586,9 +598,10 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
}
var defaultBackendService *dynamic.Service
+ var defaultBackendObs *dynamic.RouterObservabilityConfig
if ingress.Spec.DefaultBackend != nil && ingress.Spec.DefaultBackend.Service != nil {
var err error
- defaultBackendService, err = p.buildService(ingress.Namespace, *ingress.Spec.DefaultBackend, namedServersTransport, ingress.IngressConfig)
+ defaultBackendService, err = p.buildService(ingress.Namespace, *ingress.Spec.DefaultBackend, &namedServersTransport, ingress.IngressConfig)
if err != nil {
logger.Error().
Str("serviceName", ingress.Spec.DefaultBackend.Service.Name).
@@ -596,6 +609,17 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
Err(err).
Msg("Cannot create default backend service")
}
+
+ defaultBackendObs = &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: ingress.Namespace,
+ IngressName: ingress.Name,
+ ServiceName: ingress.Spec.DefaultBackend.Service.Name,
+ ServicePort: portString(ingress.Spec.DefaultBackend.Service.Port),
+ },
+ },
+ }
}
if defaultBackendService != nil && len(ingress.Spec.Rules) == 0 {
@@ -603,9 +627,10 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
EntryPoints: p.NonTLSEntryPoints,
Rule: `PathPrefix("/")`,
// "default" stands for the default rule syntax in Traefik v3, i.e. the v3 syntax.
- RuleSyntax: "default",
- Priority: math.MinInt32,
- Service: defaultBackendName,
+ RuleSyntax: "default",
+ Priority: math.MinInt32,
+ Service: defaultBackendName,
+ Observability: defaultBackendObs,
}
if err := p.applyMiddlewares(ingress, defaultBackendName, "", "", ingress.Spec.DefaultBackend, hosts, rt, conf, ""); err != nil {
@@ -624,6 +649,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
TLS: &dynamic.RouterTLSConfig{
Options: clientAuthTLSOptionName,
},
+ Observability: defaultBackendObs,
}
if err := p.applyMiddlewares(ingress, defaultBackendTLSName, "", "", ingress.Spec.DefaultBackend, hosts, rtTLS, conf, ""); err != nil {
@@ -632,10 +658,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
conf.HTTP.Routers[defaultBackendTLSName] = rtTLS
- if namedServersTransport != nil && defaultBackendService.LoadBalancer != nil {
- defaultBackendService.LoadBalancer.ServersTransport = namedServersTransport.Name
- conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
- }
+ conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
conf.HTTP.Services[defaultBackendName] = defaultBackendService
}
@@ -695,8 +718,9 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
EntryPoints: p.NonTLSEntryPoints,
Rule: fmt.Sprintf("Host(%q)", rule.Host),
// "default" stands for the default rule syntax in Traefik v3, i.e. the v3 syntax.
- RuleSyntax: "default",
- Service: key,
+ RuleSyntax: "default",
+ Service: key,
+ Observability: defaultBackendObs,
}
if err := p.applyMiddlewares(ingress, key, "", "", ingress.Spec.DefaultBackend, hosts, rt, conf, serverSnippets[rule.Host]); err != nil {
@@ -714,6 +738,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
TLS: &dynamic.RouterTLSConfig{
Options: clientAuthTLSOptionName,
},
+ Observability: defaultBackendObs,
}
if err := p.applyMiddlewares(ingress, key+"-tls", "", "", ingress.Spec.DefaultBackend, hosts, rtTLS, conf, serverSnippets[rule.Host]); err != nil {
@@ -722,11 +747,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
conf.HTTP.Routers[key+"-tls"] = rtTLS
- if namedServersTransport != nil && defaultBackendService.LoadBalancer != nil {
- defaultBackendService.LoadBalancer.ServersTransport = namedServersTransport.Name
- conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
- }
-
+ conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
conf.HTTP.Services[key] = defaultBackendService
}
@@ -746,9 +767,20 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
continue
}
+ pathObs := &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: ingress.Namespace,
+ IngressName: ingress.Name,
+ ServiceName: pa.Backend.Service.Name,
+ ServicePort: portString(pa.Backend.Service.Port),
+ },
+ },
+ }
+
// TODO: if no service, do not add middlewares and 503.
serviceName := provider.Normalize(ingress.Namespace + "-" + ingress.Name + "-" + pa.Backend.Service.Name + "-" + portString(pa.Backend.Service.Port))
- service, err := p.buildService(ingress.Namespace, pa.Backend, namedServersTransport, ingress.IngressConfig)
+ service, err := p.buildService(ingress.Namespace, pa.Backend, &namedServersTransport, ingress.IngressConfig)
if err != nil {
logger.Error().
Str("serviceName", pa.Backend.Service.Name).
@@ -769,7 +801,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
canaryBackend, hasCanaryBackend := canaryBackends[canaryBackendKey(ingress.Namespace, *pa.Backend.Service)]
if hasCanaryBackend {
canaryServiceName = serviceName + "-canary"
- canaryService, err = p.buildService(ingress.Namespace, *canaryBackend.IngressBackend, namedServersTransport, ingress.IngressConfig)
+ canaryService, err = p.buildService(ingress.Namespace, *canaryBackend.IngressBackend, &namedServersTransport, ingress.IngressConfig)
if err != nil {
logger.Error().
Str("serviceName", canaryBackend.IngressBackend.Service.Name).
@@ -795,8 +827,9 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
EntryPoints: p.NonTLSEntryPoints,
Rule: buildRule(ctxIngress, rule.Host, pa, ingress.IngressConfig, hosts, hostsWithUseRegex),
// "default" stands for the default rule syntax in Traefik v3, i.e. the v3 syntax.
- RuleSyntax: "default",
- Service: serviceName,
+ RuleSyntax: "default",
+ Service: serviceName,
+ Observability: pathObs,
}
routerKey := provider.Normalize(fmt.Sprintf("%s-%s-rule-%d-path-%d", ingress.Namespace, ingress.Name, ri, pi))
@@ -811,6 +844,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
TLS: &dynamic.RouterTLSConfig{
Options: clientAuthTLSOptionName,
},
+ Observability: pathObs,
}
routerKeyTLS := routerKey + "-tls"
@@ -838,11 +872,11 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
if hasCanaryBackend && canaryBackend.RequiresCanaryRouter() {
canaryRouterKey := routerKey + "-canary"
canaryRouter := &dynamic.Router{
- EntryPoints: rt.EntryPoints,
- Rule: canaryBackend.AppendCanaryRule(rt.Rule),
- RuleSyntax: rt.RuleSyntax,
- Service: canaryServiceName,
- TLS: rt.TLS,
+ EntryPoints: rt.EntryPoints,
+ Rule: canaryBackend.AppendCanaryRule(rt.Rule),
+ RuleSyntax: rt.RuleSyntax,
+ Service: canaryServiceName,
+ Observability: pathObs,
}
conf.HTTP.Routers[canaryRouterKey] = canaryRouter
@@ -853,11 +887,12 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
// default TLS router
canaryRouterKeyTLS := canaryRouterKey + "-tls"
canaryRouterTLS := &dynamic.Router{
- EntryPoints: rtTLS.EntryPoints,
- Rule: canaryBackend.AppendCanaryRule(rtTLS.Rule),
- RuleSyntax: rtTLS.RuleSyntax,
- Service: canaryServiceName,
- TLS: rtTLS.TLS,
+ EntryPoints: rtTLS.EntryPoints,
+ Rule: canaryBackend.AppendCanaryRule(rtTLS.Rule),
+ RuleSyntax: rtTLS.RuleSyntax,
+ Service: canaryServiceName,
+ TLS: rtTLS.TLS,
+ Observability: pathObs,
}
conf.HTTP.Routers[canaryRouterKeyTLS] = canaryRouterTLS
@@ -869,11 +904,11 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
if hasCanaryBackend && canaryBackend.RequiresNonCanaryRouter() {
nonCanaryRouterKey := routerKey + "-non-canary"
nonCanaryRouter := &dynamic.Router{
- EntryPoints: rt.EntryPoints,
- Rule: canaryBackend.AppendNonCanaryRule(rt.Rule),
- RuleSyntax: rt.RuleSyntax,
- Service: serviceName,
- TLS: rt.TLS,
+ EntryPoints: rt.EntryPoints,
+ Rule: canaryBackend.AppendNonCanaryRule(rt.Rule),
+ RuleSyntax: rt.RuleSyntax,
+ Service: serviceName,
+ Observability: pathObs,
}
conf.HTTP.Routers[nonCanaryRouterKey] = nonCanaryRouter
@@ -884,11 +919,12 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
// default TLS router
nonCanaryRouterKeyTLS := nonCanaryRouterKey + "-tls"
nonCanaryRouterTLS := &dynamic.Router{
- EntryPoints: rtTLS.EntryPoints,
- Rule: canaryBackend.AppendNonCanaryRule(rtTLS.Rule),
- RuleSyntax: rtTLS.RuleSyntax,
- Service: serviceName,
- TLS: rtTLS.TLS,
+ EntryPoints: rtTLS.EntryPoints,
+ Rule: canaryBackend.AppendNonCanaryRule(rtTLS.Rule),
+ RuleSyntax: rtTLS.RuleSyntax,
+ Service: serviceName,
+ TLS: rtTLS.TLS,
+ Observability: pathObs,
}
conf.HTTP.Routers[nonCanaryRouterKeyTLS] = nonCanaryRouterTLS
@@ -897,9 +933,7 @@ func (p *Provider) loadConfiguration(ctx context.Context) *dynamic.Configuration
}
}
- if namedServersTransport != nil {
- conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
- }
+ conf.HTTP.ServersTransports[namedServersTransport.Name] = namedServersTransport.ServersTransport
}
}
}
@@ -945,11 +979,11 @@ func (p *Provider) isIngressValid(ingress ingress) error {
return nil
}
-func (p *Provider) buildServersTransport(ctx context.Context, namespace, name string, cfg IngressConfig) (*namedServersTransport, error) {
+func (p *Provider) buildServersTransport(ctx context.Context, namespace, name string, cfg IngressConfig) (namedServersTransport, error) {
proxyConnectTimeout := ptr.Deref(cfg.ProxyConnectTimeout, p.ProxyConnectTimeout)
proxyReadTimeout := ptr.Deref(cfg.ProxyReadTimeout, p.ProxyReadTimeout)
proxySendTimeout := ptr.Deref(cfg.ProxySendTimeout, p.ProxySendTimeout)
- nst := &namedServersTransport{
+ nst := namedServersTransport{
Name: provider.Normalize(namespace + "-" + name),
ServersTransport: &dynamic.ServersTransport{
ForwardingTimeouts: &dynamic.ForwardingTimeouts{
@@ -982,17 +1016,17 @@ func (p *Provider) buildServersTransport(ctx context.Context, namespace, name st
if sslSecret := ptr.Deref(cfg.ProxySSLSecret, ""); sslSecret != "" {
parts := strings.Split(sslSecret, "/")
if len(parts) != 2 {
- return nil, fmt.Errorf("malformed proxy SSL secret: %s, expected namespace/name", sslSecret)
+ return namedServersTransport{}, fmt.Errorf("malformed proxy SSL secret: %s, expected namespace/name", sslSecret)
}
secretNamespace, secretName := parts[0], parts[1]
if !p.AllowCrossNamespaceResources && secretNamespace != namespace {
- return nil, fmt.Errorf("cross-namespace proxy ssl secret is not allowed: secret %s/%s is not from ingress namespace %q", secretName, secretNamespace, namespace)
+ return namedServersTransport{}, fmt.Errorf("cross-namespace proxy ssl secret is not allowed: secret %s/%s is not from ingress namespace %q", secretName, secretNamespace, namespace)
}
blocks, err := p.certificateBlocks(secretNamespace, secretName)
if err != nil {
- return nil, fmt.Errorf("getting certificate blocks: %w", err)
+ return namedServersTransport{}, fmt.Errorf("getting certificate blocks: %w", err)
}
if blocks.CA != nil {
@@ -1299,7 +1333,7 @@ func (p *Provider) applyMiddlewares(ingress ingress, routerKey, rulePath, ruleHo
return fmt.Errorf("applying custom HTTP errors: %w", err)
}
applyAppRootConfiguration(routerKey, ingress.IngressConfig, rt, conf)
- applyFromToWwwRedirect(hosts, ruleHost, routerKey, ingress.IngressConfig, rt, conf)
+ applyFromToWwwRedirect(hosts, ruleHost, routerKey, ingress, backend, rt, conf)
applyRedirect(routerKey, ingress.IngressConfig, rt, conf)
if err := p.applyBasicAuthConfiguration(ingress.Namespace, routerKey, ingress.IngressConfig, rt, conf); err != nil {
@@ -1645,8 +1679,8 @@ func applyAppRootConfiguration(routerName string, ingressConfig IngressConfig, r
rt.Middlewares = append(rt.Middlewares, appRootMiddlewareName)
}
-func applyFromToWwwRedirect(hosts map[string]bool, ruleHost, routerName string, ingressConfig IngressConfig, rt *dynamic.Router, conf *dynamic.Configuration) {
- if ingressConfig.FromToWwwRedirect == nil || !*ingressConfig.FromToWwwRedirect {
+func applyFromToWwwRedirect(hosts map[string]bool, ruleHost, routerName string, ingress ingress, backend *netv1.IngressBackend, rt *dynamic.Router, conf *dynamic.Configuration) {
+ if ingress.IngressConfig.FromToWwwRedirect == nil || !*ingress.IngressConfig.FromToWwwRedirect {
return
}
@@ -1676,6 +1710,16 @@ func applyFromToWwwRedirect(hosts map[string]bool, ruleHost, routerName string,
},
}
+ ingressMetadata := &dynamic.KubernetesIngressMetadata{
+ Namespace: ingress.Namespace,
+ IngressName: ingress.Name,
+ }
+
+ if backend != nil && backend.Service != nil {
+ ingressMetadata.ServiceName = backend.Service.Name
+ ingressMetadata.ServicePort = portString(backend.Service.Port)
+ }
+
wwwRedirectRouter := &dynamic.Router{
EntryPoints: rt.EntryPoints,
Rule: newRule,
@@ -1685,6 +1729,11 @@ func applyFromToWwwRedirect(hosts map[string]bool, ruleHost, routerName string,
Middlewares: []string{fromToWwwRedirectMiddlewareName},
Service: rt.Service,
TLS: rt.TLS,
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: ingressMetadata,
+ },
+ },
}
conf.HTTP.Routers[routerName+"-from-to-www-redirect"] = wwwRedirectRouter
}
diff --git a/pkg/provider/kubernetes/ingress-nginx/kubernetes_test.go b/pkg/provider/kubernetes/ingress-nginx/kubernetes_test.go
index b96ee45d00..8b8d91e1b7 100644
--- a/pkg/provider/kubernetes/ingress-nginx/kubernetes_test.go
+++ b/pkg/provider/kubernetes/ingress-nginx/kubernetes_test.go
@@ -78,6 +78,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -85,6 +95,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-cross-namespace-headers-rule-0-path-0-custom-headers", "default-ingress-with-cross-namespace-headers-rule-0-path-0-retry"},
RuleSyntax: "default",
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-custom-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -92,7 +112,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-tls-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -100,7 +130,17 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-cross-namespace-headers-rule-0-path-0-tls-custom-headers", "default-ingress-with-cross-namespace-headers-rule-0-path-0-tls-retry"},
RuleSyntax: "default",
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -226,6 +266,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -233,6 +283,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-cross-namespace-headers-rule-0-path-0-custom-headers", "default-ingress-with-cross-namespace-headers-rule-0-path-0-retry"},
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-custom-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -240,7 +300,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-tls-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -248,7 +318,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-cross-namespace-headers-rule-0-path-0-tls-custom-headers", "default-ingress-with-cross-namespace-headers-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -375,12 +455,32 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0": {
EntryPoints: []string{"http"},
Rule: `Host("cross-namespace.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-custom-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -388,14 +488,34 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-custom-headers-rule-0-path-0-tls-custom-headers", "default-ingress-with-custom-headers-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-custom-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-cross-namespace-headers-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
Rule: `Host("cross-namespace.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-cross-namespace-headers-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cross-namespace-headers",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -502,6 +622,16 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Middlewares: []string{"default-ingress-with-no-annotation-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-no-annotation-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-no-annotation",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-no-annotation-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -509,6 +639,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-no-annotation-rule-0-path-0-retry"},
Service: "default-ingress-with-no-annotation-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-no-annotation",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -586,6 +726,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-basicauth-rule-0-path-0-basic-auth", "default-ingress-with-basicauth-rule-0-path-0-retry"},
Service: "default-ingress-with-basicauth-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-basicauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-basicauth-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -593,7 +743,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-basicauth-rule-0-path-0-tls-basic-auth", "default-ingress-with-basicauth-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-basicauth-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-basicauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -678,6 +838,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-forwardauth-rule-0-path-0-snippet", "default-ingress-with-forwardauth-rule-0-path-0-retry"},
Service: "default-ingress-with-forwardauth-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-forwardauth-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -685,7 +855,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-forwardauth-rule-0-path-0-tls-snippet", "default-ingress-with-forwardauth-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-forwardauth-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -797,6 +977,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-forwardauth-snippet-rule-0-path-0-snippet", "default-ingress-with-forwardauth-snippet-rule-0-path-0-retry"},
Service: "default-ingress-with-forwardauth-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-forwardauth-snippet-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -804,7 +994,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-forwardauth-snippet-rule-0-path-0-tls-snippet", "default-ingress-with-forwardauth-snippet-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-forwardauth-snippet-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -896,6 +1096,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-without-auth-rule-0-path-0-snippet", "default-ingress-without-auth-rule-0-path-0-retry"},
Service: "default-ingress-without-auth-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-auth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-without-auth-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -904,6 +1114,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-without-auth-rule-0-path-0-tls-snippet", "default-ingress-without-auth-rule-0-path-0-tls-retry"},
Service: "default-ingress-without-auth-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-auth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -979,6 +1199,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-global-auth-disabled-rule-0-path-0-retry"},
Service: "default-ingress-with-global-auth-disabled-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-global-auth-disabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-global-auth-disabled-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -987,6 +1217,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-global-auth-disabled-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-global-auth-disabled-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-global-auth-disabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1048,6 +1288,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-forwardauth-rule-0-path-0-snippet", "default-ingress-with-forwardauth-rule-0-path-0-retry"},
Service: "default-ingress-with-forwardauth-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-forwardauth-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1056,6 +1306,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-forwardauth-rule-0-path-0-tls-snippet", "default-ingress-with-forwardauth-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-forwardauth-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-forwardauth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1136,6 +1396,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-without-auth-rule-0-path-0-retry"},
Service: "default-ingress-without-auth-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-auth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-without-auth-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1144,6 +1414,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-without-auth-rule-0-path-0-tls-retry"},
Service: "default-ingress-without-auth-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-auth",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1206,6 +1486,16 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Middlewares: []string{"default-ingress-with-ssl-redirect-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-ssl-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-ssl-redirect-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -1213,6 +1503,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-ssl-redirect-rule-0-path-0-retry"},
Service: "default-ingress-with-ssl-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-without-ssl-redirect-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -1220,6 +1520,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-without-ssl-redirect-rule-0-path-0-retry"},
Service: "default-ingress-without-ssl-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-without-ssl-redirect-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1228,6 +1538,16 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Middlewares: []string{"default-ingress-without-ssl-redirect-rule-0-path-0-tls-retry"},
Service: "default-ingress-without-ssl-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-without-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-force-ssl-redirect-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -1235,6 +1555,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-force-ssl-redirect-rule-0-path-0-retry"},
Service: "default-ingress-with-force-ssl-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-force-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-force-ssl-redirect-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1242,7 +1572,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-force-ssl-redirect-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-force-ssl-redirect-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-force-ssl-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1438,6 +1778,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-sticky-rule-0-path-0-retry"},
Service: "default-ingress-with-sticky-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-sticky",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-sticky-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1445,7 +1795,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-sticky-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-sticky-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-sticky",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1527,6 +1887,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-ssl-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-ssl-whoami-tls-443",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-ssl",
+ ServiceName: "whoami-tls",
+ ServicePort: "443",
+ },
+ },
+ },
},
"default-ingress-with-proxy-ssl-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1534,7 +1904,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-ssl-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-ssl-whoami-tls-443",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-ssl",
+ ServiceName: "whoami-tls",
+ ServicePort: "443",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1606,6 +1986,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-cors-rule-0-path-0-cors", "default-ingress-with-cors-rule-0-path-0-retry"},
Service: "default-ingress-with-cors-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-cors-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1613,7 +2003,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-cors-rule-0-path-0-tls-cors", "default-ingress-with-cors-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-cors-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-cors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1702,6 +2102,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-service-upstream-rule-0-path-0-retry"},
Service: "default-ingress-with-service-upstream-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-service-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-service-upstream-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1709,7 +2119,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-service-upstream-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-service-upstream-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-service-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1775,6 +2195,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-upstream-vhost-rule-0-path-0-vhost", "default-ingress-with-upstream-vhost-rule-0-path-0-retry"},
Service: "default-ingress-with-upstream-vhost-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-upstream-vhost",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-upstream-vhost-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1782,7 +2212,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-upstream-vhost-rule-0-path-0-tls-vhost", "default-ingress-with-upstream-vhost-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-upstream-vhost-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-upstream-vhost",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1861,6 +2301,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-no-rewrite-target-rule-0-path-0-retry"},
Service: "default-ingress-with-x-forwarded-prefix-no-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-no-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-x-forwarded-prefix-no-rewrite-target-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1868,7 +2318,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-no-rewrite-target-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-x-forwarded-prefix-no-rewrite-target-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-no-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -1937,6 +2397,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-rule-0-path-0-rewrite-target", "default-ingress-with-x-forwarded-prefix-rule-0-path-0-retry"},
Service: "default-ingress-with-x-forwarded-prefix-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -1944,6 +2414,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0-rewrite-target", "default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0-retry"},
Service: "default-ingress-with-x-forwarded-prefix-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -1951,6 +2431,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0-rewrite-target", "default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0-retry"},
Service: "default-ingress-with-x-forwarded-prefix-three-groups-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-three-groups",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-x-forwarded-prefix-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1958,7 +2448,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-rule-0-path-0-tls-rewrite-target", "default-ingress-with-x-forwarded-prefix-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-x-forwarded-prefix-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1966,7 +2466,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0-tls-rewrite-target", "default-ingress-with-x-forwarded-prefix-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-x-forwarded-prefix-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -1974,7 +2484,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0-tls-rewrite-target", "default-ingress-with-x-forwarded-prefix-three-groups-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-x-forwarded-prefix-three-groups-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-x-forwarded-prefix-three-groups",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -2157,6 +2677,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-with-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -2164,7 +2694,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -2233,6 +2773,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-a-with-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-a-with-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-b-without-use-regex-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -2240,6 +2790,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-b-without-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-b-without-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-a-with-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -2247,7 +2807,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-a-with-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-a-with-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-b-without-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -2255,7 +2825,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-b-without-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-b-without-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -2360,6 +2940,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-a-with-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-a-with-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-b-without-use-regex-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -2367,6 +2957,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-b-without-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-b-without-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-a-with-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -2374,7 +2974,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-a-with-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-a-with-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-b-without-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -2382,7 +2992,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-b-without-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-b-without-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -2486,6 +3106,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-rule-0-path-0-rewrite-target", "default-ingress-with-rewrite-target-rule-0-path-0-retry"},
},
"default-ingress-with-rewrite-target-rule-0-path-0-tls": {
@@ -2493,6 +3123,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-rule-0-path-0-tls-rewrite-target", "default-ingress-with-rewrite-target-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2501,6 +3141,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target-no-regex.localhost") && (Path("/something") || PathPrefix("/something/"))`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-no-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-no-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-retry"},
},
"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-tls": {
@@ -2508,6 +3158,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target-no-regex.localhost") && (Path("/something") || PathPrefix("/something/"))`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-no-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-no-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2625,6 +3285,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target-no-regex.localhost") && Path("/original")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-no-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-no-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-rewrite-target",
"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-retry",
@@ -2635,6 +3305,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target-no-regex.localhost") && Path("/original")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-no-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-no-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-tls-rewrite-target",
"default-ingress-with-rewrite-target-no-regex-rule-0-path-0-tls-retry",
@@ -2719,6 +3399,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("shared.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-a-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-a-with-rewrite-target-rule-0-path-0-rewrite-target", "default-ingress-a-with-rewrite-target-rule-0-path-0-retry"},
},
"default-ingress-b-without-rewrite-target-rule-0-path-0": {
@@ -2726,6 +3416,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("shared.localhost") && PathRegexp("(?i)^/static")`,
RuleSyntax: "default",
Service: "default-ingress-b-without-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-b-without-rewrite-target-rule-0-path-0-retry"},
},
"default-ingress-a-with-rewrite-target-rule-0-path-0-tls": {
@@ -2733,6 +3433,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("shared.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-a-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-a-with-rewrite-target-rule-0-path-0-tls-rewrite-target", "default-ingress-a-with-rewrite-target-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2741,6 +3451,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("shared.localhost") && PathRegexp("(?i)^/static")`,
RuleSyntax: "default",
Service: "default-ingress-b-without-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-b-without-rewrite-target-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2842,6 +3562,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-a-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-a-with-rewrite-target-rule-0-path-0-rewrite-target", "default-ingress-a-with-rewrite-target-rule-0-path-0-retry"},
},
"default-ingress-b-without-rewrite-target-rule-0-path-0": {
@@ -2849,6 +3579,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("no-rewrite.localhost") && (Path("/static") || PathPrefix("/static/"))`,
RuleSyntax: "default",
Service: "default-ingress-b-without-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-b-without-rewrite-target-rule-0-path-0-retry"},
},
"default-ingress-a-with-rewrite-target-rule-0-path-0-tls": {
@@ -2856,6 +3596,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-a-with-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-a-with-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-a-with-rewrite-target-rule-0-path-0-tls-rewrite-target", "default-ingress-a-with-rewrite-target-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2864,6 +3614,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("no-rewrite.localhost") && (Path("/static") || PathPrefix("/static/"))`,
RuleSyntax: "default",
Service: "default-ingress-b-without-rewrite-target-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-b-without-rewrite-target",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-b-without-rewrite-target-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -2965,6 +3725,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-use-regex-false-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-use-regex-false",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-use-regex-false-rule-0-path-0-rewrite-target", "default-ingress-with-rewrite-target-use-regex-false-rule-0-path-0-retry"},
},
"default-ingress-with-rewrite-target-use-regex-false-rule-0-path-0-tls": {
@@ -2972,6 +3742,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("rewrite-target.localhost") && PathRegexp("(?i)^/something(/|$)(.*)")`,
RuleSyntax: "default",
Service: "default-ingress-with-rewrite-target-use-regex-false-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-rewrite-target-use-regex-false",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-rewrite-target-use-regex-false-rule-0-path-0-tls-rewrite-target", "default-ingress-with-rewrite-target-use-regex-false-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -3045,6 +3825,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("app-root.localhost") && (Path("/bar") || PathPrefix("/bar/"))`,
RuleSyntax: "default",
Service: "default-ingress-with-app-root-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-app-root",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-app-root-rule-0-path-0-app-root", "default-ingress-with-app-root-rule-0-path-0-retry"},
},
"default-ingress-with-app-root-rule-0-path-0-tls": {
@@ -3052,6 +3842,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("app-root.localhost") && (Path("/bar") || PathPrefix("/bar/"))`,
RuleSyntax: "default",
Service: "default-ingress-with-app-root-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-app-root",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-app-root-rule-0-path-0-tls-app-root", "default-ingress-with-app-root-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -3134,6 +3934,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-app-root-rule-0-path-0-retry"},
Service: "default-ingress-with-app-root-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-app-root",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-app-root-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3141,7 +3951,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-app-root-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-app-root-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-app-root",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3210,12 +4030,32 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-retry"},
Service: "default-ingress-with-www-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-www-host-rule-0-path-0-from-to-www-redirect": {
EntryPoints: []string{"http"},
Rule: `Host("host.localhost")`,
RuleSyntax: "default",
Service: "default-ingress-with-www-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-from-to-www-redirect"},
},
"default-ingress-with-www-host-rule-0-path-0-tls": {
@@ -3224,13 +4064,33 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-www-host-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-www-host-rule-0-path-0-tls-from-to-www-redirect": {
EntryPoints: []string{"https"},
Rule: `Host("host.localhost")`,
RuleSyntax: "default",
Service: "default-ingress-with-www-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-tls-from-to-www-redirect"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -3315,12 +4175,32 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-retry"},
Service: "default-ingress-with-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-host-rule-0-path-0-from-to-www-redirect": {
EntryPoints: []string{"http"},
Rule: `Host("www.host.localhost")`,
RuleSyntax: "default",
Service: "default-ingress-with-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-from-to-www-redirect"},
},
"default-ingress-with-host-rule-0-path-0-tls": {
@@ -3329,13 +4209,33 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-host-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-host-rule-0-path-0-tls-from-to-www-redirect": {
EntryPoints: []string{"https"},
Rule: `Host("www.host.localhost")`,
RuleSyntax: "default",
Service: "default-ingress-with-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-tls-from-to-www-redirect"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -3420,6 +4320,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-retry"},
Service: "default-ingress-with-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-www-host-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -3427,6 +4337,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-retry"},
Service: "default-ingress-with-www-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-host-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3434,7 +4354,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-host-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-host-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-www-host-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3442,7 +4372,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-www-host-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-www-host-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-www-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3547,6 +4487,14 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Priority: math.MinInt32,
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ ServiceName: "whoami",
+ },
+ },
+ },
},
"default-backend-tls": {
EntryPoints: []string{"https"},
@@ -3555,6 +4503,14 @@ func TestLoadIngresses(t *testing.T) {
Priority: math.MinInt32,
TLS: &dynamic.RouterTLSConfig{},
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ ServiceName: "whoami",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{},
@@ -3602,6 +4558,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-single-ip-rule-0-path-0-allowed-source-range", "default-ingress-with-whitelist-single-ip-rule-0-path-0-retry"},
Service: "default-ingress-with-whitelist-single-ip-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-single-ip",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-whitelist-single-ip-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3609,7 +4575,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-single-ip-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-whitelist-single-ip-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-whitelist-single-ip-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-single-ip",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3688,6 +4664,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-single-cidr-rule-0-path-0-allowed-source-range", "default-ingress-with-whitelist-single-cidr-rule-0-path-0-retry"},
Service: "default-ingress-with-whitelist-single-cidr-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-single-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-whitelist-single-cidr-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3695,7 +4681,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-single-cidr-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-whitelist-single-cidr-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-whitelist-single-cidr-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-single-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3774,6 +4770,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-multiple-ip-and-cidr-rule-0-path-0-allowed-source-range", "default-ingress-with-whitelist-multiple-ip-and-cidr-rule-0-path-0-retry"},
Service: "default-ingress-with-whitelist-multiple-ip-and-cidr-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-multiple-ip-and-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-whitelist-multiple-ip-and-cidr-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3781,7 +4787,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-multiple-ip-and-cidr-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-whitelist-multiple-ip-and-cidr-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-whitelist-multiple-ip-and-cidr-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-multiple-ip-and-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3860,6 +4876,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-empty-rule-0-path-0-retry"},
Service: "default-ingress-with-whitelist-empty-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-empty",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-whitelist-empty-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3867,7 +4893,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-whitelist-empty-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-whitelist-empty-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-whitelist-empty",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -3936,6 +4972,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-empty-rule-0-path-0-retry"},
Service: "default-ingress-with-allowlist-empty-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-empty",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-allowlist-empty-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -3943,7 +4989,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-empty-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-allowlist-empty-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-empty",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -4012,6 +5068,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-single-ip-rule-0-path-0-allowed-source-range", "default-ingress-with-allowlist-single-ip-rule-0-path-0-retry"},
Service: "default-ingress-with-allowlist-single-ip-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-single-ip",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-allowlist-single-ip-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -4019,7 +5085,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-single-ip-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-allowlist-single-ip-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-allowlist-single-ip-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-single-ip",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -4098,6 +5174,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-single-cidr-rule-0-path-0-allowed-source-range", "default-ingress-with-allowlist-single-cidr-rule-0-path-0-retry"},
Service: "default-ingress-with-allowlist-single-cidr-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-single-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-allowlist-single-cidr-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -4105,7 +5191,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-single-cidr-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-allowlist-single-cidr-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-allowlist-single-cidr-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-single-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -4184,6 +5280,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-multiple-ip-and-cidr-rule-0-path-0-allowed-source-range", "default-ingress-with-allowlist-multiple-ip-and-cidr-rule-0-path-0-retry"},
Service: "default-ingress-with-allowlist-multiple-ip-and-cidr-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-multiple-ip-and-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-allowlist-multiple-ip-and-cidr-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -4191,7 +5297,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-allowlist-multiple-ip-and-cidr-rule-0-path-0-tls-allowed-source-range", "default-ingress-with-allowlist-multiple-ip-and-cidr-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-allowlist-multiple-ip-and-cidr-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-allowlist-multiple-ip-and-cidr",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -4272,6 +5388,14 @@ func TestLoadIngresses(t *testing.T) {
Service: "default-ingress-with-access-log-enabled-whoami-80",
Observability: &dynamic.RouterObservabilityConfig{
AccessLogs: ptr.To(true),
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-enabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
},
},
"default-ingress-with-access-log-enabled-rule-0-path-0-tls": {
@@ -4283,6 +5407,14 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Observability: &dynamic.RouterObservabilityConfig{
AccessLogs: ptr.To(true),
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-enabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
},
},
"default-ingress-with-access-log-disabled-rule-0-path-0": {
@@ -4293,6 +5425,14 @@ func TestLoadIngresses(t *testing.T) {
Service: "default-ingress-with-access-log-disabled-whoami-80",
Observability: &dynamic.RouterObservabilityConfig{
AccessLogs: ptr.To(false),
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-disabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
},
},
"default-ingress-with-access-log-disabled-rule-0-path-0-tls": {
@@ -4304,6 +5444,14 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Observability: &dynamic.RouterObservabilityConfig{
AccessLogs: ptr.To(false),
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-disabled",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
},
},
"default-ingress-with-access-log-default-rule-0-path-0": {
@@ -4312,6 +5460,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-access-log-default-rule-0-path-0-retry"},
Service: "default-ingress-with-access-log-default-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-default",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-access-log-default-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -4320,6 +5478,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-access-log-default-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-access-log-default-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-access-log-default",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -4423,6 +5591,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-permanent-redirect-rule-0-path-0-tls": {
@@ -4430,6 +5608,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4513,6 +5701,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-permanent-redirect-rule-0-path-0-tls": {
@@ -4520,6 +5718,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4603,6 +5811,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-permanent-redirect-rule-0-path-0-tls": {
@@ -4610,6 +5828,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("permanent-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-permanent-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-permanent-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-permanent-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-permanent-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4693,6 +5921,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-redirect-rule-0-path-0-redirect", "default-ingress-with-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-redirect-rule-0-path-0-tls": {
@@ -4700,6 +5938,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4783,6 +6031,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-temporal-redirect-rule-0-path-0-tls": {
@@ -4790,6 +6048,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4873,6 +6141,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-temporal-redirect-rule-0-path-0-tls": {
@@ -4880,6 +6158,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -4963,6 +6251,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-retry"},
},
"default-ingress-with-temporal-redirect-rule-0-path-0-tls": {
@@ -4970,6 +6268,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("temporal-redirect.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-temporal-redirect-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-temporal-redirect",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-temporal-redirect-rule-0-path-0-tls-redirect", "default-ingress-with-temporal-redirect-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -5054,6 +6362,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-timeout-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -5061,7 +6379,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5126,6 +6454,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-timeout-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -5133,7 +6471,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5198,6 +6546,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-timeout-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -5205,7 +6563,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-timeout-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-timeout-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5271,6 +6639,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-secret-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-auth-tls-secret-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-secret",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
TLS: &dynamic.RouterTLSConfig{
Options: "default-ingress-with-auth-tls-secret-default-ca-secret",
},
@@ -5281,6 +6659,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-secret-rule-0-path-0-retry"},
Service: "default-ingress-with-auth-tls-secret-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-secret",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5383,6 +6771,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-verify-client-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-auth-tls-verify-client-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-verify-client",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
TLS: &dynamic.RouterTLSConfig{
Options: "default-ingress-with-auth-tls-verify-client-default-ca-secret",
},
@@ -5393,6 +6791,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-verify-client-rule-0-path-0-retry"},
Service: "default-ingress-with-auth-tls-verify-client-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-verify-client",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5493,6 +6901,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-and-default-backend-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors-and-default-backend",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-custom-http-errors-and-default-backend-rule-0-path-0-custom-http-errors", "default-ingress-with-custom-http-errors-and-default-backend-rule-0-path-0-retry"},
},
"default-ingress-with-custom-http-errors-and-default-backend-rule-0-path-0-tls": {
@@ -5500,6 +6918,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-and-default-backend-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors-and-default-backend",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-custom-http-errors-and-default-backend-rule-0-path-0-tls-custom-http-errors", "default-ingress-with-custom-http-errors-and-default-backend-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -5624,6 +7052,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-custom-http-errors-rule-0-path-0-custom-http-errors",
"default-ingress-with-custom-http-errors-rule-0-path-0-retry",
@@ -5634,6 +7072,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-custom-http-errors-rule-0-path-0-tls-custom-http-errors",
"default-ingress-with-custom-http-errors-rule-0-path-0-tls-retry",
@@ -5646,6 +7094,14 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Priority: math.MinInt32,
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ ServiceName: "whoami-b",
+ },
+ },
+ },
},
"default-backend-tls": {
EntryPoints: []string{"https"},
@@ -5654,6 +7110,14 @@ func TestLoadIngresses(t *testing.T) {
Priority: math.MinInt32,
TLS: &dynamic.RouterTLSConfig{},
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ ServiceName: "whoami-b",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -5762,6 +7226,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-custom-http-errors-rule-0-path-0-retry"},
},
"default-ingress-with-custom-http-errors-rule-0-path-0-tls": {
@@ -5769,6 +7243,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-custom-http-errors-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-custom-http-errors",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-custom-http-errors-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -5834,6 +7318,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-default-backend-annotation-empty-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-default-backend-annotation",
+ ServiceName: "empty",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-default-backend-annotation-rule-0-path-0-retry"},
},
"default-ingress-with-default-backend-annotation-rule-0-path-0-tls": {
@@ -5841,6 +7335,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-default-backend-annotation-empty-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-default-backend-annotation",
+ ServiceName: "empty",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-default-backend-annotation-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -5911,6 +7415,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-body-size-rule-0-path-0-buffering", "default-ingress-with-proxy-body-size-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-body-size-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-body-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-body-size-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -5918,7 +7432,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-body-size-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-body-size-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-body-size-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-body-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6003,6 +7527,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-client-body-buffer-size-rule-0-path-0-buffering", "default-ingress-with-client-body-buffer-size-rule-0-path-0-retry"},
Service: "default-ingress-with-client-body-buffer-size-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-client-body-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-client-body-buffer-size-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6010,7 +7544,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-client-body-buffer-size-rule-0-path-0-tls-buffering", "default-ingress-with-client-body-buffer-size-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-client-body-buffer-size-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-client-body-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6095,6 +7639,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-body-size-and-client-body-buffer-size-rule-0-path-0-buffering", "default-ingress-with-proxy-body-size-and-client-body-buffer-size-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-body-size-and-client-body-buffer-size-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-body-size-and-client-body-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-body-size-and-client-body-buffer-size-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6102,7 +7656,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-body-size-and-client-body-buffer-size-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-body-size-and-client-body-buffer-size-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-body-size-and-client-body-buffer-size-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-body-size-and-client-body-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6187,6 +7751,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffer-size-rule-0-path-0-buffering", "default-ingress-with-proxy-buffer-size-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-buffer-size-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-buffer-size-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6194,7 +7768,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffer-size-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-buffer-size-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-buffer-size-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffer-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6281,6 +7865,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffers-number-rule-0-path-0-buffering", "default-ingress-with-proxy-buffers-number-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-buffers-number-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffers-number",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-buffers-number-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6288,7 +7882,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffers-number-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-buffers-number-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-buffers-number-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffers-number",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6375,6 +7979,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffer-size-and-number-rule-0-path-0-buffering", "default-ingress-with-proxy-buffer-size-and-number-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-buffer-size-and-number-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffer-size-and-number",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-buffer-size-and-number-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6382,7 +7996,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-buffer-size-and-number-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-buffer-size-and-number-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-buffer-size-and-number-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-buffer-size-and-number",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6469,6 +8093,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-max-temp-file-size-rule-0-path-0-buffering", "default-ingress-with-proxy-max-temp-file-size-rule-0-path-0-retry"},
Service: "default-ingress-with-proxy-max-temp-file-size-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-max-temp-file-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-max-temp-file-size-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -6476,7 +8110,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-proxy-max-temp-file-size-rule-0-path-0-tls-buffering", "default-ingress-with-proxy-max-temp-file-size-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-proxy-max-temp-file-size-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-max-temp-file-size",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -6563,6 +8207,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-server-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-server-snippet-rule-0-path-0-snippet",
"default-ingress-with-server-snippet-rule-0-path-0-retry",
@@ -6573,6 +8227,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-server-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-server-snippet-rule-0-path-0-tls-snippet",
"default-ingress-with-server-snippet-rule-0-path-0-tls-retry",
@@ -6652,6 +8316,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-configuration-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-configuration-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-configuration-snippet-rule-0-path-0-snippet",
"default-ingress-with-configuration-snippet-rule-0-path-0-retry",
@@ -6662,6 +8336,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-configuration-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-configuration-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-configuration-snippet-rule-0-path-0-tls-snippet",
"default-ingress-with-configuration-snippet-rule-0-path-0-tls-retry",
@@ -6741,6 +8425,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-both-snippets-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-both-snippets",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-both-snippets-rule-0-path-0-snippet",
"default-ingress-with-both-snippets-rule-0-path-0-retry",
@@ -6751,6 +8445,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-both-snippets-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-both-snippets",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-both-snippets-rule-0-path-0-tls-snippet",
"default-ingress-with-both-snippets-rule-0-path-0-tls-retry",
@@ -6898,6 +8602,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-server-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-server-snippet-rule-0-path-0-snippet", "default-ingress-with-server-snippet-rule-0-path-0-retry"},
},
"default-ingress-with-server-snippet-rule-0-path-0-tls": {
@@ -6905,6 +8619,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-server-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-server-snippet-rule-0-path-0-tls-snippet", "default-ingress-with-server-snippet-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -6981,6 +8705,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-configuration-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-configuration-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-configuration-snippet-rule-0-path-0-snippet", "default-ingress-with-configuration-snippet-rule-0-path-0-retry"},
},
"default-ingress-with-configuration-snippet-rule-0-path-0-tls": {
@@ -6988,6 +8722,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-configuration-snippet-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-configuration-snippet",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-configuration-snippet-rule-0-path-0-tls-snippet", "default-ingress-with-configuration-snippet-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7064,6 +8808,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-both-snippets-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-both-snippets",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-both-snippets-rule-0-path-0-snippet", "default-ingress-with-both-snippets-rule-0-path-0-retry"},
},
"default-ingress-with-both-snippets-rule-0-path-0-tls": {
@@ -7071,6 +8825,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("snippet.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-both-snippets-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-both-snippets",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-both-snippets-rule-0-path-0-tls-snippet", "default-ingress-with-both-snippets-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7150,6 +8914,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-pass-certificate-to-upstream-rule-0-path-0-tls-pass-certificate-to-upstream", "default-ingress-with-auth-tls-pass-certificate-to-upstream-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-auth-tls-pass-certificate-to-upstream-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-pass-certificate-to-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
TLS: &dynamic.RouterTLSConfig{
Options: "default-ingress-with-auth-tls-pass-certificate-to-upstream-default-ca-secret",
},
@@ -7160,6 +8934,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-auth-tls-pass-certificate-to-upstream-rule-0-path-0-retry"},
Service: "default-ingress-with-auth-tls-pass-certificate-to-upstream-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-auth-tls-pass-certificate-to-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -7267,6 +9051,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-next-upstream-off-rule-0-path-0": {
@@ -7274,12 +9068,32 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-off-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-off",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-proxy-next-upstream-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7288,7 +9102,17 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-off-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-off",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -7378,6 +9202,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-tries-unlimited-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-tries-unlimited",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-tries-unlimited-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-next-upstream-tries-rule-0-path-0": {
@@ -7385,6 +9219,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-tries-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-tries",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-tries-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-next-upstream-tries-unlimited-rule-0-path-0-tls": {
@@ -7392,6 +9236,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-tries-unlimited-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-tries-unlimited",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-tries-unlimited-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7400,6 +9254,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-tries-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-tries",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-tries-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7497,6 +9361,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-timeout-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-timeout-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-next-upstream-timeout-rule-0-path-0-tls": {
@@ -7504,6 +9378,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-next-upstream-timeout-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-next-upstream-timeout",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-next-upstream-timeout-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7572,6 +9456,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-server-alias-rule-0-path-0-retry"},
Service: "default-ingress-with-server-alias-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-alias",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-server-alias-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -7579,7 +9473,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-server-alias-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-server-alias-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-server-alias",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -7649,6 +9553,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-primary-ingress-rule-0-path-0-retry"},
Service: "default-primary-ingress-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "primary-ingress",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-alias-ingress-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -7656,6 +9570,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-alias-ingress-rule-0-path-0-retry"},
Service: "default-alias-ingress-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "alias-ingress",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-primary-ingress-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -7663,7 +9587,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-primary-ingress-rule-0-path-0-tls-retry"},
Service: "default-primary-ingress-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "primary-ingress",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-alias-ingress-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -7671,7 +9605,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-alias-ingress-rule-0-path-0-tls-retry"},
Service: "default-alias-ingress-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "alias-ingress",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -7767,6 +9711,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("proxy-http-version.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-http-version-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-http-version",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-http-version-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-http-version-rule-0-path-0-tls": {
@@ -7774,6 +9728,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("proxy-http-version.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-http-version-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-http-version",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-http-version-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7840,6 +9804,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("proxy-http-version-unsupported.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-http-version-unsupported-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-http-version-unsupported",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-http-version-unsupported-rule-0-path-0-retry"},
},
"default-ingress-with-proxy-http-version-unsupported-rule-0-path-0-tls": {
@@ -7847,6 +9821,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("proxy-http-version-unsupported.localhost") && Path("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-proxy-http-version-unsupported-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-proxy-http-version-unsupported",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-proxy-http-version-unsupported-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7912,6 +9896,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-upstream-hash-by-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-upstream-hash-by",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-upstream-hash-by-rule-0-path-0-retry"},
},
"default-ingress-with-upstream-hash-by-rule-0-path-0-tls": {
@@ -7919,6 +9913,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("whoami.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-upstream-hash-by-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-upstream-hash-by",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-upstream-hash-by-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -7985,6 +9989,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-rule-0-path-0-retry"},
},
"default-ingress-with-canary-rule-0-path-0-tls": {
@@ -7992,6 +10006,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8093,6 +10117,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-and-sticky-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-and-sticky",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-and-sticky-rule-0-path-0-retry"},
},
"default-ingress-with-canary-and-sticky-rule-0-path-0-tls": {
@@ -8100,6 +10134,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-and-sticky-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-and-sticky",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-and-sticky-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8237,6 +10281,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-weight-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-weight-rule-0-path-0-retry"},
},
"default-ingress-with-canary-weight-rule-0-path-0-tls": {
@@ -8244,6 +10298,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-weight-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-weight-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8345,6 +10409,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-header-rule-0-path-0-canary": {
@@ -8352,6 +10426,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-by-header-rule-0-path-0-tls": {
@@ -8359,6 +10443,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8367,6 +10461,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-rule-0-path-0-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8478,6 +10582,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-value-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-value",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-value-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-header-value-rule-0-path-0-canary": {
@@ -8485,6 +10599,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "bar"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-value-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-value",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-value-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-by-header-value-rule-0-path-0-tls": {
@@ -8492,6 +10616,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-value-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-value",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-value-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8500,6 +10634,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "bar"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-value-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-value",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-value-rule-0-path-0-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8611,6 +10755,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-pattern-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-pattern",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-pattern-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-header-pattern-rule-0-path-0-canary": {
@@ -8618,6 +10772,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (HeaderRegexp("Foo", "bar(.*)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-pattern-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-pattern",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-pattern-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-by-header-pattern-rule-0-path-0-tls": {
@@ -8625,6 +10789,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-pattern-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-pattern",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-pattern-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8633,6 +10807,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (HeaderRegexp("Foo", "bar(.*)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-pattern-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-pattern",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-pattern-rule-0-path-0-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8744,6 +10928,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-misconfigured-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-misconfigured",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-misconfigured-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-header-misconfigured-rule-0-path-0-tls": {
@@ -8751,6 +10945,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-misconfigured-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-misconfigured",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-misconfigured-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8852,6 +11056,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-cookie-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-cookie",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-cookie-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-cookie-rule-0-path-0-canary": {
@@ -8859,6 +11073,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (HeaderRegexp("Cookie", "(^|;\\s*)foo=always(;|$)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-cookie-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-cookie",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-cookie-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-by-cookie-rule-0-path-0-tls": {
@@ -8866,6 +11090,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-cookie-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-cookie",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-cookie-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8874,6 +11108,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (HeaderRegexp("Cookie", "(^|;\\s*)foo=always(;|$)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-cookie-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-cookie",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-cookie-rule-0-path-0-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -8985,6 +11229,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-retry"},
},
"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-canary": {
@@ -8992,6 +11246,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always") || (HeaderRegexp("Cookie", "(^|;\\s*)foo=always(;|$)") && !Header("Foo", "never")))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-non-canary": {
@@ -8999,6 +11263,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "never") || HeaderRegexp("Cookie", "(^|;\\s*)foo=never(;|$)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-non-canary-retry"},
},
"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-tls": {
@@ -9006,6 +11280,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -9014,6 +11298,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always") || (HeaderRegexp("Cookie", "(^|;\\s*)foo=always(;|$)") && !Header("Foo", "never")))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -9022,6 +11316,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "never") || HeaderRegexp("Cookie", "(^|;\\s*)foo=never(;|$)"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-by-header-and-cookie-and-weight-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-by-header-and-cookie-and-weight",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-by-header-and-cookie-and-weight-rule-0-path-0-non-canary-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -9143,6 +11447,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-rule-0-path-0-app-root",
"default-ingress-with-canary-middlewares-rule-0-path-0-retry",
@@ -9153,6 +11467,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-rule-0-path-0-canary-app-root",
"default-ingress-with-canary-middlewares-rule-0-path-0-canary-retry",
@@ -9163,6 +11487,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-rule-0-path-0-tls-app-root",
"default-ingress-with-canary-middlewares-rule-0-path-0-tls-retry",
@@ -9174,6 +11508,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-rule-0-path-0-canary-tls-app-root",
"default-ingress-with-canary-middlewares-rule-0-path-0-canary-tls-retry",
@@ -9312,6 +11656,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-non-matching-canary-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-non-matching-canary",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-non-matching-canary-rule-0-path-0-retry"},
},
"default-ingress-with-non-matching-canary-rule-0-path-0-tls": {
@@ -9319,6 +11673,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-non-matching-canary-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-non-matching-canary",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-non-matching-canary-rule-0-path-0-tls-retry"},
TLS: &dynamic.RouterTLSConfig{},
},
@@ -9389,6 +11753,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-and-tls-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares-and-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-app-root", "default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-retry"},
},
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-canary": {
@@ -9396,6 +11770,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-and-tls-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares-and-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-canary-app-root", "default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-canary-retry"},
},
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-tls": {
@@ -9403,6 +11787,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `Host("production.localhost") && PathPrefix("/")`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-and-tls-whoami-80-wrr",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares-and-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-tls-app-root",
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-tls-retry",
@@ -9414,6 +11808,16 @@ func TestLoadIngresses(t *testing.T) {
Rule: `(Host("production.localhost") && PathPrefix("/")) && (Header("Foo", "always"))`,
RuleSyntax: "default",
Service: "default-ingress-with-canary-middlewares-and-tls-whoami-80-canary",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-canary-middlewares-and-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
Middlewares: []string{
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-canary-tls-app-root",
"default-ingress-with-canary-middlewares-and-tls-rule-0-path-0-canary-tls-retry",
@@ -9548,6 +11952,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rps-rule-0-path-0-limit-rps", "default-ingress-with-limit-rps-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-rps-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rps",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-rps-zero-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -9555,6 +11969,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rps-zero-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-rps-zero-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rps-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-rps-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9562,7 +11986,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rps-rule-0-path-0-tls-limit-rps", "default-ingress-with-limit-rps-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-rps-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rps",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-limit-rps-zero-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9570,7 +12004,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rps-zero-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-rps-zero-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rps-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -9681,6 +12125,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rpm-rule-0-path-0-limit-rpm", "default-ingress-with-limit-rpm-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-rpm-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rpm",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-rpm-zero-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -9688,6 +12142,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rpm-zero-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-rpm-zero-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rpm-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-rpm-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9695,7 +12159,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rpm-rule-0-path-0-tls-limit-rpm", "default-ingress-with-limit-rpm-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-rpm-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rpm",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
"default-ingress-with-limit-rpm-zero-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9703,7 +12177,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-rpm-zero-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-rpm-zero-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-rpm-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -9811,6 +12295,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-burst-multiplier-rule-0-path-0-limit-rps", "default-ingress-with-limit-burst-multiplier-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-burst-multiplier-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-burst-multiplier",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-burst-multiplier-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9819,6 +12313,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-limit-burst-multiplier-rule-0-path-0-tls-limit-rps", "default-ingress-with-limit-burst-multiplier-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-burst-multiplier-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-burst-multiplier",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0": {
EntryPoints: []string{"http"},
@@ -9826,6 +12330,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0-limit-rps", "default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0-retry"},
Service: "default-ingress-with-limit-burst-multiplier-zero-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-burst-multiplier-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9834,6 +12348,16 @@ func TestLoadIngresses(t *testing.T) {
Middlewares: []string{"default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0-tls-limit-rps", "default-ingress-with-limit-burst-multiplier-zero-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-limit-burst-multiplier-zero-whoami-80",
TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-limit-burst-multiplier-zero",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -9928,6 +12452,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-use-regex-rule-0-path-0-retry"},
Service: "default-ingress-with-use-regex-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-use-regex-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -9935,7 +12469,17 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-use-regex-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-use-regex-whoami-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-use-regex",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -9996,6 +12540,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-wildcard-host-rule-0-path-0-retry"},
Service: "default-ingress-with-wildcard-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-wildcard-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-wildcard-host-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -10004,6 +12558,16 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Middlewares: []string{"default-ingress-with-wildcard-host-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-wildcard-host-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-wildcard-host",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
@@ -10069,6 +12633,16 @@ func TestLoadIngresses(t *testing.T) {
RuleSyntax: "default",
Middlewares: []string{"default-ingress-with-wildcard-host-tls-rule-0-path-0-retry"},
Service: "default-ingress-with-wildcard-host-tls-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-wildcard-host-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
"default-ingress-with-wildcard-host-tls-rule-0-path-0-tls": {
EntryPoints: []string{"https"},
@@ -10077,6 +12651,16 @@ func TestLoadIngresses(t *testing.T) {
TLS: &dynamic.RouterTLSConfig{},
Middlewares: []string{"default-ingress-with-wildcard-host-tls-rule-0-path-0-tls-retry"},
Service: "default-ingress-with-wildcard-host-tls-whoami-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "ingress-with-wildcard-host-tls",
+ ServiceName: "whoami",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Middlewares: map[string]*dynamic.Middleware{
diff --git a/pkg/provider/kubernetes/ingress/kubernetes.go b/pkg/provider/kubernetes/ingress/kubernetes.go
index 0a595000cb..7d670ce22f 100644
--- a/pkg/provider/kubernetes/ingress/kubernetes.go
+++ b/pkg/provider/kubernetes/ingress/kubernetes.go
@@ -306,13 +306,29 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl
RuleSyntax: "default",
Priority: math.MinInt32,
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: ingress.Namespace,
+ IngressName: ingress.Name,
+ ServiceName: ingress.Spec.DefaultBackend.Service.Name,
+ ServicePort: portString(ingress.Spec.DefaultBackend.Service.Port),
+ },
+ },
+ },
}
if rtConfig != nil && rtConfig.Router != nil {
rt.EntryPoints = rtConfig.Router.EntryPoints
rt.Middlewares = rtConfig.Router.Middlewares
rt.TLS = rtConfig.Router.TLS
- rt.Observability = rtConfig.Router.Observability
+
+ if rtConfig.Router.Observability != nil {
+ rt.Observability.AccessLogs = rtConfig.Router.Observability.AccessLogs
+ rt.Observability.Metrics = rtConfig.Router.Observability.Metrics
+ rt.Observability.Tracing = rtConfig.Router.Observability.Tracing
+ rt.Observability.TraceVerbosity = rtConfig.Router.Observability.TraceVerbosity
+ }
}
p.applyRouterTransform(ctxIngress, rt, ingress)
@@ -358,16 +374,10 @@ func (p *Provider) loadConfigurationFromIngresses(ctx context.Context, client Cl
continue
}
- portString := pa.Backend.Service.Port.Name
-
- if len(pa.Backend.Service.Port.Name) == 0 {
- portString = strconv.Itoa(int(pa.Backend.Service.Port.Number))
- }
-
- serviceName := provider.Normalize(ingress.Namespace + "-" + pa.Backend.Service.Name + "-" + portString)
+ serviceName := provider.Normalize(ingress.Namespace + "-" + pa.Backend.Service.Name + "-" + portString(pa.Backend.Service.Port))
conf.HTTP.Services[serviceName] = service
- rt := p.loadRouter(rule, pa, rtConfig, serviceName)
+ rt := p.loadRouter(ingress, rule, pa, rtConfig, serviceName)
p.applyRouterTransform(ctxIngress, rt, ingress)
@@ -689,9 +699,19 @@ func (p *Provider) loadService(client Client, namespace string, backend netv1.In
return svc, nil
}
-func (p *Provider) loadRouter(rule netv1.IngressRule, pa netv1.HTTPIngressPath, rtConfig *RouterConfig, serviceName string) *dynamic.Router {
+func (p *Provider) loadRouter(ingress *netv1.Ingress, rule netv1.IngressRule, pa netv1.HTTPIngressPath, rtConfig *RouterConfig, serviceName string) *dynamic.Router {
rt := &dynamic.Router{
Service: serviceName,
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: ingress.Namespace,
+ IngressName: ingress.Name,
+ ServiceName: pa.Backend.Service.Name,
+ ServicePort: portString(pa.Backend.Service.Port),
+ },
+ },
+ },
}
if rtConfig != nil && rtConfig.Router != nil {
@@ -700,7 +720,13 @@ func (p *Provider) loadRouter(rule netv1.IngressRule, pa netv1.HTTPIngressPath,
rt.EntryPoints = rtConfig.Router.EntryPoints
rt.Middlewares = rtConfig.Router.Middlewares
rt.TLS = rtConfig.Router.TLS
- rt.Observability = rtConfig.Router.Observability
+
+ if rtConfig.Router.Observability != nil {
+ rt.Observability.AccessLogs = rtConfig.Router.Observability.AccessLogs
+ rt.Observability.Metrics = rtConfig.Router.Observability.Metrics
+ rt.Observability.Tracing = rtConfig.Router.Observability.Tracing
+ rt.Observability.TraceVerbosity = rtConfig.Router.Observability.TraceVerbosity
+ }
}
var rules []string
@@ -928,3 +954,10 @@ func throttleEvents(ctx context.Context, throttleDuration time.Duration, pool *s
return eventsChanBuffered
}
+
+func portString(port netv1.ServiceBackendPort) string {
+ if port.Name == "" {
+ return strconv.Itoa(int(port.Number))
+ }
+ return port.Name
+}
diff --git a/pkg/provider/kubernetes/ingress/kubernetes_test.go b/pkg/provider/kubernetes/ingress/kubernetes_test.go
index 4a4f2e9698..7be35de784 100644
--- a/pkg/provider/kubernetes/ingress/kubernetes_test.go
+++ b/pkg/provider/kubernetes/ingress/kubernetes_test.go
@@ -73,6 +73,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -129,6 +138,13 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
Tracing: pointer(true),
Metrics: pointer(true),
TraceVerbosity: otypes.MinimalVerbosity,
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
},
},
},
@@ -172,10 +188,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-foo": {
Rule: `PathPrefix("/foo")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -209,10 +243,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar-bar-41871576e140babe40bd": {
Rule: `Host("*.bar") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-bar-bar-605945111a3c9f84dc65": {
Rule: `Host("bar") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -246,10 +298,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-foo-bar-930f0e8b221e60bc7ab7": {
Rule: `PathPrefix("/foo/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-foo-bar-207cc2245cb31ba18e29": {
Rule: `PathPrefix("/foo-bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -283,10 +353,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-foo": {
Rule: `PathPrefix("/foo")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -320,6 +408,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -353,6 +450,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-example-com": {
Rule: `Host("example.com")`,
Service: "testing-example-com-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "example-com",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -383,10 +489,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-traefik-tchouk-foo": {
Rule: `Host("traefik.tchouk") && PathPrefix("/foo")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -420,10 +544,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-traefik-courgette-carotte": {
Rule: `Host("traefik.courgette") && PathPrefix("/carotte")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -457,10 +599,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-traefik-courgette-carotte": {
Rule: `Host("traefik.courgette") && PathPrefix("/carotte")`,
Service: "testing-service2-8082",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service2",
+ ServicePort: "8082",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -512,6 +672,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -591,6 +760,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
RuleSyntax: "default",
Service: "default-backend",
Priority: math.MinInt32,
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -624,6 +802,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -657,6 +844,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -690,6 +886,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -723,10 +928,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
"testing-traefik-tchouk-foo": {
Rule: `Host("traefik.tchouk") && PathPrefix("/foo")`,
Service: "testing-service1-carotte",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "carotte",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -777,6 +1000,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -810,10 +1042,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
"toto-toto-traefik-tchouk-bar": {
Rule: `Host("toto.traefik.tchouk") && PathPrefix("/bar")`,
Service: "toto-service1-tchouk",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "toto",
+ ServiceName: "service1",
+ ServicePort: "tchouk",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -884,6 +1134,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-traefik-port-port": {
Rule: `Host("traefik.port") && PathPrefix("/port")`,
Service: "testing-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -914,7 +1173,16 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-example-com": {
Rule: `Host("example.com")`,
Service: "testing-example-com-80",
- TLS: &dynamic.RouterTLSConfig{},
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "example-com",
+ ServicePort: "80",
+ },
+ },
+ },
+ TLS: &dynamic.RouterTLSConfig{},
},
},
Services: map[string]*dynamic.Service{
@@ -955,6 +1223,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-443",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "443",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -988,6 +1265,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-8443",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8443",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1022,6 +1308,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-8443",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8443",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1057,6 +1352,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
RuleSyntax: "default",
Service: "default-backend",
Priority: math.MinInt32,
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1090,6 +1394,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1163,6 +1476,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-foobar-com-bar": {
Rule: `Host("*.foobar.com") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1196,6 +1518,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-foobar-com-bar": {
Rule: `HostRegexp("{subdomain:[a-zA-Z0-9-]+}.foobar.com") && PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1228,10 +1559,28 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-foo": {
Rule: `PathPrefix("/foo")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1263,6 +1612,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-foo": {
Rule: `PathPrefix("/foo")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1293,6 +1651,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1323,6 +1690,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `Path("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1353,6 +1729,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `Path("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1383,6 +1768,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `Path("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1413,6 +1807,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1446,6 +1849,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1479,6 +1891,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1509,6 +1930,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1565,6 +1995,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-foobar",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "foobar",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1607,6 +2046,16 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
RuleSyntax: "default",
Priority: math.MinInt32,
Service: "default-backend",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ IngressName: "defaultbackend",
+ ServiceName: "defaultservice",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1637,6 +2086,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1678,6 +2136,15 @@ func TestLoadConfigurationFromIngresses(t *testing.T) {
"testing-bar": {
Rule: `(Path("/bar") || PathPrefix("/bar/"))`,
Service: "testing-service1-80",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "80",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1752,6 +2219,15 @@ func TestLoadConfigurationFromIngressesWithExternalNameServices(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1782,6 +2258,16 @@ func TestLoadConfigurationFromIngressesWithExternalNameServices(t *testing.T) {
"testing-example-com-bar": {
Rule: `PathPrefix("/bar")`,
Service: "testing-service-bar-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ IngressName: "example.com",
+ ServiceName: "service-bar",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1813,6 +2299,16 @@ func TestLoadConfigurationFromIngressesWithExternalNameServices(t *testing.T) {
"testing-example-com-foo": {
Rule: `PathPrefix("/foo")`,
Service: "testing-service-foo-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ IngressName: "example.com",
+ ServiceName: "service-foo",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1866,6 +2362,15 @@ func TestLoadConfigurationFromIngressesWithNativeLB(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -1916,6 +2421,15 @@ func TestLoadConfigurationFromIngressesWithNodePortLB(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -2154,6 +2668,15 @@ func TestLoadConfigurationFromIngressesWithNativeLBByDefault(t *testing.T) {
"testing-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "testing-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "testing",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -2182,6 +2705,16 @@ func TestLoadConfigurationFromIngressesWithNativeLBByDefault(t *testing.T) {
"default-global-native-lb-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "default-service1-8080",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "global-native-lb",
+ ServiceName: "service1",
+ ServicePort: "8080",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
@@ -2210,6 +2743,16 @@ func TestLoadConfigurationFromIngressesWithNativeLBByDefault(t *testing.T) {
"default-global-native-lb-traefik-tchouk-bar": {
Rule: `Host("traefik.tchouk") && PathPrefix("/bar")`,
Service: "default-native-disabled-svc-web",
+ Observability: &dynamic.RouterObservabilityConfig{
+ Metadata: &dynamic.ObservabilityMetadata{
+ Ingress: &dynamic.KubernetesIngressMetadata{
+ Namespace: "default",
+ IngressName: "global-native-lb",
+ ServiceName: "native-disabled-svc",
+ ServicePort: "web",
+ },
+ },
+ },
},
},
Services: map[string]*dynamic.Service{
diff --git a/pkg/server/middleware/observability.go b/pkg/server/middleware/observability.go
index 0ffe34165a..41a0ffe677 100644
--- a/pkg/server/middleware/observability.go
+++ b/pkg/server/middleware/observability.go
@@ -132,6 +132,7 @@ func (o *ObservabilityMgr) observabilityContextHandler(next http.Handler, intern
SemConvMetricsEnabled: o.shouldMeterSemConv(internal, config),
TracingEnabled: o.shouldTrace(internal, config, otypes.MinimalVerbosity),
DetailedTracingEnabled: o.shouldTrace(internal, config, otypes.DetailedVerbosity),
+ Metadata: config.Metadata,
})
}