Crate junction_api
source ·Expand description
The Junction configuration API. 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 expressable as plain Rust strucs, and can be serialized/deserialized with a serde compatible library.
All of the configuration here should be correct by construction - if you can create a struct, it’s valid Junction configuration. Different representations of the same configuration are possible, and clients and control planes may normalize your configuration differently, so when writing tests for your configuration be aware that it may be normalized while converting between different formats or data sources.
§Core Concepts
§Targets
The Junction API is built around the idea of a traffic Target, a a unique identifier for a place to send traffic. Targets are logical; a Kubernetes Service target represents the entire service, running anywhere in a multi-cluster deployment, not an individual Pod or Node or Service object.
§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. The http module’s documentation goes into detail on how and why to configure a Route.
§Backends
A Backend is the Service oriented half of Junction configuration. Backends configuration gives you control over the things you’d normally configure in a reverse proxy or a traditional load balancer, like load balancing. 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§
- Backends are the logical target of network traffic. They have an identity and a load-balancing policy. See Backend to get started.
- Types and re-exports for converting Junction types to Kubernetes objects.
Structs§
- A target and port together uniquely represent a Backend.
- A DNS name to target with traffic.
- A wrapper around std::time::Duration that serializes to and from a f64 number of seconds.
- An error converting a Junction API type into another type.
- A fraction, expressed as a numerator and a denominator.
- AN RFC 1123 DNS domain name.
- A Kubernetes Service to target with traffic.
- 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. - A regular expression.
- A virtual hostname.
VirtualHosts
represent the primary layer of indirection in Junction. Traffic sent to aVirtualHost
is routed to an appropriate backend based on the content of the request.
Enums§
- A traffic target. Traffic targets are abstract, uniquely identifiable places to route traffic, like a DNS name or a Kubernetes Service.