Add HighestRandomWeight Loadbalancing Algorithm
This commit is contained in:
parent
9b42b5b930
commit
02443545e7
10 changed files with 936 additions and 112 deletions
|
|
@ -199,39 +199,39 @@
|
|||
- "traefik.http.routers.router1.tls.domains[1].main=foobar"
|
||||
- "traefik.http.routers.router1.tls.domains[1].sans=foobar, foobar"
|
||||
- "traefik.http.routers.router1.tls.options=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.followredirects=true"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.headers.name0=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.headers.name1=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.hostname=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.interval=42s"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.method=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.mode=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.path=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.port=42"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.scheme=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.status=42"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.timeout=42s"
|
||||
- "traefik.http.services.service02.loadbalancer.healthcheck.unhealthyinterval=42s"
|
||||
- "traefik.http.services.service02.loadbalancer.passhostheader=true"
|
||||
- "traefik.http.services.service02.loadbalancer.passivehealthcheck.failurewindow=42s"
|
||||
- "traefik.http.services.service02.loadbalancer.passivehealthcheck.maxfailedattempts=42"
|
||||
- "traefik.http.services.service02.loadbalancer.responseforwarding.flushinterval=42s"
|
||||
- "traefik.http.services.service02.loadbalancer.serverstransport=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky=true"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie=true"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.domain=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.httponly=true"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.maxage=42"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.name=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.path=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.samesite=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.sticky.cookie.secure=true"
|
||||
- "traefik.http.services.service02.loadbalancer.strategy=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.server.port=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.server.preservepath=true"
|
||||
- "traefik.http.services.service02.loadbalancer.server.scheme=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.server.url=foobar"
|
||||
- "traefik.http.services.service02.loadbalancer.server.weight=42"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.followredirects=true"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.headers.name0=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.headers.name1=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.hostname=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.interval=42s"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.method=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.mode=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.path=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.port=42"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.scheme=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.status=42"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.timeout=42s"
|
||||
- "traefik.http.services.service03.loadbalancer.healthcheck.unhealthyinterval=42s"
|
||||
- "traefik.http.services.service03.loadbalancer.passhostheader=true"
|
||||
- "traefik.http.services.service03.loadbalancer.passivehealthcheck.failurewindow=42s"
|
||||
- "traefik.http.services.service03.loadbalancer.passivehealthcheck.maxfailedattempts=42"
|
||||
- "traefik.http.services.service03.loadbalancer.responseforwarding.flushinterval=42s"
|
||||
- "traefik.http.services.service03.loadbalancer.serverstransport=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky=true"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie=true"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.domain=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.httponly=true"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.maxage=42"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.name=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.path=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.samesite=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.sticky.cookie.secure=true"
|
||||
- "traefik.http.services.service03.loadbalancer.strategy=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.server.port=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.server.preservepath=true"
|
||||
- "traefik.http.services.service03.loadbalancer.server.scheme=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.server.url=foobar"
|
||||
- "traefik.http.services.service03.loadbalancer.server.weight=42"
|
||||
- "traefik.tcp.middlewares.tcpmiddleware01.ipallowlist.sourcerange=foobar, foobar"
|
||||
- "traefik.tcp.middlewares.tcpmiddleware02.ipwhitelist.sourcerange=foobar, foobar"
|
||||
- "traefik.tcp.middlewares.tcpmiddleware03.inflightconn.amount=42"
|
||||
|
|
|
|||
|
|
@ -55,12 +55,23 @@
|
|||
fallback = "foobar"
|
||||
[http.services.Service01.failover.healthCheck]
|
||||
[http.services.Service02]
|
||||
[http.services.Service02.loadBalancer]
|
||||
[http.services.Service02.highestRandomWeight]
|
||||
|
||||
[[http.services.Service02.highestRandomWeight.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
|
||||
[[http.services.Service02.highestRandomWeight.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
[http.services.Service02.highestRandomWeight.healthCheck]
|
||||
[http.services.Service03]
|
||||
[http.services.Service03.loadBalancer]
|
||||
strategy = "foobar"
|
||||
passHostHeader = true
|
||||
serversTransport = "foobar"
|
||||
[http.services.Service02.loadBalancer.sticky]
|
||||
[http.services.Service02.loadBalancer.sticky.cookie]
|
||||
[http.services.Service03.loadBalancer.sticky]
|
||||
[http.services.Service03.loadBalancer.sticky.cookie]
|
||||
name = "foobar"
|
||||
secure = true
|
||||
httpOnly = true
|
||||
|
|
@ -69,16 +80,16 @@
|
|||
path = "foobar"
|
||||
domain = "foobar"
|
||||
|
||||
[[http.services.Service02.loadBalancer.servers]]
|
||||
[[http.services.Service03.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
weight = 42
|
||||
preservePath = true
|
||||
|
||||
[[http.services.Service02.loadBalancer.servers]]
|
||||
[[http.services.Service03.loadBalancer.servers]]
|
||||
url = "foobar"
|
||||
weight = 42
|
||||
preservePath = true
|
||||
[http.services.Service02.loadBalancer.healthCheck]
|
||||
[http.services.Service03.loadBalancer.healthCheck]
|
||||
scheme = "foobar"
|
||||
mode = "foobar"
|
||||
path = "foobar"
|
||||
|
|
@ -90,40 +101,40 @@
|
|||
timeout = "42s"
|
||||
hostname = "foobar"
|
||||
followRedirects = true
|
||||
[http.services.Service02.loadBalancer.healthCheck.headers]
|
||||
[http.services.Service03.loadBalancer.healthCheck.headers]
|
||||
name0 = "foobar"
|
||||
name1 = "foobar"
|
||||
[http.services.Service02.loadBalancer.passiveHealthCheck]
|
||||
[http.services.Service03.loadBalancer.passiveHealthCheck]
|
||||
failureWindow = "42s"
|
||||
maxFailedAttempts = 42
|
||||
[http.services.Service02.loadBalancer.responseForwarding]
|
||||
[http.services.Service03.loadBalancer.responseForwarding]
|
||||
flushInterval = "42s"
|
||||
[http.services.Service03]
|
||||
[http.services.Service03.mirroring]
|
||||
[http.services.Service04]
|
||||
[http.services.Service04.mirroring]
|
||||
service = "foobar"
|
||||
mirrorBody = true
|
||||
maxBodySize = 42
|
||||
|
||||
[[http.services.Service03.mirroring.mirrors]]
|
||||
[[http.services.Service04.mirroring.mirrors]]
|
||||
name = "foobar"
|
||||
percent = 42
|
||||
|
||||
[[http.services.Service03.mirroring.mirrors]]
|
||||
[[http.services.Service04.mirroring.mirrors]]
|
||||
name = "foobar"
|
||||
percent = 42
|
||||
[http.services.Service03.mirroring.healthCheck]
|
||||
[http.services.Service04]
|
||||
[http.services.Service04.weighted]
|
||||
[http.services.Service04.mirroring.healthCheck]
|
||||
[http.services.Service05]
|
||||
[http.services.Service05.weighted]
|
||||
|
||||
[[http.services.Service04.weighted.services]]
|
||||
[[http.services.Service05.weighted.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
|
||||
[[http.services.Service04.weighted.services]]
|
||||
[[http.services.Service05.weighted.services]]
|
||||
name = "foobar"
|
||||
weight = 42
|
||||
[http.services.Service04.weighted.sticky]
|
||||
[http.services.Service04.weighted.sticky.cookie]
|
||||
[http.services.Service05.weighted.sticky]
|
||||
[http.services.Service05.weighted.sticky.cookie]
|
||||
name = "foobar"
|
||||
secure = true
|
||||
httpOnly = true
|
||||
|
|
@ -131,7 +142,7 @@
|
|||
maxAge = 42
|
||||
path = "foobar"
|
||||
domain = "foobar"
|
||||
[http.services.Service04.weighted.healthCheck]
|
||||
[http.services.Service05.weighted.healthCheck]
|
||||
[http.middlewares]
|
||||
[http.middlewares.Middleware01]
|
||||
[http.middlewares.Middleware01.addPrefix]
|
||||
|
|
|
|||
|
|
@ -65,6 +65,14 @@ http:
|
|||
fallback: foobar
|
||||
healthCheck: {}
|
||||
Service02:
|
||||
highestRandomWeight:
|
||||
services:
|
||||
- name: foobar
|
||||
weight: 42
|
||||
- name: foobar
|
||||
weight: 42
|
||||
healthCheck: {}
|
||||
Service03:
|
||||
loadBalancer:
|
||||
sticky:
|
||||
cookie:
|
||||
|
|
@ -105,7 +113,7 @@ http:
|
|||
responseForwarding:
|
||||
flushInterval: 42s
|
||||
serversTransport: foobar
|
||||
Service03:
|
||||
Service04:
|
||||
mirroring:
|
||||
service: foobar
|
||||
mirrorBody: true
|
||||
|
|
@ -116,7 +124,7 @@ http:
|
|||
- name: foobar
|
||||
percent: 42
|
||||
healthCheck: {}
|
||||
Service04:
|
||||
Service05:
|
||||
weighted:
|
||||
services:
|
||||
- name: foobar
|
||||
|
|
|
|||
|
|
@ -274,58 +274,63 @@ THIS FILE MUST NOT BE EDITED BY HAND
|
|||
| `traefik/http/services/Service01/failover/fallback` | `foobar` |
|
||||
| `traefik/http/services/Service01/failover/healthCheck` | `` |
|
||||
| `traefik/http/services/Service01/failover/service` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/followRedirects` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/headers/name0` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/headers/name1` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/hostname` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/interval` | `42s` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/method` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/mode` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/path` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/port` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/scheme` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/status` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/timeout` | `42s` |
|
||||
| `traefik/http/services/Service02/loadBalancer/healthCheck/unhealthyInterval` | `42s` |
|
||||
| `traefik/http/services/Service02/loadBalancer/passHostHeader` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/passiveHealthCheck/failureWindow` | `42s` |
|
||||
| `traefik/http/services/Service02/loadBalancer/passiveHealthCheck/maxFailedAttempts` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/responseForwarding/flushInterval` | `42s` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/0/preservePath` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/0/url` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/0/weight` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/1/preservePath` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/1/url` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/servers/1/weight` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/serversTransport` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/domain` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/httpOnly` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/maxAge` | `42` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/name` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/path` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/sameSite` | `foobar` |
|
||||
| `traefik/http/services/Service02/loadBalancer/sticky/cookie/secure` | `true` |
|
||||
| `traefik/http/services/Service02/loadBalancer/strategy` | `foobar` |
|
||||
| `traefik/http/services/Service03/mirroring/healthCheck` | `` |
|
||||
| `traefik/http/services/Service03/mirroring/maxBodySize` | `42` |
|
||||
| `traefik/http/services/Service03/mirroring/mirrorBody` | `true` |
|
||||
| `traefik/http/services/Service03/mirroring/mirrors/0/name` | `foobar` |
|
||||
| `traefik/http/services/Service03/mirroring/mirrors/0/percent` | `42` |
|
||||
| `traefik/http/services/Service03/mirroring/mirrors/1/name` | `foobar` |
|
||||
| `traefik/http/services/Service03/mirroring/mirrors/1/percent` | `42` |
|
||||
| `traefik/http/services/Service03/mirroring/service` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/healthCheck` | `` |
|
||||
| `traefik/http/services/Service04/weighted/services/0/name` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/services/0/weight` | `42` |
|
||||
| `traefik/http/services/Service04/weighted/services/1/name` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/services/1/weight` | `42` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/domain` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/httpOnly` | `true` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/maxAge` | `42` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/name` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/path` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/sameSite` | `foobar` |
|
||||
| `traefik/http/services/Service04/weighted/sticky/cookie/secure` | `true` |
|
||||
| `traefik/http/services/Service02/highestRandomWeight/healthCheck` | `` |
|
||||
| `traefik/http/services/Service02/highestRandomWeight/services/0/name` | `foobar` |
|
||||
| `traefik/http/services/Service02/highestRandomWeight/services/0/weight` | `42` |
|
||||
| `traefik/http/services/Service02/highestRandomWeight/services/1/name` | `foobar` |
|
||||
| `traefik/http/services/Service02/highestRandomWeight/services/1/weight` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/followRedirects` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/headers/name0` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/headers/name1` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/hostname` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/interval` | `42s` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/method` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/mode` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/path` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/port` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/scheme` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/status` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/timeout` | `42s` |
|
||||
| `traefik/http/services/Service03/loadBalancer/healthCheck/unhealthyInterval` | `42s` |
|
||||
| `traefik/http/services/Service03/loadBalancer/passHostHeader` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/passiveHealthCheck/failureWindow` | `42s` |
|
||||
| `traefik/http/services/Service03/loadBalancer/passiveHealthCheck/maxFailedAttempts` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/responseForwarding/flushInterval` | `42s` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/0/preservePath` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/0/url` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/0/weight` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/1/preservePath` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/1/url` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/servers/1/weight` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/serversTransport` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/domain` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/httpOnly` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/maxAge` | `42` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/name` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/path` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/sameSite` | `foobar` |
|
||||
| `traefik/http/services/Service03/loadBalancer/sticky/cookie/secure` | `true` |
|
||||
| `traefik/http/services/Service03/loadBalancer/strategy` | `foobar` |
|
||||
| `traefik/http/services/Service04/mirroring/healthCheck` | `` |
|
||||
| `traefik/http/services/Service04/mirroring/maxBodySize` | `42` |
|
||||
| `traefik/http/services/Service04/mirroring/mirrorBody` | `true` |
|
||||
| `traefik/http/services/Service04/mirroring/mirrors/0/name` | `foobar` |
|
||||
| `traefik/http/services/Service04/mirroring/mirrors/0/percent` | `42` |
|
||||
| `traefik/http/services/Service04/mirroring/mirrors/1/name` | `foobar` |
|
||||
| `traefik/http/services/Service04/mirroring/mirrors/1/percent` | `42` |
|
||||
| `traefik/http/services/Service04/mirroring/service` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/healthCheck` | `` |
|
||||
| `traefik/http/services/Service05/weighted/services/0/name` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/services/0/weight` | `42` |
|
||||
| `traefik/http/services/Service05/weighted/services/1/name` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/services/1/weight` | `42` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/domain` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/httpOnly` | `true` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/maxAge` | `42` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/name` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/path` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/sameSite` | `foobar` |
|
||||
| `traefik/http/services/Service05/weighted/sticky/cookie/secure` | `true` |
|
||||
| `traefik/tcp/middlewares/TCPMiddleware01/ipAllowList/sourceRange/0` | `foobar` |
|
||||
| `traefik/tcp/middlewares/TCPMiddleware01/ipAllowList/sourceRange/1` | `foobar` |
|
||||
| `traefik/tcp/middlewares/TCPMiddleware02/ipWhiteList/sourceRange/0` | `foobar` |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue