<p>Hope you are all well,</p>
<p>I am currently trying to rollout the <a href="https://github.com/ansible/awx-operator" rel="noreferrer">awx-operator</a> on to a Kubernetes Cluster and I am running into a few issues with going to the service from outside of the cluster.</p>
<p>Currently I have the following services set up:</p>
<pre><code>NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
awx                    NodePort    10.102.30.6      &lt;none&gt;        8080:32155/TCP      110m
awx-operator           NodePort    10.110.147.152   &lt;none&gt;        80:31867/TCP        125m
awx-operator-metrics   ClusterIP   10.105.190.155   &lt;none&gt;        8383/TCP,8686/TCP   3h17m
awx-postgres           ClusterIP   None             &lt;none&gt;        5432/TCP            3h16m
awx-service            ClusterIP   10.102.86.14     &lt;none&gt;        80/TCP              121m
kubernetes             ClusterIP   10.96.0.1        &lt;none&gt;        443/TCP             17h
</code></pre>
<p>I did set up a <code>NodePort</code> which is called <code>awx-operator</code>. I did attempt to create an ingress to the application. You can see that below:</p>
<pre><code>apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: awx-ingress
spec:
  rules:
  - host: awx.mycompany.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: awx
            port:
              number: 80
</code></pre>
<p>When I create the ingress, and then run <code>kubectl describe ingress</code>, I get the following output:</p>
<pre><code>Name:             awx-ingress
Namespace:        default
Address:
Default backend:  default-http-backend:80 (&lt;error: endpoints &quot;default-http-backend&quot; not found&gt;)
Rules:
  Host               Path  Backends
  ----               ----  --------
  awx.mycompany.com
                     /   awx:80 (10.244.1.8:8080)
Annotations:         &lt;none&gt;
Events:              &lt;none&gt;
</code></pre>
<p>Now I am not too sure whether the <code>default-http-backend:80</code> error is a red-herring as I have seen this in a number of places and they don't seem too worried about it, but please correct me if I am wrong.</p>
<p>Please let me know whether there is anything else I can do to troubleshoot this, and I will get back to you as soon as I can.</p>

<p>You are right and the blank address is the issue here. In traditional <em>cloud</em> environments, where network load balancers are available on-demand, a single Kubernetes manifest suffices to provide a single point of contact to the NGINX Ingress controller to external clients and, indirectly, to any application running inside the cluster.</p>
<p><em>Bare-metal</em> environments on the other hand lack this option, requiring from you a slightly different setup to offer the same kind of access to external consumers:</p>
<p><img src="https://kubernetes.github.io/ingress-nginx/images/baremetal/baremetal_overview.jpg" alt="Bare-metal environment" /></p>
<p>This means you have to do some additional gymnastics to make the ingress work. And you have basically two main options here (all well described <a href="https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#bare-metal-considerations" rel="nofollow noreferrer">here</a>):</p>
<ul>
<li>A pure software solution: <a href="https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb" rel="nofollow noreferrer">MetalLB</a></li>
<li>Over the <a href="https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#over-a-nodeport-service" rel="nofollow noreferrer">NodePort</a> service.</li>
</ul>
<p>What is happening here is that you basically creating a service type <code>NodePort</code> with selector that matches your ingress controller pod and then it's routes the traffic accordingly to your ingress object:</p>
<pre class="lang-yaml prettyprint-override"><code># Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    helm.sh/chart: ingress-nginx-3.30.0
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.46.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller
</code></pre>
<p>Full nginx deployment that conatains that service can be found <a href="https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal" rel="nofollow noreferrer">here</a>.</p>
<p>If you wish to skip the ingress you might be just using the <code>nodePort</code> service <code> awx</code> and reach it directly.</p>
