Expand description
The core implementation for Junction - an xDS dynamically-configurable API load-balancer library.
This crate allows you to build configuration for a dynamic HTTP client and export it to a control plane or pass it directly to an in-process client. Junction configuration is expressible as plain Rust structs, and can be serialized/deserialized with a serde compatible library.
§Core Concepts
§Service
The Junction API is built around the idea that you’re always routing requests to a Service, which is an abstract representation of a place you might want traffic to go. A Service can be anything, but to use one in Junction you need a way to uniquely specify it. That could be anything from a DNS name someone else has already set up to a Kubernetes Service in a cluster you’ve connected to Junction.
§Routes
An HTTP Route is the client facing half of Junction, and contains most of the things you’d traditionally find in a hand-rolled HTTP client - timeouts, retries, URL rewriting and more. Routes match outgoing requests based on their method, URL, and headers. The http module’s documentation goes into detail on how and why to configure a Route.
§Backends
A Backend is a single port on a Service. Backends configuration gives you control over the things you’d normally configure in a reverse proxy or a traditional load balancer. See the backend module’s documentation for more detail.
§Crate Feature Flags
The following feature flags are available:
-
The
kube
feature includes conversions from Junction configuration to and from Kubernetes objects. This feature depends on thekube
andk8s-openapi
crates. See the kube module docs for more detail. -
The
xds
feature includes conversions from Junction configuration to and from xDS types. This feature depends on the [xds-api][xds_api] crate.
Modules§
- backend
- Backends are the logical target of network traffic. They have an identity and a load-balancing policy. See Backend to get started.
- http
- HTTP Route configuration. Routes dynamically congfigure things you might put directly in client code like timeouts and retries, failure detection, or picking a different backend based on request data.
- kube
- Types and re-exports for converting Junction types to Kubernetes objects.
Structs§
- DnsService
- A DNS name to target with traffic.
- Duration
- A wrapper around std::time::Duration that serializes to and from a f64 number of seconds.
- Error
- An error converting a Junction API type into another type.
- Fraction
- A fraction, expressed as a numerator and a denominator.
- Hostname
- AN RFC 1123 DNS domain name.
- Kube
Service - A Kubernetes Service to target with traffic.
- Name
- An RFC 1035 compatible name. This name must be useable as a component of a
DNS subdomain - it must start with a lowercase ascii alphabetic character
and may only consist of ascii lowercase alphanumeric characters and the
-
character. - Regex
- A regular expression.
Enums§
- Service
- A uniquely identifiable service that traffic can be routed to.