Overview
An xDS dynamically-configurable API load-balancer library.
What is it?
Junction is a library that allows you to dynamically configure application level HTTP routing, load balancing, and resilience by writing a few lines of configuration and dynamically pushing it to your client. Imagine all of the features of a rich HTTP proxy that's as easy to work with as the HTTP library you're already using.
Junction does that by pulling endpoints and configuration from an xDS control plane, as follows:
┌─────────────────────┐
│ Client Service │
├──────────┬──────────┤ ┌───────────┐
│ Existing │ Junction ◄────┤ xDS │
│ HTTP │ Client │ │ Control │
│ Library │ Library │ │ Plane │
└────┬─┬───┴──────────┘ └─────▲─────┘
│ │ │
│ └──────────┐ │
┌────▼────┐ ┌────▼────┐ ┌─────┴─────┐
│ Your │ │ Your │ │ K8s API │
│ Service │ │ Service │ │ Server │
└─────────┘ └─────────┘ └───────────┘
Junction is developed by Junction Labs.
Features
Today, Junction allows you to dynamically configure:
- Routing traffic based on HTTP method, path, headers, or query parameters
- Timeouts
- Retries
- Weighted traffic splitting
- Load balancing (Ring-Hash or WRR)
On our roadmap are features like:
- multi-cluster federation
- zone-based load balancing
- rate limiting
- subsetting
- circuit breaking
Supported xDS Control Planes
Today the only xDS server the junction-client regression tests against is
ezbake. Ezbake is a simple xDS control plane for
Junction, which uses the gateway_api to support dynamic configuration.
ezbake
runs in a Kubernetes cluster, watches its running services, and runs
as an xDS control plane to drive the Junction client.
Supported languages and HTTP Libraries
Language | Integrated HTTP Libraries |
---|---|
Rust | None |
Python | requests, urllib3 |
Node.js | fetch() |
Getting started
Project status
Junction is alpha software, developed in the open. We're still iterating rapidly on our client facing API, and our integration into xDS. At this stage you should expect occasional breaking changes as the library evolves.
License
The Junction client is Apache 2.0 licensed.