Help us shape the future of Go! Take the 2026 Go Developer Survey

config

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2026 License: MPL-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Cert used for internal RPC communication to the servers
	ConsulGRPCCACertPemEnvVar = "CONSUL_GRPC_CACERT_PEM"

	ConsulDataplaneDNSBindHost = "127.0.0.1"
	ConsulDataplaneDNSBindPort = 8600

	// Login meta fields added to the token
	ConsulTokenTaskIDMeta    = "consul.hashicorp.com/task-id"
	ConsulTokenClusterIDMeta = "consul.hashicorp.com/cluster"
)
View Source
const (
	// ServiceTokenFilename is the file in the BootstrapDir where the service token is written by `consul login`.
	ServiceTokenFilename = "service-token"

	// DefaultAuthMethodName is the default name of the Consul IAM auth method used for `consul login`.
	DefaultAuthMethodName = "iam-ecs-service-token"

	// DefaultGatewayPort (8443) is the default gateway registration port used by 'consul connect envoy -register'.
	DefaultGatewayPort = 8443

	// DefaultPublicListenerPort is the default public listener port for sidecar proxies.
	DefaultPublicListenerPort = 20000

	// DefaultProxyHealthCheckPort is the default HTTP health check port for the proxy.
	DefaultProxyHealthCheckPort = 22000

	// TaggedAddressLAN is the map key for LAN tagged addresses.
	TaggedAddressLAN = "lan"

	// TaggedAddressWAN is the map key for WAN tagged addresses.
	TaggedAddressWAN = "wan"

	// Name of the dataplane's container
	ConsulDataplaneContainerName = "consul-dataplane"

	// Match Consul: https://github.com/hashicorp/consul/blob/68e79b8180ca89e8cfca291b40a30d943039bd49/agent/consul/authmethod/awsauth/aws.go#L16-L20
	AuthMethodType         string = "aws-iam"
	IAMServerIDHeaderName  string = "X-Consul-IAM-ServerID"
	GetEntityMethodHeader  string = "X-Consul-IAM-GetEntity-Method"
	GetEntityURLHeader     string = "X-Consul-IAM-GetEntity-URL"
	GetEntityHeadersHeader string = "X-Consul-IAM-GetEntity-Headers"
	GetEntityBodyHeader    string = "X-Consul-IAM-GetEntity-Body"

	SyntheticNode string = "synthetic-node"

	// Outlier detection constants for network partition resilience mode
	// These values define the passive health check thresholds for detecting unhealthy upstream services
	DefaultOutlierDetectionInterval                       = 10 * time.Second
	DefaultOutlierDetectionMaxFailures             uint32 = 5
	DefaultOutlierDetectionEnforcingConsecutive5xx uint32 = 100
	DefaultOutlierDetectionEnforcingGatewayFailure uint32 = 100
	DefaultOutlierDetectionMaxEjectionPercent      uint32 = 50
)
View Source
const (
	ConfigEnvironmentVariable = "CONSUL_ECS_CONFIG_JSON"
)

Variables

View Source
var Schema string

Functions

func GetConsulToken added in v0.7.0

func GetConsulToken() string

func GetHealthCheckPort added in v0.7.0

func GetHealthCheckPort(p int) int

Types

type AgentServiceConnectProxyConfig

type AgentServiceConnectProxyConfig struct {
	Config              map[string]interface{} `json:"config,omitempty"`
	LocalServiceAddress string                 `json:"localServiceAddress,omitempty"`
	PublicListenerPort  int                    `json:"publicListenerPort,omitempty"`
	HealthCheckPort     int                    `json:"healthCheckPort,omitempty"`
	Upstreams           []Upstream             `json:"upstreams,omitempty"`
	MeshGateway         *MeshGatewayConfig     `json:"meshGateway,omitempty"`
	Expose              *ExposeConfig          `json:"expose,omitempty"`
}

AgentServiceConnectProxyConfig defines the sidecar proxy configuration.

NOTE: For the proxy registration request (api.AgentServiceRegistration in Consul),

  • The Kind and Port are set by mesh-init, so these fields are not configurable.
  • The ID, Name, Tags, Meta, EnableTagOverride, and Weights fields are inferred or copied from the service registration by mesh-init.
  • The bind address defaults to localhost in ECS but can be overridden with LocalServiceAddress and SocketPath is excluded.
  • The Connect field is excluded. Since the sidecar proxy is being used, it's not a Connect-native service, and we don't need the nested proxy config included in the Connect field.
  • The Partition field is excluded. mesh-init will use the partition from the service registration.
  • The Namespace field is excluded. mesh-init will use the namespace from the service registration.
  • There's not a use-case for specifying TaggedAddresses with Consul ECS, and Enable

