https://github.com/swisscom/cf-gobetween
gobetween - ready for Cloud Foundry
https://github.com/swisscom/cf-gobetween
cloud-foundry go
Last synced: 8 months ago
JSON representation
gobetween - ready for Cloud Foundry
- Host: GitHub
- URL: https://github.com/swisscom/cf-gobetween
- Owner: swisscom
- License: other
- Created: 2019-01-29T09:59:25.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-16T15:15:40.000Z (over 1 year ago)
- Last Synced: 2025-03-04T22:02:05.426Z (over 1 year ago)
- Topics: cloud-foundry, go
- Homepage:
- Size: 13.4 MB
- Stars: 0
- Watchers: 19
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README

**gobetween** - modern & minimalistic load balancer and reverse-proxy for the :cloud: Cloud era.
**Current status**: *Under active development*. Currently in use in several highy loaded production environments.
## Features
* [Fast L4 Load Balancing](https://github.com/yyyar/gobetween/wiki)
* **TCP** - with optional [The PROXY Protocol](https://github.com/yyyar/gobetween/wiki/Proxy-Protocol) support
* **TLS** - [TLS Termination](https://github.com/yyyar/gobetween/wiki/Protocols#tls) + [ACME](https://github.com/yyyar/gobetween/wiki/Protocols#tls) & [TLS Proxy](https://github.com/yyyar/gobetween/wiki/Tls-Proxying)
* **UDP** - with optional virtual sessions
* [Clear & Flexible Configuration](https://github.com/yyyar/gobetween/wiki/Configuration) with [TOML](config/gobetween.toml) or [JSON](config/gobetween.json)
* **File** - read configuration from the file
* **URL** - query URL by HTTP and get configuration from the response body
* **Consul** - query Consul key-value storage API for configuration
* [Management REST API](https://github.com/yyyar/gobetween/wiki/REST-API)
* **System Information** - general server info
* **Configuration** - dump current config
* **Servers** - list, create & delete
* **Stats & Metrics** - for servers and backends including rx/tx, status, active connections & etc.
* [Discovery](https://github.com/yyyar/gobetween/wiki/Discovery)
* **Static** - hardcode backends list in config file
* **Docker** - query backends from Docker / Swarm API filtered by label
* **Exec** - execte arbitrary program and get backends from it's stdout
* **JSON** - query arbitrary http url and pick backends from response json (of any structure)
* **Plaintext** - query arbitrary http and parse backends from response text with customized regexp
* **SRV** - query DNS server and get backends from SRV records
* **Consul** - query Consul Services API for backends
* **LXD** - query backends from LXD
* [Healthchecks](https://github.com/yyyar/gobetween/wiki/Healthchecks)
* **Ping** - simple TCP ping healtcheck
* **Exec** - execute arbitrary program passing host & port as options, and read healtcheck status from the stdout
* **Probe** - send specific bytes to backend (udp, tcp or tls) and expect correct answer (bytes or regexp)
* [Balancing Strategies](https://github.com/yyyar/gobetween/wiki/Balancing) (with [SNI](https://github.com/yyyar/gobetween/wiki/Server-Name-Indication) support)
* **Weight** - select backend from pool based relative weights of backends
* **Roundrobin** - simple elect backend from pool in circular order
* **Iphash** - route client to the same backend based on client ip hash
* **Iphash1** - same as iphash but backend removal consistent (clients remain connecting to the same backend, even if some other backends down)
* **Leastconn** - select backend with least active connections
* **Leastbandwidth** - backends with least bandwidth
* Integrates seamlessly with Docker and with any custom system (thanks to Exec discovery and healtchecks)
* Single binary distribution
## Architecture

## Usage
Change `manifest.yml` and `config/gobetween.toml` according to your needs and get started instantly.
All configuration options and descriptions are available in the [official docs](http://gobetween.io/documentation.html).
Happy `cf push` -ing!
## Performance
It's Fast! See [Performance Testing](https://github.com/yyyar/gobetween/wiki/Performance-tests)
## The Name
It's play on words: gobetween ("go between").
Also, it's written in Go, and it's a proxy so it's something that stays between 2 parties :smile:
## License
MIT. See LICENSE file for more details.
## Authors & Maintainers
- [Yaroslav Pogrebnyak](http://pogrebnyak.info)
- [Nick Doikov](https://github.com/nickdoikov)
- [Ievgen Ponomarenko](https://github.com/kikom)
- [Illarion Kovalchuk](https://github.com/illarion)
## Logo
Logo by [Max Demchenko](https://www.linkedin.com/in/max-demchenko-116170112)