Config-entry: Support proxy config in service-defaults (#14395)
* Config-entry: Support proxy config in service-defaults * Update website/content/docs/connect/config-entries/service-defaults.mdx Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>
This commit is contained in:
parent
9f14171f6c
commit
6196be1f98
|
@ -0,0 +1,4 @@
|
||||||
|
```release-note:feature
|
||||||
|
service-defaults: Added support for `local_request_timeout_ms` and
|
||||||
|
`local_connect_timeout_ms` in servicedefaults config entry
|
||||||
|
```
|
|
@ -88,6 +88,20 @@ func ComputeResolvedServiceConfig(
|
||||||
thisReply.ProxyConfig["max_inbound_connections"] = serviceConf.MaxInboundConnections
|
thisReply.ProxyConfig["max_inbound_connections"] = serviceConf.MaxInboundConnections
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if serviceConf.LocalConnectTimeoutMs > 0 {
|
||||||
|
if thisReply.ProxyConfig == nil {
|
||||||
|
thisReply.ProxyConfig = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
thisReply.ProxyConfig["local_connect_timeout_ms"] = serviceConf.LocalConnectTimeoutMs
|
||||||
|
}
|
||||||
|
|
||||||
|
if serviceConf.LocalRequestTimeoutMs > 0 {
|
||||||
|
if thisReply.ProxyConfig == nil {
|
||||||
|
thisReply.ProxyConfig = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
thisReply.ProxyConfig["local_request_timeout_ms"] = serviceConf.LocalRequestTimeoutMs
|
||||||
|
}
|
||||||
|
|
||||||
thisReply.Meta = serviceConf.Meta
|
thisReply.Meta = serviceConf.Meta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,30 @@ func Test_ComputeResolvedServiceConfig(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "proxy with local_connect_timeout_ms and local_request_timeout_ms",
|
||||||
|
args: args{
|
||||||
|
scReq: &structs.ServiceConfigRequest{
|
||||||
|
Name: "sid",
|
||||||
|
},
|
||||||
|
entries: &ResolvedServiceConfigSet{
|
||||||
|
ServiceDefaults: map[structs.ServiceID]*structs.ServiceConfigEntry{
|
||||||
|
sid: {
|
||||||
|
MaxInboundConnections: 20,
|
||||||
|
LocalConnectTimeoutMs: 20000,
|
||||||
|
LocalRequestTimeoutMs: 30000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
want: &structs.ServiceConfigResponse{
|
||||||
|
ProxyConfig: map[string]interface{}{
|
||||||
|
"max_inbound_connections": 20,
|
||||||
|
"local_connect_timeout_ms": 20000,
|
||||||
|
"local_request_timeout_ms": 30000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
|
|
@ -109,6 +109,8 @@ type ServiceConfigEntry struct {
|
||||||
UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"`
|
UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"`
|
||||||
Destination *DestinationConfig `json:",omitempty"`
|
Destination *DestinationConfig `json:",omitempty"`
|
||||||
MaxInboundConnections int `json:",omitempty" alias:"max_inbound_connections"`
|
MaxInboundConnections int `json:",omitempty" alias:"max_inbound_connections"`
|
||||||
|
LocalConnectTimeoutMs int `json:",omitempty" alias:"local_connect_timeout_ms"`
|
||||||
|
LocalRequestTimeoutMs int `json:",omitempty" alias:"local_request_timeout_ms"`
|
||||||
|
|
||||||
Meta map[string]string `json:",omitempty"`
|
Meta map[string]string `json:",omitempty"`
|
||||||
acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"`
|
acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"`
|
||||||
|
|
|
@ -236,6 +236,8 @@ type ServiceConfigEntry struct {
|
||||||
UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"`
|
UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"`
|
||||||
Destination *DestinationConfig `json:",omitempty"`
|
Destination *DestinationConfig `json:",omitempty"`
|
||||||
MaxInboundConnections int `json:",omitempty" alias:"max_inbound_connections"`
|
MaxInboundConnections int `json:",omitempty" alias:"max_inbound_connections"`
|
||||||
|
LocalConnectTimeoutMs int `json:",omitempty" alias:"local_connect_timeout_ms"`
|
||||||
|
LocalRequestTimeoutMs int `json:",omitempty" alias:"local_request_timeout_ms"`
|
||||||
Meta map[string]string `json:",omitempty"`
|
Meta map[string]string `json:",omitempty"`
|
||||||
CreateIndex uint64
|
CreateIndex uint64
|
||||||
ModifyIndex uint64
|
ModifyIndex uint64
|
||||||
|
|
|
@ -105,6 +105,8 @@ func TestAPI_ConfigEntries(t *testing.T) {
|
||||||
"gir": "zim",
|
"gir": "zim",
|
||||||
},
|
},
|
||||||
MaxInboundConnections: 5,
|
MaxInboundConnections: 5,
|
||||||
|
LocalConnectTimeoutMs: 5000,
|
||||||
|
LocalRequestTimeoutMs: 7000,
|
||||||
}
|
}
|
||||||
|
|
||||||
dest := &DestinationConfig{
|
dest := &DestinationConfig{
|
||||||
|
@ -146,6 +148,8 @@ func TestAPI_ConfigEntries(t *testing.T) {
|
||||||
require.Equal(t, service.Meta, readService.Meta)
|
require.Equal(t, service.Meta, readService.Meta)
|
||||||
require.Equal(t, service.Meta, readService.GetMeta())
|
require.Equal(t, service.Meta, readService.GetMeta())
|
||||||
require.Equal(t, service.MaxInboundConnections, readService.MaxInboundConnections)
|
require.Equal(t, service.MaxInboundConnections, readService.MaxInboundConnections)
|
||||||
|
require.Equal(t, service.LocalConnectTimeoutMs, readService.LocalConnectTimeoutMs)
|
||||||
|
require.Equal(t, service.LocalRequestTimeoutMs, readService.LocalRequestTimeoutMs)
|
||||||
|
|
||||||
// update it
|
// update it
|
||||||
service.Protocol = "tcp"
|
service.Protocol = "tcp"
|
||||||
|
|
|
@ -711,6 +711,18 @@ represents a location outside the Consul cluster. They can be dialed directly wh
|
||||||
type: 'int: 0',
|
type: 'int: 0',
|
||||||
yaml: true,
|
yaml: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'LocalConnectTimeoutMs',
|
||||||
|
description: ' The number of milliseconds allowed to make connections to the local application instance before timing out. Defaults to 5000.',
|
||||||
|
type: 'int: 0',
|
||||||
|
yaml: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'LocalRequestTimeoutMs',
|
||||||
|
description: ' In milliseconds, the timeout for HTTP requests to the local application instance. Applies to HTTP-based protocols only. If not specified, inherits the Envoy default for route timeouts (15s).',
|
||||||
|
type: 'int: 0',
|
||||||
|
yaml: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'MeshGateway',
|
name: 'MeshGateway',
|
||||||
type: 'MeshGatewayConfig: <optional>',
|
type: 'MeshGatewayConfig: <optional>',
|
||||||
|
|
Loading…
Reference in New Issue