For the proxy configuration (api.AgentServiceConnectProxyConfig in Consul),

  • The DestinationServiceName, DestinationServiceId, LocalServiceAddress, and LocalServicePort are all set by mesh-init, based on the service configuration.
  • The LocalServiceSocketPath is excluded, since it would conflict with the address/port set by mesh-init.
  • Checks are excluded. mesh-init automatically configures useful checks for the proxy.
  • TProxy is not supported on ECS, so the Mode and TransparentProxy fields are excluded.

func (*AgentServiceConnectProxyConfig) GetPublicListenerPort added in v0.4.3

func (a *AgentServiceConnectProxyConfig) GetPublicListenerPort() int

func (*AgentServiceConnectProxyConfig) ToConsulType

type AgentWeights

type AgentWeights struct {
	Passing int `json:"passing"`
	Warning int `json:"warning"`
}

func (*AgentWeights) ToConsulType

func (w *AgentWeights) ToConsulType() api.AgentWeights

type Config

type Config struct {
	BootstrapDir         string                          `json:"bootstrapDir"`
	ConsulLogin          ConsulLogin                     `json:"consulLogin"`
	HealthSyncContainers []string                        `json:"healthSyncContainers,omitempty"`
	LogLevel             string                          `json:"logLevel,omitempty"`
	Proxy                *AgentServiceConnectProxyConfig `json:"proxy"`
	Gateway              *GatewayRegistration            `json:"gateway,omitempty"`
	Service              ServiceRegistration             `json:"service"`
	ConsulServers        ConsulServers                   `json:"consulServers"`
	Controller           Controller                      `json:"controller"`
	TransparentProxy     TransparentProxyConfig          `json:"transparentProxy"`
}

Config is the top-level config object.

func FromEnv

func FromEnv() (*Config, error)

func (*Config) ClientConfig added in v0.7.0

func (c *Config) ClientConfig() *api.Config

func (*Config) ConsulDNSEnabled added in v0.8.0

func (cfg *Config) ConsulDNSEnabled() bool

func (*Config) ConsulServerConnMgrConfig added in v0.7.0

func (c *Config) ConsulServerConnMgrConfig(taskMeta awsutil.ECSTaskMeta) (discovery.Config, error)

func (*Config) IsGateway added in v0.7.0

func (c *Config) IsGateway() bool

func (*Config) TransparentProxyEnabled added in v0.8.0

func (cfg *Config) TransparentProxyEnabled() bool

func (*Config) UnmarshalJSON added in v0.8.0

func (c *Config) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type ConsulDNS added in v0.8.0

type ConsulDNS struct {
	Enabled bool `json:"enabled"`
}

type ConsulLogin added in v0.5.0

type ConsulLogin struct {
	Enabled       bool              `json:"enabled"`
	Method        string            `json:"method"`
	IncludeEntity bool              `json:"includeEntity"`
	Meta          map[string]string `json:"meta"`
	Region        string            `json:"region"`
	Datacenter    string            `json:"datacenter"`

	// These are passed through to the consul-awsauth library.
	STSEndpoint         string `json:"stsEndpoint"`
	ServerIDHeaderValue string `json:"serverIdHeaderValue"`

	// These are for unit tests. They are disallowed by the JSON schema.
	AccessKeyID     string `json:"-"`
	SecretAccessKey string `json:"-"`
}

ConsulLogin configures login options for the Consul IAM auth method.

func (*ConsulLogin) UnmarshalJSON added in v0.5.0

func (c *ConsulLogin) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that defaults `includeEntity` to true

type ConsulServers added in v0.7.0

type ConsulServers struct {
	Hosts           string          `json:"hosts"`
	SkipServerWatch bool            `json:"skipServerWatch"`
	Defaults        DefaultSettings `json:"defaults"`
	GRPC            GRPCSettings    `json:"grpc"`
	HTTP            HTTPSettings    `json:"http"`
}

ConsulServers configures options that helps the Consul specific ECS containers discover the consul servers.

func (*ConsulServers) GetGRPCTLSSettings added in v0.7.0

func (c *ConsulServers) GetGRPCTLSSettings() *TLSSettings

func (*ConsulServers) UnmarshalJSON added in v0.7.0

func (c *ConsulServers) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type Controller added in v0.7.0

type Controller struct {
	IAMRolePath       string `json:"iamRolePath"`
	PartitionsEnabled bool   `json:"partitionsEnabled"`
	Partition         string `json:"partition"`
}

Controller configures the options to start the consul-ecs-controller command.

func (*Controller) UnmarshalJSON added in v0.7.0

func (c *Controller) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type DefaultSettings added in v0.7.0

type DefaultSettings struct {
	CaCertFile    string `json:"caCertFile"`
	EnableTLS     bool   `json:"tls"`
	TLSServerName string `json:"tlsServerName"`
}

