title: Kubernetes Nginx Ingress Controller expose Nginx Webserver
body: <p>I basically want to access the Nginx-hello page externally by URL. I've made a (working) A-record for a subdomain to my v-server running kubernetes and Nginx ingress: vps.my-domain.com</p>
  
  <p>I installed Kubernetes via kubeadm on CoreOS as a single-node cluster using these tutorials: <a href="https://kubernetes.io/docs/setup/independent/install-kubeadm/" rel="nofollow noreferrer">https://kubernetes.io/docs/setup/independent/install-kubeadm/</a>, <a href="https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/" rel="nofollow noreferrer">https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/</a>, and nginx-ingress using <a href="https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal" rel="nofollow noreferrer">https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal</a>.</p>
  
  <p>I also added the following entry to the /etc/hosts file:</p>
  
  <pre><code>31.214.xxx.xxx vps.my-domain.com
  </code></pre>
  
  <p>(xxx was replaced with the last three digits of the server IP)</p>
  
  <p>I used the following file to create the deployment, service, and ingress:</p>
  
  <pre><code>apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: my-nginx
  spec:
    selector:
      matchLabels:
        run: my-nginx
    replicas: 1
    strategy:
      type: Recreate
    template:
      metadata:
        labels:
          run: my-nginx
      spec:
        containers:
        - name: my-nginx
          image: nginx
          ports:
          - name: http
            containerPort: 80
            protocol: TCP
  ---
  apiVersion: v1
  kind: Service
  metadata:
    name: my-nginx
    labels:
      run: my-nginx
  spec:
    type: ClusterIP
    ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    selector:
      run: my-nginx
  ---
  apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    name: my-nginx
    annotations:
      kubernetes.io/ingress.class: "nginx"
      ingress.kubernetes.io/ssl-redirect: "False"
  spec:
    rules:
    - host: vps.my-domain.com
      http:
        paths:
        - backend:
            serviceName: my-nginx
            servicePort: 80
  </code></pre>
  
  <p>Output of describe ing:</p>
  
  <pre><code>core@vps ~/k8 $ kubectl describe ing
  Name:             my-nginx
  Namespace:        default
  Address:
  Default backend:  default-http-backend:80 (&lt;none&gt;)
  Rules:
    Host                  Path  Backends
    ----                  ----  --------
    vps.my-domain.com
                             my-nginx:80 (&lt;none&gt;)
  Annotations:
    kubectl.kubernetes.io/last-applied-configuration:      
  {"apiVersion":"extensions/v1beta1",...}
  
    kubernetes.io/ingress.class:         nginx
    ingress.kubernetes.io/ssl-redirect:  False
  Events:
    Type    Reason  Age                From                      Message
    ----    ------  ----               ----                      -------
    Normal  UPDATE  49m (x2 over 56m)  nginx-ingress-controller  Ingress default/my-nginx
  </code></pre>
  
  <p>While I can curl the Nginx hello page using the nodeip and port 80 it doesn't work from outside the VM. <code>Failed to connect to vps.my-domain.com port 80: Connection refused</code></p>
  
  <p>Did I forgot something or is the configuration just wrong? Any help or tips would be appreciated! </p>
  
  <p>Thank you</p>
  
  <p><strong>EDIT:</strong></p>
  
  <p>Visiting "vps.my-domain.com:30519` gives me the nginx welcome page. But in the config I specified port :80.
  I got the port from the output of get services:</p>
  
  <pre><code>core@vps ~/k8 $ kubectl get services --all-namespaces | grep "my-nginx"
  default         my-nginx               ClusterIP   10.107.5.14      &lt;none&gt;        80/TCP                       1h
  </code></pre>
  
  <p>I also got it to work on port :80 by adding   </p>
  
  <pre><code>externalIPs:
    - 31.214.xxx.xxx
  </code></pre>
  
  <p>to the my-nginx service. But this is not how it's supposed to work, right? In the tutorials and examples for kubernetes and ingress-nginx, it worked always without externalIPs. Also the ingress rules doesn't work now (e.g. if I set the path to /test).</p>