Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documentation/questions - High availability #398

Open
absolutejam opened this issue Dec 15, 2024 · 0 comments
Open

Documentation/questions - High availability #398

absolutejam opened this issue Dec 15, 2024 · 0 comments

Comments

@absolutejam
Copy link

absolutejam commented Dec 15, 2024

Hey!

First of all, thanks for creating Kilo - it seems like a really useful project for providing wireguard to Kubernetes clusters.

I've been experimenting with Kilo and my aim is to build a multi-cluster mesh with it, but I want to understand the optimal mode of operaion high-availability features.

Obviously there is leader-election within the same location, but it's not clear to me how we can identify the current leader - Is it just by the node that currently contains the kilo.squat.ai/wireguard-ip annotation? Would it potentially be worth exposing this as a (read-only) CRD?

Also, if I wanted to connect 2 clusters, while I understand that only one node is active at a time, would it make sense to add all nodes from both clusters as Peers for redundancy? And additionally, should Kilo/kgctl expose a node's keys even if it's not a leader, for this reason?

Or would it make more sense to have an external floating IP/load-balancer that targets the active node, and if so, that might potentially mean exposing a HTTP endpoint for healthchecks.

Additionally, I noticed there's logic to check for an existing key, or generate one if it is absent (mesh.New). I am considering leveraging a volume to persist keys for my nodes (still one unique key per node), and so that they are deterministic - will this cause any issues? And currently, what is the lifecycle of the key - Is it deterministic in any way (ie. based on node name) or is it potentially a new key every time the DaemonSet is scheduled? (It looks like the latter)

Happy to contribute to the docs & example manifests if it helps out!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant