Входной контроллер Kubernetes Nginx на службе без селектора - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь показать Сервис, у которого нет Селектора при входе (с официальным контроллером Nginx в Kubernetes).

Служба без селектора работает нормально, когда я устанавливаю его как 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

Примечание. Я вручную редактирую конечную точку для службы после развертывания. Но я не понимаю, как это может иметь значение.

Есть идеи?


EDIT:

Я добавил дополнительный Сервис со Селектором, работающий бок о бок с другим, у которого нет Селектора.

Когда у меня Ingress указывает на тот, у которого нет селектора, это восходящий поток на 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, updstream Nginx обновляется до:

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

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

}

Может ли это быть проблемой с Ingress Controller?

1 Ответ

0 голосов
/ 08 мая 2018

В вашем Ingress вы указываете http как servicePort в бэкэнде, в то время как ваша служба прослушивает порт 8080.

Измените это так, и оно должно работать:

backend:
  serviceName: example
  servicePort: 8080
...