Reviewed-on: #2
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. This will become the 'template_dir' in the argument to the LB.
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/
).
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:
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.