mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-29 17:24:20 -04:00 
			
		
		
		
	| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user