<p>I am setting up a minimal Kubernetes cluster on localhost on a Linux machine (starting with hack/local-up-cluster from the checked out repo). In my deployment file I defined an ingress, which should make the services, which are deployed in the cluster, accessible from the outside. Deployment.yml:</p>

<pre><code>---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: foo-service-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: foo-service
    spec:
      containers:
        - name: foo-service
          image: images/fooservice
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 7778
---
apiVersion: v1
kind: Service
metadata:
  name: foo-service-service
spec:
  ports:
    - port: 7778
  selector:
    app: foo-service
  type: NodePort
---    
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-gateway-ingress
spec:
  rules:
  - host:
    http:
      paths:
      - path: /foo
        backend:
          serviceName: foo-service-service
          servicePort: 7779
      - path: /bar
        backend:
          serviceName: bar-service-service
          servicePort: 7776
</code></pre>

<p>I can not access the services. kubectl describe shows the following for my ingress:</p>

<pre><code>Name:           api-gateway-ingress
Namespace:      default
Address:        
Default backend:    default-http-backend:80 (&lt;none&gt;)
Rules:
  Host  Path    Backends
  ----  ----    --------
  * 
        /foo    foo-service-service:7779 (&lt;none&gt;)
        /bar    bar-service-service:7776 (&lt;none&gt;)
Annotations:
Events: &lt;none&gt;
</code></pre>

<p>Is it because there is not address set for my ingress, that it is not visible to outside world yet?</p>

<p>An <code>Ingress</code> resource is just a definition for your cluster how to handle ingress traffic. It needs an <em>Ingress Controller</em> to actually process these definitions; creating an Ingress resource without having deployed an Ingress controller will not have any effect.</p>

<p>From <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/" rel="noreferrer">the documentation</a>:</p>

<blockquote>
  <p>In order for the Ingress resource to work, the cluster must have an Ingress controller running. This is unlike other types of controllers, which typically run as part of the <code>kube-controller-manager</code> binary, and which are typically started automatically as part of cluster creation. You need to choose the ingress controller implementation that is the best fit for your cluster, or implement one.</p>
</blockquote>

<p>There are several Ingress controllers available that you can deploy by yourself (typically, via a Deployment resource), like for example the <a href="https://github.com/kubernetes/ingress-nginx" rel="noreferrer">NGINX ingress controller</a> (which is part of the Kubernetes project) or third-party ingress controllers like <a href="https://docs.traefik.io/providers/kubernetes-ingress/" rel="noreferrer">Traefik</a>, <a href="https://www.envoyproxy.io/" rel="noreferrer">Envoy</a> or <a href="https://github.com/appscode/voyager" rel="noreferrer">Voyager</a>.</p>
