DocsEmissary-ingressLoad balancing
Load balancing
Load balancing configuration can be set for all Emissary-ingress mappings in the ambassador
Module
, or set per Mapping
. If nothing is set, simple round robin balancing is used via Kubernetes services.
To use advanced load balancing, you must first configure a resolver that supports advanced load balancing (e.g., the Kubernetes Endpoint Resolver or Consul Resolver). Once a resolver is configured, you can use the load_balancer
attribute. The following fields are supported:
Supported load balancer policies:
round_robin
least_request
ring_hash
maglev
For more information on the different policies and the implications, see load balancing strategies in Kubernetes.
Round robin
When policy
is set to round_robin
, Emissary-ingress discovers healthy endpoints for the given mapping, and load balances the incoming L7 requests with round robin scheduling. To specify this:
or, per mapping:
Note that load balancing may not appear to be "even" due to Envoy's threading model. For more details, see the Envoy documentation.
Least request
When policy
is set to least_request
, Emissary-ingress discovers healthy endpoints for the given mapping, and load balances the incoming L7 requests to the endpoint with the fewest active requests. To specify this:
or, per mapping:
Sticky sessions / session affinity
Configuring sticky sessions makes Emissary-ingress route requests to a specific pod providing your service in a given session. One pod serves all requests from a given session, eliminating the need for session data to be transferred between pods. Emissary-ingress lets you configure session affinity based on the following parameters in an incoming request:
- Cookie
- Header
- Source IP
NOTE: Emissary-ingress supports sticky sessions using two load balancing policies, ring_hash
and maglev
.
Cookie
If the cookie you wish to set affinity on is already present in incoming requests, then you only need the cookie.name
field. However, if you want Emissary-ingress to generate and set a cookie in response to the first request, then you need to specify a value for the cookie.ttl
field which generates a cookie with the given expiration time.
Header
Emissary-ingress allows header based session affinity if the given header is present on incoming requests.
Example:
Source IP
Emissary-ingress allows session affinity based on the source IP of incoming requests.
Load balancing can be configured both globally, and overridden on a per mapping basis. The following example configures the default load balancing policy to be round robin, while using header-based session affinity for requests to the /backend/
endpoint of the quote application:
Load balancing can be configured both globally, and overridden on a per mapping basis.