DefaultSettings hold the default TLS settings for Consul server's RPC and HTTP interfaces

func (*DefaultSettings) UnmarshalJSON added in v0.7.0

func (d *DefaultSettings) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type ExposeConfig

type ExposeConfig struct {
	Checks bool         `json:"checks,omitempty"`
	Paths  []ExposePath `json:"paths,omitempty"`
}

ExposeConfig describes HTTP paths to expose through Envoy outside of Connect.

func (*ExposeConfig) ToConsulType

func (e *ExposeConfig) ToConsulType() api.ExposeConfig

type ExposePath

type ExposePath struct {
	ListenerPort  int    `json:"listenerPort,omitempty"`
	Path          string `json:"path,omitempty"`
	LocalPathPort int    `json:"localPathPort,omitempty"`
	Protocol      string `json:"protocol,omitempty"`
}

ExposePath are the paths to expose outside of connect. See ExposeConfig.

func (*ExposePath) ToConsulType

func (e *ExposePath) ToConsulType() api.ExposePath

type GRPCSettings added in v0.7.0

type GRPCSettings struct {
	Port          int    `json:"port"`
	CaCertFile    string `json:"caCertFile"`
	EnableTLS     *bool  `json:"tls"`
	TLSServerName string `json:"tlsServerName"`
}

GRPCSettings hold the settings for Consul server's RPC interfaces. Overrides the configuration present in DefaultSettings for TLS.

func (*GRPCSettings) UnmarshalJSON added in v0.7.0

func (g *GRPCSettings) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type GatewayAddress added in v0.5.0

type GatewayAddress struct {
	Address string `json:"address,omitempty"`
	Port    int    `json:"port,omitempty"`
}

func (*GatewayAddress) ToConsulType added in v0.5.0

func (a *GatewayAddress) ToConsulType() api.ServiceAddress

type GatewayProxyConfig added in v0.5.0

type GatewayProxyConfig struct {
	Config map[string]interface{} `json:"config,omitempty"`
}

func (*GatewayProxyConfig) ToConsulType added in v0.5.0

type GatewayRegistration added in v0.5.0

type GatewayRegistration struct {
	Kind            api.ServiceKind     `json:"kind"`
	LanAddress      *GatewayAddress     `json:"lanAddress,omitempty"`
	WanAddress      *GatewayAddress     `json:"wanAddress,omitempty"`
	Name            string              `json:"name,omitempty"`
	Tags            []string            `json:"tags,omitempty"`
	Meta            map[string]string   `json:"meta,omitempty"`
	Namespace       string              `json:"namespace,omitempty"`
	Partition       string              `json:"partition,omitempty"`
	Proxy           *GatewayProxyConfig `json:"proxy,omitempty"`
	HealthCheckPort int                 `json:"healthCheckPort,omitempty"`
}

func (*GatewayRegistration) ToConsulType added in v0.5.0

func (g *GatewayRegistration) ToConsulType() *api.AgentService

type HTTPSettings added in v0.7.0

type HTTPSettings struct {
	Port          int    `json:"port"`
	EnableHTTPS   bool   `json:"https"`
	CaCertFile    string `json:"caCertFile"`
	EnableTLS     *bool  `json:"tls"`
	TLSServerName string `json:"tlsServerName"`
}

HTTPSettings hold the settings for Consul server's HTTP interfaces. Overrides the configuration present in DefaultSettings for TLS.

func (*HTTPSettings) UnmarshalJSON added in v0.7.0

func (h *HTTPSettings) UnmarshalJSON(data []byte) error

UnmarshalJSON is a custom unmarshaller that assigns defaults to certain fields

type MeshGatewayConfig

type MeshGatewayConfig struct {
	Mode api.MeshGatewayMode `json:"mode,omitempty"`
}

MeshGatewayConfig describes how to use mesh gateways to reach other services.

func (*MeshGatewayConfig) ToConsulType

func (m *MeshGatewayConfig) ToConsulType() api.MeshGatewayConfig

type NetworkPartitionResilienceConfig added in v0.9.4

type NetworkPartitionResilienceConfig struct {
	Enabled          bool                    `json:"enabled,omitempty"`
	OutlierDetection *OutlierDetectionConfig `json:"outlierDetection,omitempty"`
}

NetworkPartitionResilienceConfig defines the configuration for network partition resilience mode which includes outlier detection settings for handling network partitions.

func NewNetworkResilienceConfig added in v0.9.4

func NewNetworkResilienceConfig() *NetworkPartitionResilienceConfig

NewNetworkResilienceConfig returns a new NetworkPartitionResilienceConfig with outlier detection enabled.

type OutlierDetectionConfig added in v0.9.4

