简体   繁体   中英

Kubernetes Nginx Ingress Controller on Service without Selector

I'm trying to expose a Service that has no Selector on Ingress (with Kubernetes official Nginx Controller).

The Service without the Selector works fine when I set it as NodePort, and it uses the Endpoint that I define manually.

However, once I setup an Ingress resource pointing to this service I cannot get it working.

This is what Nginx complains about:

connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: example, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8181/", host: "example"
connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: example, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8181/favicon.ico", host: "example", referrer: "http://example/"

And these are my Service and Ingress resources:

apiVersion: v1
kind: Service
metadata:
  name: example
  labels:
    app: example
spec:
  ports:
    - name: http
      protocol: TCP
      port: 8080
      targetPort: http


apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example
  labels:
    app: example
spec:
  rules:
    - host: myhostname
      http:
        paths:
          - path: /
            backend:
              serviceName: example
              servicePort: http

Note: I'm manually editing the Endpoint for the Service after the deployment. But I don't see how this could make any difference.

Any ideas?


EDIT:

I've added an additional Service with a Selector, running side by side with the other one that has no Selector.

When I have the Ingress pointing to the one with no Selector, this is the upstream on Nginx:

upstream default-old-joey-app.example-no-selector {
    least_conn;

    server 127.0.0.1:8181 max_fails=1 fail_timeout=10s;

}

As soon as I switch the Ingress resource to point to the Service with Selector, Nginx's updstream is updated to:

upstream default-old-joey-app.example-with-selector {
    least_conn;

    server 172.17.0.5:8080 max_fails=1 fail_timeout=10s;

}

Could this be an issue with the Ingress Controller?

In your Ingress you are indicating http as the servicePort in the backend, while your service is listening to port 8080.

Change it like this and it should work:

backend:
  serviceName: example
  servicePort: 8080

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM