Skip to content

hippalus/umay

Repository files navigation

Umay: Rust-based TLS Proxy and Load Balancer

Umay is an experimental, high-performance TLS proxy and load balancer written in Rust. It's designed to provide secure and efficient traffic management for microservices architectures.

For those interested in the origin of the name "Umay," you can learn more about it here.

Features

  • TLS termination and proxying
  • Multiple load balancing algorithms (Round Robin, Random, Least Connection, Ip Hashing)
  • Dynamic backend discovery (DNS-based and local configuration)
  • Configurable via YAML files and environment variables
  • Metrics collection
  • Graceful shutdown

Configuration

Umay can be configured using YAML files and environment variables. See config.rs for available options.

Quick Start

To quickly run and test Umay using Docker Compose:

  • Ensure you have Docker and Docker Compose installed.
  • Clone this repository and navigate to the project directory.
  • Start the services:
docker-compose up --build

Test the proxy:

openssl s_client -connect localhost:9994

If working correctly, you should see a TLS handshake followed by an echo response from one of the backend servers.

To stop the services:

docker-compose down

Development Status

This project is under active development and is considered experimental. Use in production environments is not recommended at this time.

Contributing

Contributions are welcome! Please review our Project Plan before submitting a Pull Request. We appreciate any feedback, bug reports, or feature requests.

License

This project is licensed under the MIT License.

Acknowledgements

We would like to acknowledge the Rust community for their excellent libraries and resources that have greatly supported this project. Additionally, inspiration was drawn from projects like linkerd2-proxy, Pingora by Cloudflare, Istio Ztunnel and NGINX

About

Rust-based TLS Proxy and Load Balancer

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published