2019-07-10 07:26:04 +00:00
package dynamic
2019-07-19 09:52:04 +00:00
import (
"reflect"
2022-12-09 08:58:05 +00:00
"time"
2019-07-19 09:52:04 +00:00
2022-12-09 08:58:05 +00:00
ptypes "github.com/traefik/paerser/types"
2023-02-03 14:24:05 +00:00
traefiktls "github.com/traefik/traefik/v3/pkg/tls"
"github.com/traefik/traefik/v3/pkg/types"
2019-07-19 09:52:04 +00:00
)
2019-07-10 07:26:04 +00:00
// +k8s:deepcopy-gen=true
// TCPConfiguration contains all the TCP configuration parameters.
type TCPConfiguration struct {
2022-12-09 08:58:05 +00:00
Routers map [ string ] * TCPRouter ` json:"routers,omitempty" toml:"routers,omitempty" yaml:"routers,omitempty" export:"true" `
Services map [ string ] * TCPService ` json:"services,omitempty" toml:"services,omitempty" yaml:"services,omitempty" export:"true" `
Middlewares map [ string ] * TCPMiddleware ` json:"middlewares,omitempty" toml:"middlewares,omitempty" yaml:"middlewares,omitempty" export:"true" `
ServersTransports map [ string ] * TCPServersTransport ` json:"serversTransports,omitempty" toml:"serversTransports,omitempty" yaml:"serversTransports,omitempty" label:"-" export:"true" `
2019-07-10 07:26:04 +00:00
}
// +k8s:deepcopy-gen=true
// TCPService holds a tcp service configuration (can only be of one type at the same time).
type TCPService struct {
2020-12-03 14:52:05 +00:00
LoadBalancer * TCPServersLoadBalancer ` json:"loadBalancer,omitempty" toml:"loadBalancer,omitempty" yaml:"loadBalancer,omitempty" export:"true" `
Weighted * TCPWeightedRoundRobin ` json:"weighted,omitempty" toml:"weighted,omitempty" yaml:"weighted,omitempty" label:"-" export:"true" `
2019-09-13 18:00:06 +00:00
}
// +k8s:deepcopy-gen=true
// TCPWeightedRoundRobin is a weighted round robin tcp load-balancer of services.
type TCPWeightedRoundRobin struct {
2020-12-03 14:52:05 +00:00
Services [ ] TCPWRRService ` json:"services,omitempty" toml:"services,omitempty" yaml:"services,omitempty" export:"true" `
2019-09-13 18:00:06 +00:00
}
// +k8s:deepcopy-gen=true
// TCPWRRService is a reference to a tcp service load-balanced with weighted round robin.
type TCPWRRService struct {
2020-12-03 14:52:05 +00:00
Name string ` json:"name,omitempty" toml:"name,omitempty" yaml:"name,omitempty" export:"true" `
Weight * int ` json:"weight,omitempty" toml:"weight,omitempty" yaml:"weight,omitempty" export:"true" `
2019-09-13 18:00:06 +00:00
}
// SetDefaults Default values for a TCPWRRService.
func ( w * TCPWRRService ) SetDefaults ( ) {
defaultWeight := 1
w . Weight = & defaultWeight
2019-07-10 07:26:04 +00:00
}
// +k8s:deepcopy-gen=true
// TCPRouter holds the router configuration.
type TCPRouter struct {
2020-12-03 14:52:05 +00:00
EntryPoints [ ] string ` json:"entryPoints,omitempty" toml:"entryPoints,omitempty" yaml:"entryPoints,omitempty" export:"true" `
2021-06-11 13:30:05 +00:00
Middlewares [ ] string ` json:"middlewares,omitempty" toml:"middlewares,omitempty" yaml:"middlewares,omitempty" export:"true" `
2020-12-03 14:52:05 +00:00
Service string ` json:"service,omitempty" toml:"service,omitempty" yaml:"service,omitempty" export:"true" `
2019-07-10 07:26:04 +00:00
Rule string ` json:"rule,omitempty" toml:"rule,omitempty" yaml:"rule,omitempty" `
2022-03-17 17:02:08 +00:00
Priority int ` json:"priority,omitempty" toml:"priority,omitempty,omitzero" yaml:"priority,omitempty" export:"true" `
2022-03-22 10:04:08 +00:00
TLS * RouterTCPTLSConfig ` json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" label:"allowEmpty" file:"allowEmpty" kv:"allowEmpty" export:"true" `
2019-07-10 07:26:04 +00:00
}
// +k8s:deepcopy-gen=true
2020-05-11 10:06:07 +00:00
// RouterTCPTLSConfig holds the TLS configuration for a router.
2019-07-10 07:26:04 +00:00
type RouterTCPTLSConfig struct {
2020-12-03 14:52:05 +00:00
Passthrough bool ` json:"passthrough" toml:"passthrough" yaml:"passthrough" export:"true" `
Options string ` json:"options,omitempty" toml:"options,omitempty" yaml:"options,omitempty" export:"true" `
CertResolver string ` json:"certResolver,omitempty" toml:"certResolver,omitempty" yaml:"certResolver,omitempty" export:"true" `
Domains [ ] types . Domain ` json:"domains,omitempty" toml:"domains,omitempty" yaml:"domains,omitempty" export:"true" `
2019-07-10 07:26:04 +00:00
}
// +k8s:deepcopy-gen=true
2019-09-13 18:00:06 +00:00
// TCPServersLoadBalancer holds the LoadBalancerService configuration.
type TCPServersLoadBalancer struct {
2022-03-22 10:04:08 +00:00
ProxyProtocol * ProxyProtocol ` json:"proxyProtocol,omitempty" toml:"proxyProtocol,omitempty" yaml:"proxyProtocol,omitempty" label:"allowEmpty" file:"allowEmpty" kv:"allowEmpty" export:"true" `
2020-12-03 14:52:05 +00:00
Servers [ ] TCPServer ` json:"servers,omitempty" toml:"servers,omitempty" yaml:"servers,omitempty" label-slice-as-struct:"server" export:"true" `
2022-12-09 08:58:05 +00:00
ServersTransport string ` json:"serversTransport,omitempty" toml:"serversTransport,omitempty" yaml:"serversTransport,omitempty" export:"true" `
2019-07-10 07:26:04 +00:00
}
// Mergeable tells if the given service is mergeable.
2019-09-13 18:00:06 +00:00
func ( l * TCPServersLoadBalancer ) Mergeable ( loadBalancer * TCPServersLoadBalancer ) bool {
2019-07-10 07:26:04 +00:00
savedServers := l . Servers
defer func ( ) {
l . Servers = savedServers
} ( )
l . Servers = nil
savedServersLB := loadBalancer . Servers
defer func ( ) {
loadBalancer . Servers = savedServersLB
} ( )
loadBalancer . Servers = nil
return reflect . DeepEqual ( l , loadBalancer )
}
// +k8s:deepcopy-gen=true
2020-05-11 10:06:07 +00:00
// TCPServer holds a TCP Server configuration.
2019-07-10 07:26:04 +00:00
type TCPServer struct {
Address string ` json:"address,omitempty" toml:"address,omitempty" yaml:"address,omitempty" label:"-" `
2023-04-03 08:06:06 +00:00
Port string ` json:"-" toml:"-" yaml:"-" `
2022-12-09 08:58:05 +00:00
TLS bool ` json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" `
2019-07-10 07:26:04 +00:00
}
2020-11-17 12:04:04 +00:00
// +k8s:deepcopy-gen=true
2022-06-24 10:40:08 +00:00
// ProxyProtocol holds the PROXY Protocol configuration.
2022-12-05 15:58:04 +00:00
// More info: https://doc.traefik.io/traefik/v3.0/routing/services/#proxy-protocol
2020-11-17 12:04:04 +00:00
type ProxyProtocol struct {
2022-06-24 10:40:08 +00:00
// Version defines the PROXY Protocol version to use.
2020-12-03 14:52:05 +00:00
Version int ` json:"version,omitempty" toml:"version,omitempty" yaml:"version,omitempty" export:"true" `
2020-11-17 12:04:04 +00:00
}
// SetDefaults Default values for a ProxyProtocol.
func ( p * ProxyProtocol ) SetDefaults ( ) {
p . Version = 2
}
2022-12-09 08:58:05 +00:00
// +k8s:deepcopy-gen=true
// TCPServersTransport options to configure communication between Traefik and the servers.
type TCPServersTransport struct {
DialKeepAlive ptypes . Duration ` description:"Defines the interval between keep-alive probes for an active network connection. If zero, keep-alive probes are sent with a default value (currently 15 seconds), if supported by the protocol and operating system. Network protocols or operating systems that do not support keep-alives ignore this field. If negative, keep-alive probes are disabled" json:"dialKeepAlive,omitempty" toml:"dialKeepAlive,omitempty" yaml:"dialKeepAlive,omitempty" export:"true" `
DialTimeout ptypes . Duration ` description:"Defines the amount of time to wait until a connection to a backend server can be established. If zero, no timeout exists." json:"dialTimeout,omitempty" toml:"dialTimeout,omitempty" yaml:"dialTimeout,omitempty" export:"true" `
// TerminationDelay, corresponds to the deadline that the proxy sets, after one
// of its connected peers indicates it has closed the writing capability of its
// connection, to close the reading capability as well, hence fully terminating the
// connection. It is a duration in milliseconds, defaulting to 100. A negative value
// means an infinite deadline (i.e. the reading capability is never closed).
TerminationDelay ptypes . Duration ` description:"Defines the delay to wait before fully terminating the connection, after one connected peer has closed its writing capability." json:"terminationDelay,omitempty" toml:"terminationDelay,omitempty" yaml:"terminationDelay,omitempty" export:"true" `
TLS * TLSClientConfig ` description:"Defines the TLS configuration." json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" label:"allowEmpty" file:"allowEmpty" kv:"allowEmpty" export:"true" `
}
// +k8s:deepcopy-gen=true
// TLSClientConfig options to configure TLS communication between Traefik and the servers.
type TLSClientConfig struct {
2024-01-11 16:06:06 +00:00
ServerName string ` description:"Defines the serverName used to contact the server." json:"serverName,omitempty" toml:"serverName,omitempty" yaml:"serverName,omitempty" `
InsecureSkipVerify bool ` description:"Disables SSL certificate verification." json:"insecureSkipVerify,omitempty" toml:"insecureSkipVerify,omitempty" yaml:"insecureSkipVerify,omitempty" export:"true" `
RootCAs [ ] types . FileOrContent ` description:"Defines a list of CA secret used to validate self-signed certificate" json:"rootCAs,omitempty" toml:"rootCAs,omitempty" yaml:"rootCAs,omitempty" `
Certificates traefiktls . Certificates ` description:"Defines a list of secret storing client certificates for mTLS." json:"certificates,omitempty" toml:"certificates,omitempty" yaml:"certificates,omitempty" export:"true" `
PeerCertURI string ` description:"Defines the URI used to match against SAN URI during the peer certificate verification." json:"peerCertURI,omitempty" toml:"peerCertURI,omitempty" yaml:"peerCertURI,omitempty" export:"true" `
Spiffe * Spiffe ` description:"Defines the SPIFFE TLS configuration." json:"spiffe,omitempty" toml:"spiffe,omitempty" yaml:"spiffe,omitempty" label:"allowEmpty" file:"allowEmpty" export:"true" `
2022-12-09 08:58:05 +00:00
}
// SetDefaults sets the default values for a TCPServersTransport.
func ( t * TCPServersTransport ) SetDefaults ( ) {
t . DialTimeout = ptypes . Duration ( 30 * time . Second )
t . DialKeepAlive = ptypes . Duration ( 15 * time . Second )
t . TerminationDelay = ptypes . Duration ( 100 * time . Millisecond )
}