Proof of concept for load-balancer implementation
Implement a basic TCP load balancer. Load balancers are used to distribute network load across multiple hosts (or upstreams).
- A reusable library implementing the functionality of the load balancer.
- A server that exposes the library functionality while providing secure communication to clients and an authorization layer.
Assemble full prototype of required components to route authenticated LB pass-through traffic
This project should serve as a base source of connected components for the XLB project.
- Only forwarding balancer method in this POC is Round-Robin strategy
- Unit testing limited for POC, only available for Round-Robin validation
- Database layer implemented with Badger to optimize testing of behaviors between optimizations
- Certificate keys limited to RSA to reduce the research time
make tls
Can be achieved by series of commands (imitation of real customer)
curl -k --location 'https://localhost:8083/api/v1/client' \
--header 'Content-Type: application/json' \
--data '{"name": "testuser"}' | jq
{
"uuid": "adcfce79-7048-48ac-a55e-269f3745e6f0",
"key": "dc9bea78b73818aead83bea41d362b84b230a61cc21c8b342112f0176ac78e25",
"name": "testuser",
"createdAt": {
"seconds": 1712087318,
"nanos": 563993000
}
}
curl -k --location --request POST 'https://localhost:8083/api/v1/client/auth' \
--header 'Authorization: Basic YWRjZmNlNzktNzA0OC00OGFjLWE1NWUtMjY5ZjM3NDVlNmYwOmRjOWJlYTc4YjczODE4YWVhZDgzYmVhNDFkMzYyYjg0YjIzMGE2MWNjMjFjOGIzNDIxMTJmMDE3NmFjNzhlMjU='
| jq
{
"Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjM2MDAsImZvbyI6MiwiaXNzIjoieGxiLWF1dGhvcml0eSIsInN1YiI6ImFkY2ZjZTc5LTcwNDgtNDhhY.fvXV8zrQS_WjxBaH6HVv-5QwnkKmyfw-05N5wlXEhfuMOLCePBaY6eyxY7tibdVY1b3nEuy_zm6SyLrqu-mSbnjyQl4mBCVUgxmnpR5XWuZCPIddpR4NCJuhxm8YMDPFiVaTUC-kGEVYC--vUQ9_4FenRJ31sq-GpYage5muxI1ZGLH-FwCuwzVgnHEkDHJ01oAOaE9G2tc2lVbjDd3OO-TgjeuIHkRjC7wZ2C5w82PbVf8IZOQnEjgvTJba5MkWt8HfYsplYqtsvMhAmKRvfJ67W24aTNel4y6X0VuL2Gsfd6JItKIzyMil_-hvAPR6QmItYa_v9dwoLu42b5OBE1JvQkEPKe9Z8gwP8NhApQ5UFbaoeYBYnGtT-lSlnNrgHXq3LMemv2ELg6coIIEdw_4sobbtQHVg8BnwUwlWKn22yjiiL-qRQqzYzMGk6Z0kGQ9trI-ON3yxTe1BNqj1eDrsc0eu4EpNivqh3tAM8J1LK4PdqCRmxABRYSpJumpm"
}
curl -k --location 'https://localhost:8083/api/v1/client/frontend' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIwOTM3MDAsImZvbyI6MiwiaXNzIjoieGxiLWF1dGhvcml0eSIsInN1YiI6ImFkY2ZjZTc5LTcwNDgtNDhh.PRepRH8pwzlP0gGP9LJuw5Sw_FrKTuCfuGZiwVNnVdCYhJ6i7jFfWLThNqKEX4A3chBXkj90W3eucCj_SrdGDbdGEPnX9lKKLuaTWcLPIDODTFAZManVFj7Fma-xDbYEBrUvZ4EGnvJpz8WKE_2fqE_doJ7nXWHR3Vmh9MPKCw4zcsUvxB5yRMqLnVC4ZrP28Jbj0Nou4L2m_Oh_8qFMXJWXXsoanFFhpwxqyHcR1eAUaQ5vw5z3USEVid86a6oNCLDy_AlBKoyvaXP0m0hSc27qoktMOl3WN5HMGpDrz_U0S8QXjJl6c_Dak0TLhto-x9CF21Ku5kKofE92KD1u_J6IvKOcXDctATlXs-OjOlgyOCd5k6X-i57AgQ5vEpKU4MB_Kv8eAGAAtdHfDftAxWt1eEe5dCsCgZU7sO_m8tDnLwRS1c-OF89Hh9M5b-oAjSlPE0fOwvU118wjqIchjwbKrfw_VNjyVnQfyDQnfANZ6hsPddVO11iyDvlts361' \
--data '{
"active": true,
"strategy": 0,
"routeTimeoutSec": 30,
"routes": [
{
"dest": "142.250.189.174:80",
"capacity": 10
}
]
}'
{
"uuid": "1a916327-b70e-423d-8ff6-664dc4d98cde",
"active": true,
"routeTimeoutSec": 30,
"clientId": "adcfce79-7048-48ac-a55e-269f3745e6f0",
"accessKey": "1074dfb781ecc4917ff6fc714db3b92607498fe648b033427a2605d12be8356a",
"routes": [
{
"dest": "142.250.189.174:80",
"capacity": 10
}
]
}
curl -k --location 'https://localhost:8083/api/v1/client/frontend/1a916327-b70e-423d-8ff6-664dc4d98cde/tls' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIwOTM3MDAsImZvbyI6MiwiaXNzIjoieGxiLWF1dGhvcml0eSIsInN1YiI6ImFkY2ZjZTc5LTcwNDgtND.PRepRH8pwzlP0gGP9LJuw5Sw_FrKTuCfuGZiwVNnVdCYhJ6i7jFfWLThNqKEX4A3chBXkj90W3eucCj_SrdGDbdGEPnX9lKKLuaTWcLPIDODTFAZManVFj7Fma-xDbYEBrUvZ4EGnvJpz8WKE_2fqE_doJ7nXWHR3Vmh9MPKCw4zcsUvxB5yRMqLnVC4ZrP28Jbj0Nou4L2m_Oh_8qFMXJWXXsoanFFhpwxqyHcR1eAUaQ5vw5z3USEVid86a6oNCLDy_AlBKoyvaXP0m0hSc27qoktMOl3WN5HMGpDrz_U0S8QXjJl6c_Dak0TLhto-x9CF21Ku5kKofE92KD1u_J6IvKOcXDctATlXs-OjOlgyOCd5k6X-i57AgQ5vEpKU4MB_Kv8eAGAAtdHfDftAxWt1eEe5dCsCgZU7sO_m8tDnLwRS1c-OF89Hh9M5b-oAjSlPE0fOwvU118wjqIchjwbKrfw_VNjyVnQfyDQnfANZ6hsPddVO11iyDvlts361'
{
"key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlHNVFJQkFBS0NBWUVBdjdTTm1UeGR5ZS9adkNIc3BoN0hhMVJURlIwRzk2WjA5bEhmWXdPVVJhVWhPMk1vCkxyNEFTL3A5Sit2STJRd25aTW12SVUwYWtIZngzSDZTVWJ4Z3hiREJ5VUVyTVlkcS9VUnVHNGlnQmpyVXJ3WUwKcDlVb0xQeG5aZ0dZSnIyK1FKUktPcC9kYVk3WDJXUU5UQ0ZXT1RHZ3pVUkhEdXlNeE9nMm8vaG9TS2pPTENuVApPY2NPaVhZeU9xZ0pEaXJKWDBkdEg0RG81ekNPendTbGx2SmsvNFcvWitTTlJ2UzlYcFRjbHpuMTBKakVkSUtNCmhFd3lCaG9CNGp1QjRtOWFIaWwzT0Z6OHFmUHN1a08rOE1xYlNMQUhWd2QvRGhUUzk2akl4TDlWUE4vemZlcjEKbEU2MWNCdi9PaVZKbVRNY3JYZ0JTOXMyTGZKT0V2bUlWVk5XYWhIQVRqb2U5SVZQU1ZneGh3cnFFOUhjWEZSMgo4MWhERkY0dXQ2ZnBWYnl2clFjWDlEQzFabGx5RVBubEcvbUp5WXpkOE02bnZxYnpCd0xSOFlnR3lSSGhmcmdZCmxuNFNnbEthb0ZkaGM5TC90S3dVbFcvcTRuQllEOTlaMzhrYVFtdnVHUnFnR0cwKzNlclJXNEZBY2s2QWtVRzgKV0ptc0x5eGRwekZsOXh0NUFnTUJBQUVDZ2dHQkFLYWxRM256ZWV3eTdlbVc2K3EwVXRKQUtVRHZUTUUzRi9HUAoxa3B5TUJBaXJiSzhUWS9rWnNtbFkrcXlFcFJxOWt1czd1cFo1ait6cExIeDdTdlVQNk5hTmZySEJjODJVcEQ3ClRXUHQ3bjI3NG1xTExOS21meGdzQ1k0bzBLVE15SGZHOElmcHRFVXdnUDVlOVJnNjJvTTVXdmxVNHhoY0ZUcU8KU2dGYnpQdHNrbHpkdHRwQTZhZ2c4U1VBTVc3NVRyZmVsVU9QZ2VhRzFYMnNJbTRISkRqamdUSEZBZkt1aVhlUQptL2x4enZlWDlSNzY1VCtVSk9BYzk0bzhCSHBjSkUzbWo3UVFOR05qTDE1clNSZzkyR1lnZ3p2YjBLSktqZzJhCnpVencvK2U1d1hEcitubVI4N2xEQkkwUWc3b3lFMGxUS24vQ0pleTJVaWRDYVI1dmNCNnBOUEc3VjgwclFIYTAKdWFHUWp2VjhPYTdTWkhZSE1vWEtoVHJxUGtLOU9PRU84WmFIWFpsRHpPNmxoWTVEUFJhRmFFeDcyVVAxQW1SYQppTDdjZ3lzTG40Q3JoRktYaFhoNzB5WjdSSEc2TnB0ZDlUejlHazRCYnI3T1Z6L0F6UVEvV2FtdWl5Yk5ucnRUCjBuQVZCNWVzV2twV2g5blJPOG9ZZk5sblFMUnBBUUtCd1FES2x0UVJqbmxMZEdWYmd3KytvQ0RwQ3RYY3o1Z2QKWFNxQzZkRWcvSXFBU3RSb3MwdHBob3doS2FuWlNMemtNQ1VpR1I4SGNjVmlEZDkrYURUand2QlgrN1MxWXphTAovdmZMSGdvSll4MDloeVNZRkdpYjBnN0x2aVM1WWhpSG4zdDlLTG1PWUxTa3laeFl4RUhPTkhrWk8vd1BpcitNCmxzWnh2MVhZbG9XMlRYak1sTXAyQzFEUVNKd0xVdVM3QnRrNHBxZGVVaUVhZmF5VDFO5BYTBQMjY3TEE0b2JZdWdYMkkzeWcwVjhBcEVDZ2NFQThqOGw2OXd5MklUa0I2REJURnYrbWlwdQpZY1M4ODZJR09rV0FYelNPa3JzUFlSUzFEOFlCOHJMazBFQytoUlYwdUh2NTVqM0JYTnJDQXFHWFQ2QTltZFRqCjFXQTVwQ1FhdjdZaGgvSG4rQjFEcnZORGhHWVhMY0g4Ny9uNSt1R3U5YTFwb2xHbXlxSHp2bVpQeE5RVjhEWnQKNnpSVlZqbjBPaTd0RmtsWVJnSXowRjNBM1p4NzNYRDY4eXlsa3JtTG5ET25hOG5wK2liS3kzbFAwTCtJdTNFQgpjTVNYSzM5SnpRTVF4UlIxZXlWQ212dmpUK1MyK1F4ZU1yZE5aQzVwQW9IQkFJZFNPRldCMVlPUlBDTGthSi9zClZnOVVMWVpSSkVwNDhPeUJRaS9HZ0nFrQzN2RmxwWlFQcmkKTzZpSmVTdXdHYjlwa0JzYzlaZFBuVGg4RFBXSXJGZG8rSGtmaVdoTEhoZDVjQU1xTU1mcDBNQkI2eTFmNnBUUwplQkZpLy90aHNwRTJKVmZWZG9JMkNScThwUFFDYnpwcVZKREw3MitnN3lmK2F4cHNOMS9KZkZNMW54RWdIR2QrCkNLazRTUDEvbUNlbzB6MTV6b3dTdFZ3R2VWMKc1U0dTA0aUtkQVhZdi82RDlDWmI0enl6Z3JJeWQ5UVkxRjNiUjhkMXdqU1d0TlpadjJFamZTbjVKMGZ3S2JkNQpVTXhoTVc5VlZ2QkFWNUJ5NzhjQ0Q4b2lPeGpmNDNXQVlPanU1OHVTRTMrOTRudVRmTEVQRlJVYmc4a0xnQjVnCmtOWGJvbmU0SXFJdk5GNHd6WXJwL2pSNlcxSEkxTUhXYVRkQ3FPaVY3eHZ6YzRIU1ZZUklaeW5FQ2djQnBhR0dwL3dITApyRUVCclJDTWZxQ3E0dGZBL0p4WG9xekZrNlBKdTV1OW9YR0JRTVhIYSsyTUFlMmpOOXh0ZWcwK294NnBOeUZCCjQ5bitncGlLNHcrMUh3SkphdzdGYzZQdUk3NkdYQmRXeVZMZDNPRjZLVVJHR054S3QxbW4xdFp3SEtpZGVVa0oKVVhXaWd5b3M3TTB3S2ZNck9obEpxRjVhZGRuL1JRcVVMczFNL1pFUTB5dUIxdXkxVTZZcjFtVUloSlFQb05VRQpjZE1IbkE2WXZSajVYNWoyMUlKTlJ1WVlKLzYyR0hEWkpwNExqZVpjYmRPZXVUclAwSWJBa2RFPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV0RENDQXh5Z0F3SUJBZ0lRTjg4bzEwR1JKcUYxc2hqZWNkUEkwREFOQmdrcWhraUc5dzBCQVFzRkFEQTUKTVJZd0ZBWURWUVFHRXcxVmJtbDBaV1FnVTNSaGRHVnpNUTR3REFZRFZRUUtFd1Y0WkdseVpURVBNQTBHQTFVRQpBd3dHWTJGZmVHeGlNQ0FZRHpBd01ERXdNVEF4TURBd01EQXdXaGNOTWpVd05EQXlNakExTXpJMVdqQjZNUzB3Ckt3WURWUVFLRXlSaFpHTm1ZMlUzT1MwM01EUTRMVFE0WVdNdFlUVTFaUzB5TmpsbU16YzBOV1UyWmpBeFNUQkgKQmdOVkJBTVRRREV3TnpSa1ptSTNPREZsWTJNME9URTNabVkyWm1NM01UUmtZak5pT1RJMk1EYzBPVGhtWlRZMApPR0l3TXpNME1qZGhNall3TldReE1tSmxPRE0xTm1Fd2dnR2lNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJqd0F3CmdnR0tBb0lCZ1FDL3RJMlpQRjNKNzltOElleW1Ic2RyVkZNVkhRYjNwblQyVWQ5akE1UkZwU0U3WXlndXZnQkwKK24wbjY4alpEQ2RreWE4aFRScVFkL0hjZnBKUnZHREZzTUhKUVNzeGgycjlSRzRiaUtBR090U3ZCZ3VuMVNncwovR2RtQVpnbXZiNUFsRW82bjkxcGp0ZlpaQTFNSVZZNU1hRE5SRWNPN0l6RTZEYWorR2hJcU00c0tkTTV4dzZKCmRqSTZxQWtPS3NsZlIyMGZnT2puTUk3UEJLV1c4bVQvaGI5bjVJMUc5TDFlbE55WE9mWFFtTVIwZ295RVRESUcKR2dIaU80SGliMW9lS1hjNFhQeXA4K3k2UTc3d3lwdElzQWRYQjM4T0ZOTDNxTWpFdjFVODMvTjk2dldVVHJWdwpHLzg2SlVtWk14eXRlQUZMMnpZdDhrNFMrWWhWVTFacUVjQk9PaDcwaFU5SldER0hDdW9UMGR4Y1ZIYnpXRU1VClhpNjNwK2xWdksrdEJ4ZjBNTFZtV1hJUStlVWIrWW5Kak4zd3pxZStwdk1IQXRIeGlBYkpFZUYrdUJpV2ZoS0MKVXBxZ1YyRnowdiswckJTVmIrcmljRmdQMzFuZnlScENhKzRaR3FBWWJUN2Q2dEZiZ1VCeVRvQ1JRYnhZbWF3dgpMRjJuTVdYM0cza0NBd0VBQWFOMU1ITXdEZ1lEVlIwUEFRSC9CQVFEQWdXZ01CMEdBMVVkSlFRV01CUUdDQ3NHCkFRVUZCd01DQmdnckJnRUZCUWNEQVRBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkZoVkI4M20KOEdMNXJ4OXdyOG1RRjhSRWtWQmxNQk1HQTFVZEVRUU1NQXFCQ0hSbGMzUjFjMlZ5TUEwR0NTcUdTSWIzRFFFQgpDd1VBQTRJQmdRQzdzeUUrNUM5aTRaYXVMN3FLaTZidDZRd2NoOTJrbURmY0dYYVloRGpFZzZINERNRWE0cGNICm95ejlkTEJQaWJsS1ZMc0h0YUU4eXJtVDBOMkpBRGl0dDVrSEw4V3pDb2c2N0V3V0lTa0ptSW5VY1lzQklDV2oKR3U3aG54LzhLMTYvbTZTZEtmWitOUXpTTDgvZmw5Z3FTQklNMEhldjZxSXlZbXk4d1VUpFWlA4eHMxenJjNTlaczhHTEF6TTJMdWJMcnZ4SEJDRmtaUHRzcVRoQWJJWmpECjIzK0pLTHNFbmsyWkpjeTRMZG5Sa0MvUTk1UG9Qekk2anQ4R0Y0ZHhZSHZzS2pvcEx0VDhRS05MdmJ0V1FYaHUKVnVRNmRVTzNOMVVGYlhESEludkpSckxFcEoyNktUFhScndhNApMcVE3cDN0VjFEbE8yZGhYQnRPR3dkOSt0VEErdUx3M1AxUWU2VFBsS3l1aU1YTm5CMUk4V2M0UkhVRk5ndU1FGTGZYMTBETEt5eC9GN3lrVWdiNmlDa0E3a1VwcGM3Y2IKbEFldEhTSzNmNHc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
}
- cert.pem
- key.pem
Server
go run main.go
Client
cd testing/balancer-client
go run client.go