Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
Miek Gieben
2020-01-16 09:35:10 +01:00
parent ec151309dd
commit 0736ccb18e
2 changed files with 14 additions and 7 deletions

View File

@@ -11,8 +11,9 @@ and draining of clusters. The cluster information is retrieved from a service
discovery manager that implements the service discovery protocols that Envoy discovery manager that implements the service discovery protocols that Envoy
[implements](https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol). [implements](https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol).
A Cluster is defined as: "A cluster is a group of logically similar endpoints that Envoy connects A Cluster is defined as: "A group of logically similar endpoints that Envoy connects
to. Each cluster has a name, which *traffic* extends to be a domain name. to." Each cluster has a name, which *traffic* extends to be a domain name. See
"Naming Clusters" below.
The use case for this plugin is when a cluster has endpoints running in multiple The use case for this plugin is when a cluster has endpoints running in multiple
(Kubernetes?) clusters and you need to steer traffic to (or away) from these endpoints, i.e. (Kubernetes?) clusters and you need to steer traffic to (or away) from these endpoints, i.e.
@@ -49,18 +50,26 @@ traffic {
* node **ID** is how *traffic* identifies itself to the control plane. This defaults to `coredns`. * node **ID** is how *traffic* identifies itself to the control plane. This defaults to `coredns`.
## Naming Clusters
When a cluster is named this usually consists out of a single word, i.e. "cluster-v0", or "web". The
*traffic* plugins uses the name(s) specified in the Server Block to create fully qualified domain
names. For example if the Server Block specifies `lb.example.org` as one of the names, and
"cluster-v0" is one of the load balanced cluster, *traffic* will respond to query asking for
`cluster-v0.lb.example.org.` and the same goes for `web`; `web.lb.example.org`.
## Examples ## Examples
~~~ corefile ~~~ corefile
example.org { lb.example.org {
traffic grpc://127.0.0.1:18000 traffic grpc://127.0.0.1:18000
debug debug
log log
} }
~~~ ~~~
This will add load balancing for domains under example.org; the upstream information comes from This will load balance any names under `lb.example.org` using the data from the manager running on
10.12.13.14; depending on received assignments, replies will be let through as-is or are load balanced. localhost on port 18000. The node ID will default to `coredns`.
## Also See ## Also See

View File

@@ -20,14 +20,12 @@ func (a *assignment) SetClusterLoadAssignment(cluster string, cla *xdspb.Cluster
defer a.mu.Unlock() defer a.mu.Unlock()
_, ok := a.cla[cluster] _, ok := a.cla[cluster]
if !ok { if !ok {
log.Debugf("Adding cluster %q", cluster)
a.cla[cluster] = cla a.cla[cluster] = cla
return return
} }
if cla == nil { if cla == nil {
return return
} }
log.Debugf("Updating cluster %q", cluster)
a.cla[cluster] = cla a.cla[cluster] = cla
} }