It's nice to have a load balancer to dynamically distribute incoming traffic across nodes inside Kubernetes cluster. However, it is a bit of overkill when you are running your side projects on GKE with a single node and it costs additional ~$20 a month for an otherwise inexpensive cluster.
We could avoid this by running ingress controller on
hostPort which exposes http ports via the host IP. Changing the service type to
NodePort prevents GCP from creating forwarding rules in Google Load Balancer. Using nginx-ingress Helm chart we can easily achieved this by setting the values as below:
I'm not a big fan of Helm charts in general, so here I'm just using it to generate the yaml configurations and then manually apply it using
helm fetch stable/nginx-ingress --untar --untardir nginx helm template nginx/nginx-ingress --name nginx-ingress --values values.yml > k8s.yml kubectl apply -f k8s.yml
Ideally, in a production system I would recommend you to use a load balancer as the cost out weights the benefits.