Skip to content

Commit

Permalink
Backport of Allow multiple endpoints in Envoy clusters configured wit…
Browse files Browse the repository at this point in the history
…h hostnames into release/1.20.x (#21882)

* backport of commit a80ee72

* backport of commit f270ab5

---------

Co-authored-by: Tom Davies <tom@t-davies.com>
  • Loading branch information
hc-github-team-consul-core and t-davies authored Oct 29, 2024
1 parent 2a1e55e commit e7aac01
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
3 changes: 3 additions & 0 deletions .changelog/21655.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:improvement
xds: configures Envoy to load balance over all instances of an external service configured with hostnames when "envoy_dns_discovery_type" is set to "STRICT_DNS"
```
15 changes: 10 additions & 5 deletions agent/xds/clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -1824,13 +1824,15 @@ func configureClusterWithHostnames(
cluster.DnsRefreshRate = durationpb.New(rate)
cluster.DnsLookupFamily = envoy_cluster_v3.Cluster_V4_ONLY

envoyMaxEndpoints := 1
discoveryType := envoy_cluster_v3.Cluster_Type{Type: envoy_cluster_v3.Cluster_LOGICAL_DNS}
if dnsDiscoveryType == "strict_dns" {
discoveryType.Type = envoy_cluster_v3.Cluster_STRICT_DNS
envoyMaxEndpoints = len(hostnameEndpoints)
}
cluster.ClusterDiscoveryType = &discoveryType

endpoints := make([]*envoy_endpoint_v3.LbEndpoint, 0, 1)
endpoints := make([]*envoy_endpoint_v3.LbEndpoint, 0, envoyMaxEndpoints)
uniqueHostnames := make(map[string]bool)

var (
Expand All @@ -1848,12 +1850,15 @@ func configureClusterWithHostnames(
continue
}

if len(endpoints) == 0 {
if len(endpoints) < envoyMaxEndpoints {
endpoints = append(endpoints, makeLbEndpoint(addr, port, health, weight))

hostname = addr
idx = i
break

if len(endpoints) == envoyMaxEndpoints {
break
}
}
}

Expand All @@ -1867,8 +1872,8 @@ func configureClusterWithHostnames(

endpoints = append(endpoints, fallback)
}
if len(uniqueHostnames) > 1 {
logger.Warn(fmt.Sprintf("service contains instances with more than one unique hostname; only %q be resolved by Envoy", hostname),
if len(uniqueHostnames) > 1 && envoyMaxEndpoints == 1 {
logger.Warn(fmt.Sprintf("service contains instances with more than one unique hostname; only %q will be resolved by Envoy", hostname),
"dc", dc, "service", service.String())
}

Expand Down

0 comments on commit e7aac01

Please sign in to comment.