Documentation ¶
Index ¶
- Constants
- Variables
- func Validate(validators []ValidatorFunc) error
- type Amalgam8Controller
- type Amalgam8Registry
- type Command
- type Config
- type Dnsconfig
- type Endpoint
- type Eureka
- type HealthCheck
- type Kubernetes
- type ProxyConfig
- type Service
- type TCPProxyConfig
- type ValidatorFunc
- func IsEmptyOrValidURL(name, value string) ValidatorFunc
- func IsInRange(name string, value, min, max int) ValidatorFunc
- func IsInRangeDuration(name string, value, min, max time.Duration) ValidatorFunc
- func IsInSet(name, value string, set []string) ValidatorFunc
- func IsNotEmpty(name, value string) ValidatorFunc
- func IsValidDomain(name, value string) ValidatorFunc
- func IsValidURL(name, value string) ValidatorFunc
Constants ¶
const ( //TerminateProcess signal that supervisor should kill other processes and exit process on failure TerminateProcess = "terminate" //IgnoreProcess signal that supervisor should ignore this process on failure IgnoreProcess = "ignore" )
const ( Amalgam8Adapter = "amalgam8" KubernetesAdapter = "kubernetes" EurekaAdapter = "eureka" )
Supported Service Registry/Discovery/Rules adapter
const ( HTTPHealthCheck = "http" HTTPSHealthCheck = "https" TCPHealthCheck = "tcp" CommandHealthCheck = "file" )
Health check types.
const (
EnvoyAdapter = "envoy"
)
Supported proxy adapters
Variables ¶
var DefaultConfig = Config{ Register: false, Proxy: false, ProxyAdapter: EnvoyAdapter, DNS: false, ProxyConfig: ProxyConfig{ TLS: false, CertChainFile: "", PrivateKeyFile: "", CACertFile: "", HTTPListenerPort: 0, DiscoveryPort: 0, AdminPort: 0, WorkingDir: "", LoggingDir: "", ProxyBinary: "", GRPCHTTP1Bridge: false, TCPProxies: nil, }, Service: Service{ Name: "", Tags: nil, }, Endpoint: Endpoint{ Host: "", Port: 0, Type: "http", }, DiscoveryAdapter: Amalgam8Adapter, A8Registry: Amalgam8Registry{ URL: "", Token: "", Poll: time.Duration(15 * time.Second), }, A8Controller: Amalgam8Controller{ URL: "", Token: "", Poll: time.Duration(15 * time.Second), }, RulesAdapter: Amalgam8Adapter, Kubernetes: Kubernetes{ URL: "", Token: "", Namespace: "default", PodName: "", }, Eureka: Eureka{ URLs: []string{}, }, Dnsconfig: Dnsconfig{ Port: 8053, Domain: "amalgam8", }, HealthChecks: nil, LogLevel: "info", Commands: nil, }
DefaultConfig defines default values for the various configuration options
var Flags = []cli.Flag{ cli.StringFlag{ Name: configFlag, EnvVar: envVar(configFlag), Usage: "Load configuration from file", }, cli.BoolFlag{ Name: registerFlag, EnvVar: envVar(registerFlag), Usage: "Enable automatic service registration and heartbeat", }, cli.BoolFlag{ Name: proxyFlag, EnvVar: envVar(proxyFlag), Usage: "Start proxy", }, cli.StringFlag{ Name: proxyAdapterFlag, EnvVar: envVar(proxyAdapterFlag), Usage: fmt.Sprintf("Proxy adapter (%v)", strings.Join(SupportedAdapters, ", ")), }, cli.BoolFlag{ Name: dnsFlag, EnvVar: envVar(dnsFlag), Usage: "Enable DNS server", }, cli.BoolFlag{ Name: proxyTLSFlag, EnvVar: envVar(proxyTLSFlag), Usage: "Enable proxy TLS communication", }, cli.StringFlag{ Name: proxyCertChainFileFlag, EnvVar: envVar(proxyCertChainFileFlag), Usage: "File containing the certificate chain file for the service (to present to clients)", }, cli.StringFlag{ Name: proxyPrivateKeyFileFlag, EnvVar: envVar(proxyPrivateKeyFileFlag), Usage: "File containing the private key that corresponds to the certificate chain file", }, cli.StringFlag{ Name: proxyCACertFileFlag, EnvVar: envVar(proxyCACertFileFlag), Usage: "File containing CA certificate(s) to verify client connections", }, cli.StringFlag{ Name: serviceFlag, EnvVar: envVar(serviceFlag), Usage: "Service name to register with", }, cli.StringFlag{ Name: endpointHostFlag, EnvVar: envVar(endpointHostFlag), Usage: "Service endpoint host name (local IP is used if none specified)", }, cli.IntFlag{ Name: endpointPortFlag, EnvVar: envVar(endpointPortFlag), Usage: "Service endpoint port", }, cli.StringFlag{ Name: endpointTypeFlag, EnvVar: envVar(endpointTypeFlag), Usage: "Service endpoint type (http, https, tcp, udp, user)", }, cli.StringFlag{ Name: discoveryAdapterFlag, EnvVar: envVar(discoveryAdapterFlag), Usage: fmt.Sprintf("Discovery adapter (%s, %s, %s)", Amalgam8Adapter, KubernetesAdapter, EurekaAdapter), }, cli.StringFlag{ Name: registryURLFlag, EnvVar: envVar(registryURLFlag), Usage: "URL for Amalgam8 Registry", }, cli.StringFlag{ Name: registryTokenFlag, EnvVar: envVar(registryTokenFlag), Usage: "API token for Amalgam8 Registry", }, cli.DurationFlag{ Name: registryPollFlag, EnvVar: envVar(registryPollFlag), Usage: "Interval for polling Amalgam8 Registry", }, cli.StringFlag{ Name: kubernetesURLFlag, EnvVar: envVar(kubernetesURLFlag), Usage: "URL for Kubernetes API server", }, cli.StringFlag{ Name: kubernetesTokenFlag, EnvVar: envVar(kubernetesTokenFlag), Usage: "API token for Kubernetes API server", }, cli.StringFlag{ Name: kubernetesNamespaceFlag, EnvVar: envVar(kubernetesNamespaceFlag), Usage: "Kubernetes API namespace", }, cli.StringFlag{ Name: kubernetesPodNameFlag, EnvVar: envVar(kubernetesPodNameFlag), Usage: "Kubernetes Pod name, to be used for automatic detection of service name and labels", }, cli.StringSliceFlag{ Name: eurekaURLFlag, EnvVar: envVar(eurekaURLFlag), Usage: "List of Eureka server URLs", }, cli.StringFlag{ Name: rulesAdapterFlag, EnvVar: envVar(rulesAdapterFlag), Usage: fmt.Sprintf("Rules service adapter (%s, %s)", Amalgam8Adapter, KubernetesAdapter), }, cli.StringFlag{ Name: controllerURLFlag, EnvVar: envVar(controllerURLFlag), Usage: "URL for Amalgam8 Controller", }, cli.StringFlag{ Name: controllerTokenFlag, EnvVar: envVar(controllerTokenFlag), Usage: "API token for Amalgam8 Controller", }, cli.DurationFlag{ Name: controllerPollFlag, EnvVar: envVar(controllerPollFlag), Usage: "Interval for polling Amalgam8 Rules", }, cli.StringFlag{ Name: dnsConfigPortFlag, EnvVar: envVar(dnsConfigPortFlag), Usage: "DNS server port number", }, cli.StringFlag{ Name: dnsConfigDomainFlag, EnvVar: envVar(dnsConfigDomainFlag), Usage: "DNS server authorization domain name", }, cli.BoolFlag{ Name: superviseFlag, EnvVar: envVar(superviseFlag), Usage: "Deprecated - this flag is no longer required and will be ignored", }, cli.StringSliceFlag{ Name: healthchecksFlag, EnvVar: envVar(healthchecksFlag), Usage: "List of health check URLs", }, cli.StringFlag{ Name: logLevelFlag, EnvVar: envVar(logLevelFlag), Usage: "Logging level (debug, info, warn, error, fatal, panic)", }, }
Flags is the set of supported flags
var SupportedAdapters = []string{EnvoyAdapter}
SupportedAdapters is the set of supported proxy adapters
Functions ¶
Types ¶
type Amalgam8Controller ¶ added in v1.0.0
type Amalgam8Controller struct { URL string `yaml:"url"` Token string `yaml:"token"` Poll time.Duration `yaml:"poll"` }
Amalgam8Controller configuration
type Amalgam8Registry ¶ added in v1.0.0
type Amalgam8Registry struct { URL string `yaml:"url"` Token string `yaml:"token"` Poll time.Duration `yaml:"poll"` }
Amalgam8Registry configuration
type Command ¶ added in v0.4.1
type Command struct { Cmd []string `yaml:"cmd"` Env []string `yaml:"env"` OnExit string `yaml:"on_exit"` KillGroup bool `yaml:"kill_group"` }
Command to be managed by sidecar app supervisor
type Config ¶
type Config struct { Register bool `yaml:"register"` Proxy bool `yaml:"proxy"` ProxyAdapter string `yaml:"proxy_adapter"` DNS bool `yaml:"dns"` Service Service `yaml:"service"` Endpoint Endpoint `yaml:"endpoint"` DiscoveryAdapter string `yaml:"discovery_adapter"` RulesAdapter string `yaml:"rules_adapter"` A8Registry Amalgam8Registry `yaml:"registry"` A8Controller Amalgam8Controller `yaml:"controller"` Kubernetes Kubernetes `yaml:"kubernetes"` Eureka Eureka `yaml:"eureka"` Dnsconfig Dnsconfig `yaml:"dnsconfig"` Supervise bool `yaml:"supervise"` HealthChecks []HealthCheck `yaml:"healthchecks"` ProxyConfig ProxyConfig `yaml:"proxy_config"` LogLevel string `yaml:"log_level"` Commands []Command `yaml:"commands"` }
Config stores the various configuration options for the sidecar
type Eureka ¶ added in v1.0.0
type Eureka struct {
URLs []string `yaml:"urls"`
}
Eureka configuration
type HealthCheck ¶ added in v0.4.0
type HealthCheck struct { Type string `yaml:"type"` Value string `yaml:"value"` Interval time.Duration `yaml:"interval"` Timeout time.Duration `yaml:"timeout"` Method string `yaml:"method"` Code int `yaml:"code"` Args []string `yaml:"args"` CACertFile string `yaml:"ca_cert_file"` }
HealthCheck configuration.
type Kubernetes ¶ added in v1.0.0
type Kubernetes struct { URL string `yaml:"url"` Token string `yaml:"token"` Namespace string `yaml:"namespace"` PodName string `yaml:"pod_name"` }
Kubernetes configuration
type ProxyConfig ¶ added in v1.0.0
type ProxyConfig struct { TLS bool `yaml:"tls"` CertChainFile string `yaml:"cert_chain_file"` PrivateKeyFile string `yaml:"private_key_file"` CACertFile string `yaml:"ca_cert_file"` HTTPListenerPort int `yaml:"http_listener_port"` DiscoveryPort int `yaml:"sds_port"` AdminPort int `yaml:"admin_port"` WorkingDir string `yaml:"working_dir"` LoggingDir string `yaml:"logging_dir"` ProxyBinary string `yaml:"proxy_binary_path"` GRPCHTTP1Bridge bool `yaml:"grpc_http1_bridge,omitempty"` TCPProxies []TCPProxyConfig `yaml:"tcp_proxies"` }
ProxyConfig stores proxy configuration.
type TCPProxyConfig ¶ added in v1.1.0
type TCPProxyConfig struct { Service string `yaml:"service"` ListenerPort int `yaml:"listener_port"` }
TCPProxyConfig tcp listeners for envoy
type ValidatorFunc ¶
type ValidatorFunc func() error
ValidatorFunc performs a validation check
func IsEmptyOrValidURL ¶ added in v1.0.0
func IsEmptyOrValidURL(name, value string) ValidatorFunc
IsEmptyOrValidURL ensures that the URL is either empty, or is a valid URL
func IsInRange ¶
func IsInRange(name string, value, min, max int) ValidatorFunc
IsInRange ensures the integer is within the specified inclusive range
func IsInRangeDuration ¶
func IsInRangeDuration(name string, value, min, max time.Duration) ValidatorFunc
IsInRangeDuration ensures the time value is between the given min and max times
func IsInSet ¶
func IsInSet(name, value string, set []string) ValidatorFunc
IsInSet ensures that the value is a member of the set
func IsNotEmpty ¶
func IsNotEmpty(name, value string) ValidatorFunc
IsNotEmpty ensures the value is not empty
func IsValidDomain ¶ added in v0.4.1
func IsValidDomain(name, value string) ValidatorFunc
IsValidDomain ensures the domain name is valid domain and that it contains only one domain.
func IsValidURL ¶
func IsValidURL(name, value string) ValidatorFunc
IsValidURL ensures that the URL is valid and has a protocol specified (http, https, etc...)