<p>Kubernetes version: 1.4.5</p>

<p>I have a very simple service with <code>type: NodePort</code>. It only returns some text on <code>/info</code>. I am using the default GKE ingress controller (the L7 Google load balancer) with TLS. If I use the following ingress everything works as expected:</p>

<h2>Working ingress</h2>

<pre><code>apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: global-ingress
  namespace: global
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: tls-secret
  backend:
    serviceName: gate-front
    servicePort: 80
</code></pre>

<hr>

<pre><code>curl -k https://130.211.39.140/info
POD: gate-front-1871107570-ue07p
IP: 10.0.2.26
REQ: /info
</code></pre>

<hr>

<pre><code>$ kubectl describe ing
Name:           global-ingress
Namespace:      global
Address:        130.211.39.140
Default backend:    gate-front:80 (10.0.2.25:8080,10.0.2.26:8080)
TLS:
  tls-secret terminates
Rules:
  Host  Path    Backends
  ----  ----    --------
  * *   gate-front:80 (10.0.2.25:8080,10.0.2.26:8080)
Annotations:
  backends:         {"k8s-be-31966--f3f0bf21d171a625":"HEALTHY"}
  https-forwarding-rule:    k8s-fws-global-global-ingress--f3f0bf21d171a625
  https-target-proxy:       k8s-tps-global-global-ingress--f3f0bf21d171a625
  url-map:          k8s-um-global-global-ingress--f3f0bf21d171a625
</code></pre>

<h2>Broken ingress</h2>

<p>However, if I introduce a rule and leave out the default backend, all requests return <code>default backend - 404</code>. </p>

<pre><code>apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: global-ingress
  namespace: global
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: tls-secret
  rules:
  - http:
      paths:
      - path: /gate
        backend:
          serviceName: gate-front
          servicePort: 80
</code></pre>

<hr>

<pre><code>curl -k https://130.211.33.150/gate/info
default backend - 404
</code></pre>

<hr>

<pre><code>$ kubectl describe ing
Name:           global-ingress
Namespace:      global
Address:        130.211.33.150
Default backend:    default-http-backend:80 (10.0.2.3:8080)
TLS:
  tls-secret terminates
Rules:
  Host  Path    Backends
  ----  ----    --------
  *
        /gate   gate-front:80 (&lt;none&gt;)
Annotations:
  https-forwarding-rule:    k8s-fws-global-global2-ingress--f3f0bf21d171a625
  https-target-proxy:       k8s-tps-global-global2-ingress--f3f0bf21d171a625
  url-map:          k8s-um-global-global2-ingress--f3f0bf21d171a625
  backends:         {"k8s-be-31966--f3f0bf21d171a625":"HEALTHY","k8s-be-32552--f3f0bf21d171a625":"HEALTHY"}
</code></pre>

<p>If I add hosts and use <code>curl -k --resolve ...</code> I get the same behaviour. </p>

<p>I went through the following documentation and examples:</p>

<ul>
<li><a href="http://kubernetes.io/docs/user-guide/ingress/" rel="noreferrer">http://kubernetes.io/docs/user-guide/ingress/</a></li>
<li><a href="https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/README.md" rel="noreferrer">https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/README.md</a></li>
</ul>

<p>Can anyone shed some light on this? </p>

<p><a href="https://github.com/kubernetes/ingress-gce/blob/master/README.md#paths" rel="nofollow noreferrer">https://github.com/kubernetes/ingress-gce/blob/master/README.md#paths</a></p>

<p>Can you look over this part and comment if it solves the issue: </p>

<blockquote>
  <p>Note what just happened, the endpoint exposes /hostname, and the loadbalancer forwarded the entire matching url to the endpoint. This means if you had '/foo' in the Ingress and tried accessing /hostname, your endpoint would've received /foo/hostname and not known how to route it. Now update the Ingress to access static content via the /fs endpoint:</p>
</blockquote>