type OutlierDetectionConfig struct {
	Interval                           time.Duration `json:"interval,omitempty"`
	MaxFailures                        uint32        `json:"maxFailures,omitempty"`
	EnforcingConsecutive5xx            *uint32       `json:"enforcingConsecutive5xx,omitempty"`
	Consecutive5xx                     *uint32       `json:"consecutive5xx,omitempty"`
	EnforcingConsecutiveGatewayFailure *uint32       `json:"enforcingConsecutiveGatewayFailure,omitempty"`
	ConsecutiveGatewayFailure          *uint32       `json:"consecutiveGatewayFailure,omitempty"`
	MaxEjectionPercent                 *uint32       `json:"maxEjectionPercent,omitempty"`
}

OutlierDetectionConfig defines the passive health check settings for outlier detection. These fields map directly to the Consul API PassiveHealthCheck struct: - Interval maps to PassiveHealthCheck.Interval - MaxFailures maps to PassiveHealthCheck.MaxFailures - EnforcingConsecutive5xx maps to PassiveHealthCheck.EnforcingConsecutive5xx - Consecutive5xx maps to PassiveHealthCheck.Consecutive5xx - EnforcingConsecutiveGatewayFailure maps to PassiveHealthCheck.EnforcingConsecutiveGatewayFailure - ConsecutiveGatewayFailure maps to PassiveHealthCheck.ConsecutiveGatewayFailure - MaxEjectionPercent maps to PassiveHealthCheck.MaxEjectionPercent

func NewOutlierDetectionConfig added in v0.9.4

func NewOutlierDetectionConfig() *OutlierDetectionConfig

NewOutlierDetectionConfig returns a new OutlierDetectionConfig with default values for network partition resilience mode.

type ServiceRegistration

type ServiceRegistration struct {
	Name                             string                            `json:"name"`
	Tags                             []string                          `json:"tags,omitempty"`
	Port                             int                               `json:"port"`
	EnableTagOverride                bool                              `json:"enableTagOverride,omitempty"`
	Meta                             map[string]string                 `json:"meta,omitempty"`
	Weights                          *AgentWeights                     `json:"weights,omitempty"`
	Namespace                        string                            `json:"namespace,omitempty"`
	Partition                        string                            `json:"partition,omitempty"`
	NetworkPartitionResilienceConfig *NetworkPartitionResilienceConfig `json:"networkResilienceConfig,omitempty"`
}

ServiceRegistration configures the Consul service registration.

NOTE: - The Kind and Id fields are set by mesh-init during service/proxy registration. - The Address field excluded. The agent's address (task ip) should always be used in ECS. - The Connect field is not supported:

  • No Connect-native support for now. We assume Envoy is used.
  • Proxy registration occurs in a separate request, so no need to inline the proxy config. See the SidecarProxyRegistration type.

func (*ServiceRegistration) ToConsulType

func (r *ServiceRegistration) ToConsulType() *api.AgentService

type TLSSettings added in v0.7.0

type TLSSettings struct {
	Enabled       bool
	CaCertFile    string
	TLSServerName string
}

type TransparentProxyConfig added in v0.8.0

type TransparentProxyConfig struct {
	Enabled              bool      `json:"enabled"`
	ExcludeInboundPorts  []int     `json:"excludeInboundPorts"`
	ExcludeOutboundPorts []int     `json:"excludeOutboundPorts"`
	ExcludeOutboundCIDRs []string  `json:"excludeOutboundCIDRs"`
	ExcludeUIDs          []string  `json:"excludeUIDs"`
	ConsulDNS            ConsulDNS `json:"consulDNS"`
}

func (*TransparentProxyConfig) UnmarshalJSON added in v0.8.0

func (c *TransparentProxyConfig) UnmarshalJSON(data []byte) error

type Upstream

type Upstream struct {
	DestinationType      api.UpstreamDestType   `json:"destinationType,omitempty"`
	DestinationNamespace string                 `json:"destinationNamespace,omitempty"`
	DestinationPartition string                 `json:"destinationPartition,omitempty"`
	DestinationName      string                 `json:"destinationName,omitempty"`
	DestinationPeer      string                 `json:"destinationPeer,omitempty"`
	Datacenter           string                 `json:"datacenter,omitempty"`
	LocalBindAddress     string                 `json:"localBindAddress,omitempty"`
	LocalBindPort        int                    `json:"localBindPort,omitempty"`
	Config               map[string]interface{} `json:"config,omitempty"`
	MeshGateway          *MeshGatewayConfig     `json:"meshGateway,omitempty"`
}

Upstream describes an upstream Consul Service.

NOTE: The LocalBindSocketPath and LocalBindSocketMode are excluded. This level of control/restriction is not as relevant in ECS since each proxy runs in an isolated Docker container.

func (*Upstream) ToConsulType

func (u *Upstream) ToConsulType() api.Upstream

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL