95 lines
3.6 KiB
Go
95 lines
3.6 KiB
Go
|
package xds
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"github.com/mitchellh/mapstructure"
|
||
|
)
|
||
|
|
||
|
// ProxyConfig describes the keys we understand from Connect.Proxy.Config. Note
|
||
|
// that this only includes config keys that affects runtime config delivered by
|
||
|
// xDS. For Envoy config keys that affect bootstrap generation see
|
||
|
// command/connect/envoy/bootstrap_config.go.
|
||
|
type ProxyConfig struct {
|
||
|
// PublicListenerJSON is a complete override ("escape hatch") for the
|
||
|
// upstream's public listener. The Connect server TLS certificate and
|
||
|
// validation context will be injected overriding any TLS settings present. An
|
||
|
// AuthZ filter will also be prepended to each filterChain provided to enforce
|
||
|
// Connect's access control.
|
||
|
PublicListenerJSON string `mapstructure:"envoy_public_listener_json"`
|
||
|
|
||
|
// LocalClusterJSON is a complete override ("escape hatch") for the
|
||
|
// local application cluster.
|
||
|
LocalClusterJSON string `mapstructure:"envoy_local_cluster_json"`
|
||
|
|
||
|
// LocalConnectTimeoutMs is the number of milliseconds to timeout making a new
|
||
|
// connection to the local app instance. Defaults to 5000 (5 seconds) if not
|
||
|
// set.
|
||
|
LocalConnectTimeoutMs int `mapstructure:"local_connect_timeout_ms"`
|
||
|
|
||
|
// Protocol describes the service's protocol. Valid values are "tcp",
|
||
|
// "http" and "grpc". Anything else is treated as tcp. The enables protocol
|
||
|
// aware features like per-request metrics and connection pooling, tracing,
|
||
|
// routing etc.
|
||
|
Protocol string `mapstructure:"protocol"`
|
||
|
}
|
||
|
|
||
|
// ParseProxyConfig returns the ProxyConfig parsed from the an opaque map. If an
|
||
|
// error occurs during parsing it is returned along with the default config this
|
||
|
// allows caller to choose whether and how to report the error.
|
||
|
func ParseProxyConfig(m map[string]interface{}) (ProxyConfig, error) {
|
||
|
var cfg ProxyConfig
|
||
|
err := mapstructure.WeakDecode(m, &cfg)
|
||
|
// Set defaults (even if error is returned)
|
||
|
if cfg.Protocol == "" {
|
||
|
cfg.Protocol = "tcp"
|
||
|
} else {
|
||
|
cfg.Protocol = strings.ToLower(cfg.Protocol)
|
||
|
}
|
||
|
if cfg.LocalConnectTimeoutMs < 1 {
|
||
|
cfg.LocalConnectTimeoutMs = 5000
|
||
|
}
|
||
|
return cfg, err
|
||
|
}
|
||
|
|
||
|
// UpstreamConfig describes the keys we understand from
|
||
|
// Connect.Proxy.Upstream[*].Config.
|
||
|
type UpstreamConfig struct {
|
||
|
// ListenerJSON is a complete override ("escape hatch") for the upstream's
|
||
|
// listener.
|
||
|
ListenerJSON string `mapstructure:"envoy_listener_json"`
|
||
|
|
||
|
// ClusterJSON is a complete override ("escape hatch") for the upstream's
|
||
|
// cluster. The Connect client TLS certificate and context will be injected
|
||
|
// overriding any TLS settings present.
|
||
|
ClusterJSON string `mapstructure:"envoy_cluster_json"`
|
||
|
|
||
|
// Protocol describes the upstream's service protocol. Valid values are "tcp",
|
||
|
// "http" and "grpc". Anything else is treated as tcp. The enables protocol
|
||
|
// aware features like per-request metrics and connection pooling, tracing,
|
||
|
// routing etc.
|
||
|
Protocol string `mapstructure:"protocol"`
|
||
|
|
||
|
// ConnectTimeoutMs is the number of milliseconds to timeout making a new
|
||
|
// connection to this upstream. Defaults to 5000 (5 seconds) if not set.
|
||
|
ConnectTimeoutMs int `mapstructure:"connect_timeout_ms"`
|
||
|
}
|
||
|
|
||
|
// ParseUpstreamConfig returns the UpstreamConfig parsed from the an opaque map.
|
||
|
// If an error occurs during parsing it is returned along with the default
|
||
|
// config this allows caller to choose whether and how to report the error.
|
||
|
func ParseUpstreamConfig(m map[string]interface{}) (UpstreamConfig, error) {
|
||
|
var cfg UpstreamConfig
|
||
|
err := mapstructure.WeakDecode(m, &cfg)
|
||
|
// Set defaults (even if error is returned)
|
||
|
if cfg.Protocol == "" {
|
||
|
cfg.Protocol = "tcp"
|
||
|
} else {
|
||
|
cfg.Protocol = strings.ToLower(cfg.Protocol)
|
||
|
}
|
||
|
if cfg.ConnectTimeoutMs < 1 {
|
||
|
cfg.ConnectTimeoutMs = 5000
|
||
|
}
|
||
|
return cfg, err
|
||
|
}
|