envoy-acme-xds is a lightweight Envoy xDS control plane written in Rust that automates ACME certificate issuance and renewal. It combines a user-provided static Envoy configuration with dynamic routes required to serve ACME HTTP-01 challenges. It serves listener and cluster configurations via LDS/CDS, and manages TLS certificates via SDS.
- LDS (Listener Discovery Service): Serves Envoy listener configurations.
- CDS (Cluster Discovery Service): Serves Envoy cluster configurations.
- SDS (Secret Discovery Service): Automatically provides TLS certificates obtained via ACME.
- ACME Automation: Handles certificate registration, issuance, and renewal (e.g., via Let's Encrypt).
- Zero-Touch Challenges: Dynamically injects HTTP-01 challenge routes into your port 80 listeners.
Ensure you have Rust and Cargo installed:
cargo install envoy-acme-xdsA container image for each release is published at ghcr.io/csssuf/envoy-acme-xds
Ensure you have Rust and Cargo installed:
cargo build --releaseThe service requires a single YAML configuration file:
cargo run --release -- example-config.yamlThe configuration is split into three main sections: meta, certificates, and envoy.
| Field | Description | Default |
|---|---|---|
storage_dir |
Directory to store ACME account data, keys, and certificates. | Required |
socket_path |
Unix socket path for the xDS gRPC server. | Required |
acme_directory_url |
ACME directory URL. | Let's Encrypt production |
socket_permissions |
Unix socket permissions in octal (e.g., 0o777). |
0o777 |
acme_challenge_port |
Port for HTTP-01 ACME challenge validation. Should match your HTTP listener port. | 80 |
A list of certificates to manage:
certificates:
- name: my-cert
domains:
- example.com
- www.example.comname: The SDS secret name used in Envoy configuration.domains: List of domains to include in the certificate.
This section defines the listeners and clusters that will be served via xDS. The format matches Envoy's V3 API.
- Listeners: Static listener configurations. ACME HTTP-01 challenge routes are automatically prepended to any listener on port 80.
- Clusters: Define your upstream services here.
Configure your Envoy instance to use envoy-acme-xds as its xDS management server via the Unix socket defined in socket_path.
See example-config.yaml for a complete, annotated configuration example.
Apache-2.0