<p>GKE Ingress: <a href="https://cloud.google.com/kubernetes-engine/docs/concepts/ingress" rel="nofollow noreferrer">https://cloud.google.com/kubernetes-engine/docs/concepts/ingress</a></p>

<p>Nginx Ingress: <a href="https://kubernetes.github.io/ingress-nginx/" rel="nofollow noreferrer">https://kubernetes.github.io/ingress-nginx/</a></p>

<p><strong>Why GKE Ingress</strong></p>

<p>GKE Ingress can be used along with Google's managed SSL certificates. These certificates are deployed in edge servers of load balancer which results in very low TTFB (time to first byte)</p>

<p><strong>What's wrong about GKE Ingress</strong></p>

<p>The HTTP/domain routing is done in the load balancer using 'forward rules' which is very pricy. Costs around $7.2 per rule. Each domain requires one rule. </p>

<p><strong>Why Nginx Ingress</strong></p>

<p>Nginx Ingress also creates (TCP/UP) load balancer where we can specify routing of HTTP/domain using ingress controller. Since the routing is done inside the cluster there are no additional costs on adding domains into the rules</p>

<p><strong>What's wrong about Nginx Ingress</strong></p>

<p>To enable SSL, we can use cert-manager. But as I mentioned above, Google's managed certificate deploy certificates in edge servers which results in very low latency</p>

<p><strong>My Question</strong></p>

<p>Is it possible to use both of them together? So that HTTPS requests first hit GKE ingress which will terminate SSL and route the traffic to Nginx ingress which will route it to corresponding pods</p>

<p>Is not possible to point an <code>Ingress</code> to another <code>Ingress</code>. Furthermore and in your particular case, is also not possible to point a <code>GCE ingress class</code> to Nginx since it <a href="https://cloud.google.com/kubernetes-engine/docs/how-to/load-balance-ingress" rel="nofollow noreferrer">relies in an HTTP(S) Load Balancer</a>, which can only have GCE instances/<a href="https://cloud.google.com/compute/docs/instance-groups/" rel="nofollow noreferrer">instances groups</a> (basically the node pools in GKE), or <a href="https://cloud.google.com/storage/docs/json_api/v1/buckets" rel="nofollow noreferrer">GCS buckets</a> as <a href="https://cloud.google.com/load-balancing/docs/backend-service" rel="nofollow noreferrer">backends</a>.</p>

<p>If you were to deploy an Nginx ingress using GKE, it will spin up a <a href="https://cloud.google.com/load-balancing/docs/network/" rel="nofollow noreferrer">Network Load Balancer</a> which is not a valid backend for the HTTP(S) Load Balancer.</p>

<p>So is neither possible via <code>Ingress</code> nor GCP infrastructure features. However, if you need the <code>GCE ingress class</code> to be hit first, and then, manage further routing with Nginx, you might want to consider having Nginx as a Kubernetes <a href="https://kubernetes.io/docs/concepts/services-networking/service/" rel="nofollow noreferrer">Service</a>/<a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" rel="nofollow noreferrer">Deployment</a> to manage the incoming traffic once is within the cluster network.</p>

<p>You can create a <a href="https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#creating-a-service" rel="nofollow noreferrer">ClusterIP</a> service for internally accessing your Nginx deployment and from there, using cluster-local <a href="https://kubernetes.io/docs/concepts/services-networking/service/#dns" rel="nofollow noreferrer">hostnames</a> to redirect to other services/applications within the cluster.</p>
