2025-03-29 22:44:06 -07:00
|
|
|
# A simple Kubernetes load balancer
|
|
|
|
|
|
|
|
|
|
Configures nginx to forward connections to your node IPs.
|
|
|
|
|
Services should be declared as NodePort, which means that they
|
|
|
|
|
open a port on all nodes. When the request lands on any node,
|
|
|
|
|
it is forwarded to the correct pod via the network mesh kubernetes
|
|
|
|
|
is using. In theory, there is one a hop penalty.
|
|
|
|
|
|
|
|
|
|
But lets be honest. You're running with a single LB, probably a GCE free
|
|
|
|
|
tier N1 VM. That extra hop doesn't matter.
|
|
|
|
|
|
|
|
|
|
## Config
|
|
|
|
|
|
|
|
|
|
Configure nginx to do what you want, test it. Use any Node IP for your testing.
|
2025-03-30 00:09:49 -07:00
|
|
|
This will become the 'template_dir' in the argument to the LB.
|
2025-03-29 22:44:06 -07:00
|
|
|
|
2025-03-30 00:09:49 -07:00
|
|
|
Move that directory to somewhere new, i.e. `/etc/nginx-template/`. Make
|
|
|
|
|
a symlink from that new directory to the old one (i.e.,
|
|
|
|
|
`ln -s /etc/nginx-template /etc/nginx/`).
|
2025-03-29 22:44:06 -07:00
|
|
|
|
2025-03-30 00:09:49 -07:00
|
|
|
Make a workspace directory for this tool; it will write configs to this folder
|
|
|
|
|
before updating the symlink you created above. It needs to be persistent so on
|
|
|
|
|
server reboot the service starts ok (i.e., `mkdir /var/skubelb/`).
|
|
|
|
|
|
|
|
|
|
Make sure the user running the tool has read access to the template folder, read-write
|
|
|
|
|
access to the workspace folder and config symlink.
|
|
|
|
|
|
|
|
|
|
Run the server with a command like:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
skubelb --needle some_node_ip \
|
|
|
|
|
--workspace_dir /var/skubelb \
|
|
|
|
|
--config_symlink /etc/nginx \
|
|
|
|
|
--template_dir /etc/nginx-template
|
|
|
|
|
--listen 0.0.0.0:8080
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Replacing `some_node_ip` with the node IP you used during the initial setup.
|
|
|
|
|
|
|
|
|
|
Next, configure the Kubernetes nodes to POST `http://loadbalancer:8080/register` when
|
|
|
|
|
they started, and DELETE `http://loadbalancer:8080/register` when they shutdown.
|