moresandeep opened a new pull request #380:
URL: https://github.com/apache/knox/pull/380
## What changes were proposed in this pull request?
This PR introduces a way for Knox to load balance backend clients. This is
done by introducing a parameter `cookieHaEnabled=true` in `HaProvider` e.g.
```
<provider>
<role>ha</role>
<name>HaProvider</name>
<enabled>true</enabled>
<param>
<name>WHOAMI</name>
<value>enabled=true;maxFailoverAttempts=3;failoverSleep=1000;cookieHaEnabled=true</value>
</param>
</provider>
```
When enabled, knox dispatch will round-robin requests to the URLs listed in
the HA configuration unlike previously where knox only chooses other URL after
a failover.
The sessions are sticky so same session requests will always end up
dispatching to the same backend.
## How was this patch tested?
This patch was manually tested using
1. curl for multiple different sessions
```
(base) ➜ temp curl -iku admin:admin-password
"https://localhost:8443/gateway/test/whoami/"
HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:20:03 GMT
Set-Cookie: KNOXSESSIONID=node0flaeprbtixj919ozympe23muc2.node0;
Path=/gateway/test; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/test; Max-Age=0; Expires=Sun,
04-Oct-2020 19:20:04 GMT
Set-Cookie:
KNOX_BACKEND-WHOAMI=4336ad0a09ba5de5c19d294a6e1be4bd5b0aa62bc0537b2c1951ad50b1aca033;
Path=/gateway/test; Secure; HttpOnly
Content-Length: 10
SERVER 1
(base) ➜ temp curl -iku admin:admin-password
"https://localhost:8443/gateway/test/whoami/"
HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:20:05 GMT
Set-Cookie: KNOXSESSIONID=node01bynsokjpm43t1ag2zogir8wht3.node0;
Path=/gateway/test; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/test; Max-Age=0; Expires=Sun,
04-Oct-2020 19:20:05 GMT
Set-Cookie:
KNOX_BACKEND-WHOAMI=d2eea4def3bbb002420943cc4d7983627cf7132b6154a400597c379a1254189b;
Path=/gateway/test; Secure; HttpOnly
Content-Length: 10
SERVER 2
```
2. curl for sticky sessions
```
(base) ➜ temp curl -iku admin:admin-password -c cookies.txt -b cookies.txt
"https://localhost:8443/gateway/test/whoami/"
HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:22:05 GMT
Set-Cookie: KNOXSESSIONID=node0117mojjq6uevh1p1nl2v5iumgo5.node0;
Path=/gateway/test; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/test; Max-Age=0; Expires=Sun,
04-Oct-2020 19:22:06 GMT
Set-Cookie:
KNOX_BACKEND-WHOAMI=d2eea4def3bbb002420943cc4d7983627cf7132b6154a400597c379a1254189b;
Path=/gateway/test; Secure; HttpOnly
Content-Length: 10
SERVER 2
(base) ➜ temp curl -iku admin:admin-password -c cookies.txt -b cookies.txt
"https://localhost:8443/gateway/test/whoami/"
HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:22:06 GMT
Content-Length: 10
SERVER 2
(base) ➜ temp curl -iku admin:admin-password -c cookies.txt -b cookies.txt
"https://localhost:8443/gateway/test/whoami/"
HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:22:07 GMT
Content-Length: 10
SERVER 2
```
3. Browser
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]