I have the following setup:

  • GKE cluster with private nodes
  • NAT router that provides outbound internet access for the nodes with a static IP
  • nginx ingress controller in default setup (as per docs)

the nginx ingress controller creates its own load balancer with its own external IP, but when I curl that IP, I get an empty response instead of the default nginx backend.

I am not sure whether there is an issue between the load balancer and the instance group, with the load balancer itself or something else.


In the provided scenario, with no more information than the design, it'd be very demanding to troubleshoot this issue. There are a few components that may be causing this behavior: firewalls, health checks, nginx server backend configuration...

In order to help you further or to receive better assistance, It'd be very helpful if you can provide a bit more information regarding your issue: error messages, Ingress controller configuration, steps or guide you are following to achieve this.

Please be aware to not share any information that could affect your privacy and security.

In the meantime, I have found this Ingress with NGINX controller on Google Kubernetes Engine document which explains step by step how to deploy the NGINX Ingress Controller on Google Kubernetes Engine. This information may be useful in your case.

  • just FYI, there are no error messages, ingress controller config is the plain default if following thee deployment indications from the nginx ingress documentation (same for everything else - just start a clean GCP trial, nothing else ever deployed there, no firewall rules except what GKE generates). However, the issue only happened if following the steps to deploy default nginx ingress controller config for GKE (eg: create service account + common yml + the specific config for GKE), if doing it with helm then it's ok. – Andrei Dascalu Oct 27 '19 at 9:07
  • @AndreiDascalu as per the document you shared. Did you check your GKE version? ("If you are using a Kubernetes version previous to 1.14, you need to change kubernetes.io/os to beta.kubernetes.io/os at line 217 of mandatory.yaml") – Marcel P Oct 29 '19 at 2:58
  • Yes. I did 2 cases, the only difference being the cluster type (private vs public). Public cluster + 'manual' nginx setup (as in, not helm) = works. Private cluster + non-helm nginx setup = fails. Private cluster + helm nginx setup = works. All of them using version 1.14.7 – Andrei Dascalu Oct 31 '19 at 11:24

I do not have a definitve cause, all I can say is that if following the steps for GKE at https://kubernetes.github.io/ingress-nginx/deploy/ on a fresh GCP trial account (on a private node cluster with a catch-all NAT with fixed IP), then accessing the public LB IP gives an empty response. Steps (to have empty response instead of default backend): - fresh squeaky clean GCP account (like a trial) - GKE cluster with private nodes - fixed IP and basic NAT covering the entire zone - deploy Nginx following the docs using kubectl apply (create service account + common part + gke specific step)

If doing it with helm (steps on the same page, basically service account + helm install), it's all good.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.