首页 > 解决方案 > 没有选择器的服务上的 Kubernetes Nginx 入口控制器

问题描述

我正在尝试公开一个在 Ingress 上没有选择器的服务(使用 Kubernetes 官方 Nginx 控制器)。

当我将它设置为 NodePort 时,没有选择器的服务工作正常,它使用我手动定义的端点。

但是,一旦我设置了一个指向该服务的 Ingress 资源,我就无法让它工作。

这就是 Nginx 抱怨的:

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/"

这些是我的服务和入口资源:

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

注意:我在部署后手动编辑服务的端点。但我不明白这有什么不同。

有任何想法吗?


编辑:

我添加了一个带有选择器的附加服务,与另一个没有选择器的服务并排运行。

当我让入口指向没有选择器的入口时,这是 Nginx 的上游:

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

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

}

一旦我将 Ingress 资源切换为使用 Selector 指向服务,Nginx 的上游更新为:

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

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

}

这可能是入口控制器的问题吗?

标签: kuberneteskubernetes-ingress

解决方案


在您的 Ingress 中,您http在后端指示为 servicePort,而您的服务正在侦听端口 8080。

像这样更改它,它应该可以工作:

backend:
  serviceName: example
  servicePort: 8080

推荐阅读