High-performance S3 ingress controller for Ceph RGW clusters using HAProxy and ExaBGP
Project description
Herr Ober
High-Performance S3 Ingress Controller (BGP/ECMP)
Herr Ober ("Head Waiter") is a lightweight, high-throughput (50GB/s+) ingress controller designed for Ceph RGW clusters. It uses HAProxy 3.3 (AWS-LC) for SSL offloading and ExaBGP for Layer 3 High Availability via ECMP.
Supported: Ubuntu, Debian, RHEL 10+ on Proxmox VMs (KVM)
Documentation
For deep internals, kernel tuning, and failure recovery logic, see architecture.md.
Quick Start
1. Proxmox VM Prerequisites
Before installing, ensure the VM is configured for 50GB/s throughput:
- CPU: Type
host(AES-NI passthrough) - Network:
VirtIOwith Multiqueue enabled (Queues = vCPUs) - Hardware Watchdog: Add device
Intel 6300ESB→ Action:Reset
2. Install
One-liner (recommended):
curl -fsSL https://raw.githubusercontent.com/dirkpetersen/ober/main/install.sh | sudo bash
sudo ober bootstrap
Manual install:
sudo su -
apt install -y pipx
pipx ensurepath
source ~/.bashrc
pipx install herr-ober
ober bootstrap
3. Configure
Interactive wizard to set up BGP, VIPs, backends, and certificates.
sudo ober config
4. Verify
# Check prerequisites and configuration
ober doctor
# View service status
ober status
Usage
CLI Commands
ober bootstrap [path] # Install and set up everything
ober config [--dry-run] # Interactive configuration wizard
ober sync # Update external system whitelists
ober status # Show current state (--json for scripting)
ober start|stop|restart # Service management (stop gracefully withdraws BGP)
ober logs [-f] [-n N] # View logs (--service http|bgp to filter)
ober doctor # Diagnostic checks
ober test # Test BGP connectivity without starting services
ober upgrade # Check and install updates
ober uninstall # Clean removal
Updating Whitelists
Update external system whitelists with Slurm hostlists or IP addresses:
# Update all whitelists (interactive prompts)
ober sync
# Update specific whitelist
ober sync --routers "switch[01-04]"
ober sync --frontend-http "weka[001-100]"
ober sync --backend-http "rgw[01-08].internal"
Checking Health
# Full status with systemd service info
ober status
# JSON output for monitoring integration
ober status --json
# Direct health endpoint
curl http://127.0.0.1:8404/health
Failure & Recovery
| Event | Recovery |
|---|---|
| Node Crash | Traffic fails over via ECMP (instant) |
| OS Freeze | Proxmox Watchdog hard-resets VM (10s) |
| HAProxy Crash | BGP withdraws immediately (BindsTo=) |
| Network Cut | BFD detects and tears down route (~150ms) |
See architecture.md for detailed failure scenarios.
Development
# Clone and install dev dependencies
git clone https://github.com/dirkpetersen/ober.git
cd ober
pip install -e ".[dev]"
# Run tests
pytest
# Lint and format
ruff check .
ruff format .
# Type check
mypy ober/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file herr_ober-0.1.7.tar.gz.
File metadata
- Download URL: herr_ober-0.1.7.tar.gz
- Upload date:
- Size: 48.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81004814f6e1dd843d3343ecded2402244ab330d95d55a28fd370604efe7233b
|
|
| MD5 |
bfb361f98d7555e9793fcad052b5a732
|
|
| BLAKE2b-256 |
7df2e109ac4cf1f551c9e4cf06f327a7c1e5b54fac6ad8bea470fee9e996cd42
|
Provenance
The following attestation bundles were made for herr_ober-0.1.7.tar.gz:
Publisher:
publish-pypi.yml on dirkpetersen/ober
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
herr_ober-0.1.7.tar.gz -
Subject digest:
81004814f6e1dd843d3343ecded2402244ab330d95d55a28fd370604efe7233b - Sigstore transparency entry: 772741354
- Sigstore integration time:
-
Permalink:
dirkpetersen/ober@e835e6fe51cf58b46ec9642d6f74312009f28683 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/dirkpetersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e835e6fe51cf58b46ec9642d6f74312009f28683 -
Trigger Event:
release
-
Statement type:
File details
Details for the file herr_ober-0.1.7-py3-none-any.whl.
File metadata
- Download URL: herr_ober-0.1.7-py3-none-any.whl
- Upload date:
- Size: 40.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b87d4ab9da51732f766c01ea54c88fd51ae015dca55fec6d3fab822ec0a8a58a
|
|
| MD5 |
df8be5fd0f2c2274e52c52b389d7c6ad
|
|
| BLAKE2b-256 |
2dc84bb5bcfa5b94c695f68315729994daf072c05d81eb0d569e26ae185476b3
|
Provenance
The following attestation bundles were made for herr_ober-0.1.7-py3-none-any.whl:
Publisher:
publish-pypi.yml on dirkpetersen/ober
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
herr_ober-0.1.7-py3-none-any.whl -
Subject digest:
b87d4ab9da51732f766c01ea54c88fd51ae015dca55fec6d3fab822ec0a8a58a - Sigstore transparency entry: 772741366
- Sigstore integration time:
-
Permalink:
dirkpetersen/ober@e835e6fe51cf58b46ec9642d6f74312009f28683 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/dirkpetersen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e835e6fe51cf58b46ec9642d6f74312009f28683 -
Trigger Event:
release
-
Statement type: