mirror of https://github.com/istio/istio.io.git
				
				
				
			Add locality load balancing docs to traffic management concepts (#3593)
* Add locality load balancing docs to traffic management concepts
Signed-off-by: Liam White <liam@tetrate.io>
* appease our linting overlords
Signed-off-by: Liam White <liam@tetrate.io>
* Update content/docs/concepts/traffic-management/index.md
Co-Authored-By: liamawhite <liamawhite@gmail.com>
* Apply suggestions from code review
Co-Authored-By: liamawhite <liamawhite@gmail.com>
* clean up the mess I made with gh suggestions
Signed-off-by: Liam White <liam@tetrate.io>
* Move the docs around to ops guide
Signed-off-by: Liam White <liam@tetrate.io>
* Correct hierarchy ordering
Signed-off-by: Liam White <liam@tetrate.io>
* remove errant slash
Signed-off-by: Liam White <liam@tetrate.io>
* s/service/workload/g
Signed-off-by: Liam White <liam@tetrate.io>
* 🤦
Signed-off-by: Liam White <liam@tetrate.io>
* fix numberings
Signed-off-by: Liam White <liam@tetrate.io>
			
			
This commit is contained in:
		
							parent
							
								
									e76ecb4154
								
							
						
					
					
						commit
						71e6347fa2
					
				|  | @ -152,6 +152,7 @@ ExecAction | ||||||
| Exfiltrating | Exfiltrating | ||||||
| ExternalName | ExternalName | ||||||
| facto | facto | ||||||
|  | failover | ||||||
| failovers | failovers | ||||||
| faq | faq | ||||||
| faq.md | faq.md | ||||||
|  |  | ||||||
|  | @ -194,6 +194,20 @@ Services can actively shed load by responding with an HTTP 503 to a health | ||||||
| check. In such an event, the service instance will be immediately removed | check. In such an event, the service instance will be immediately removed | ||||||
| from the caller's load balancing pool. | from the caller's load balancing pool. | ||||||
| 
 | 
 | ||||||
|  | ### Locality Load Balancing | ||||||
|  | 
 | ||||||
|  | A locality defines a geographic location within your mesh using the following triplet: | ||||||
|  | 
 | ||||||
|  | - Region | ||||||
|  | - Zone | ||||||
|  | - Sub-zone | ||||||
|  | 
 | ||||||
|  | The geographic location typically represents a data center. Istio uses | ||||||
|  | this information to prioritize load balancing pools to control | ||||||
|  | the geographic location where requests are proxied. | ||||||
|  | 
 | ||||||
|  | For more information and instructions on how to enable this feature see the [operations guide](/help/ops/traffic-management/locality-load-balancing/). | ||||||
|  | 
 | ||||||
| ## Handling failures | ## Handling failures | ||||||
| 
 | 
 | ||||||
| Envoy provides a set of out-of-the-box _opt-in_ failure recovery features | Envoy provides a set of out-of-the-box _opt-in_ failure recovery features | ||||||
|  | @ -331,15 +345,15 @@ etc. | ||||||
| There are four traffic management configuration resources in Istio: | There are four traffic management configuration resources in Istio: | ||||||
| `VirtualService`, `DestinationRule`, `ServiceEntry`, and `Gateway`: | `VirtualService`, `DestinationRule`, `ServiceEntry`, and `Gateway`: | ||||||
| 
 | 
 | ||||||
| * A [`VirtualService`](/docs/reference/config/networking/v1alpha3/virtual-service/) | - A [`VirtualService`](/docs/reference/config/networking/v1alpha3/virtual-service/) | ||||||
| defines the rules that control how requests for a service are routed within an Istio service mesh. | defines the rules that control how requests for a service are routed within an Istio service mesh. | ||||||
| 
 | 
 | ||||||
| * A [`DestinationRule`](/docs/reference/config/networking/v1alpha3/destination-rule/) | - A [`DestinationRule`](/docs/reference/config/networking/v1alpha3/destination-rule/) | ||||||
| configures the set of policies to be applied to a request after `VirtualService` routing has occurred. | configures the set of policies to be applied to a request after `VirtualService` routing has occurred. | ||||||
| 
 | 
 | ||||||
| * A [`ServiceEntry`](/docs/reference/config/networking/v1alpha3/service-entry/) is commonly used to enable requests to services outside of an Istio service mesh. | - A [`ServiceEntry`](/docs/reference/config/networking/v1alpha3/service-entry/) is commonly used to enable requests to services outside of an Istio service mesh. | ||||||
| 
 | 
 | ||||||
| * A [`Gateway`](/docs/reference/config/networking/v1alpha3/gateway/) | - A [`Gateway`](/docs/reference/config/networking/v1alpha3/gateway/) | ||||||
| configures a load balancer for HTTP/TCP traffic, most commonly operating at the edge of the mesh to enable ingress traffic for an application. | configures a load balancer for HTTP/TCP traffic, most commonly operating at the edge of the mesh to enable ingress traffic for an application. | ||||||
| 
 | 
 | ||||||
| For example, you can implement a simple rule to send 100% of incoming traffic for a *reviews* service to version "v1" by using a `VirtualService` configuration as follows: | For example, you can implement a simple rule to send 100% of incoming traffic for a *reviews* service to version "v1" by using a `VirtualService` configuration as follows: | ||||||
|  |  | ||||||
|  | @ -0,0 +1,60 @@ | ||||||
|  | --- | ||||||
|  | title: Locality Load Balancing | ||||||
|  | description: Information on how to enable and understand Locality Load Balancing. | ||||||
|  | weight: 40 | ||||||
|  | keywords: [locality,load balancing,priority,prioritized] | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | A locality defines a geographic location within your mesh using the following triplet: | ||||||
|  | 
 | ||||||
|  | - Region | ||||||
|  | - Zone | ||||||
|  | - Sub-zone | ||||||
|  | 
 | ||||||
|  | The geographic location typically represents a data center. Istio uses | ||||||
|  | this information to prioritize load balancing pools to control | ||||||
|  | the geographic location where requests are sent. | ||||||
|  | 
 | ||||||
|  | ## Enabling Locality Load Balancing | ||||||
|  | 
 | ||||||
|  | This feature is experimental and off by default in 1.1. To enable locality load balancing, | ||||||
|  | set the `PILOT_ENABLE_LOCALITY_LOAD_BALANCING` environment variable in all Pilot instances. | ||||||
|  | 
 | ||||||
|  | Currently, the service discovery platform populates the locality automatically. | ||||||
|  | In Kubernetes, a pod's locality is determined via the [well-known labels for region and zone](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#failure-domain-beta-kubernetes-io-region) | ||||||
|  | on the node it is deployed. If you are using a hosted Kubernetes service your cloud provider | ||||||
|  | should configure this for you. If you are running your own Kubernetes cluster you will need | ||||||
|  | to add these labels to your nodes. The sub-zone concept doesn't exist in Kubernetes. | ||||||
|  | As a result, this field does not need to be configured. | ||||||
|  | 
 | ||||||
|  | ## Locality-Prioritized Load Balancing | ||||||
|  | 
 | ||||||
|  | _Locality-prioritized load balancing_ is the default behavior for _locality load balancing_ . | ||||||
|  | In this mode, Istio tells Envoy to prioritize traffic to the workload instances most closely matching | ||||||
|  | the locality of the Envoy sending the request. When all instances are healthy, the requests | ||||||
|  | remains within the same locality. When instances become unhealthy, traffic spills over to | ||||||
|  | instances in the next prioritized locality. This behavior continues until all localities are | ||||||
|  | receiving traffic. You can find the exact percentages in the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/load_balancing/priority#priority-levels). | ||||||
|  | 
 | ||||||
|  | A typical prioritization for an Envoy with a locality of `us-west/zone2` is as follows: | ||||||
|  | 
 | ||||||
|  | - Priority 0: `us-west/zone2` | ||||||
|  | - Priority 1: `us-west/zone1`, `us-west/zone3` | ||||||
|  | - Priority 2: `us-east/zone1`, `us-east/zone2`, `eu-west/zone1` | ||||||
|  | 
 | ||||||
|  | The hierarchy of prioritization matches in the following order: | ||||||
|  | 
 | ||||||
|  | 1. Region | ||||||
|  | 1. Zone | ||||||
|  | 1. Sub-zone | ||||||
|  | 
 | ||||||
|  | Proxies in the same zone but different regions are not considered local to one another. | ||||||
|  | 
 | ||||||
|  | ### Overriding the Locality Fail-over | ||||||
|  | 
 | ||||||
|  | Sometimes, you need to constrain the traffic fail-over to avoid sending traffic to | ||||||
|  | endpoints across the globe when there are not enough healthy endpoints in the | ||||||
|  | same region. This behavior is useful when sending fail-over traffic across regions | ||||||
|  | would not improve service health or many other reasons including regulatory controls. | ||||||
|  | To constrain traffic to a region, use the mesh `LocalityLoadBalancerSetting.Failover` | ||||||
|  | configuration detailed in the [Locality load balancing reference guide](/docs/reference/config/istio.mesh.v1alpha1/#LocalityLoadBalancerSetting). | ||||||
		Loading…
	
		Reference in New Issue