Невозможно получить доступ к нескольким службам с входного контроллера, размещенного на разных портах - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть две службы, размещенные на разных портах, и я создал входной ресурс, который выглядит следующим образом:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  namespace: mynamespace
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /svc1/
        backend:
          serviceName: app1-svc
          servicePort: 3000
       - path: /svc2/
         backend:
           serviceName: app2-svc
           servicePort: 8080

поверх этого я создал NodePort * Входной контроллер типа 1007 *.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ingress
  name: controller-nginx-ingress-controller
spec:
  clusterIP: 10.88.18.191
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: http
  - name: https
    nodePort: 31442
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app: nginx-ingress
    component: controller
    release: controller

И, наконец, настройте балансировщик нагрузки облака для доступа к приложению, запущенному на моем кластере K8S.

Проблема: Я не смог возможность доступа к любому моему приложению с помощью маршрутизации URL

Может кто-нибудь сообщить мне, что я делаю неправильно? И как решить эту проблему?

1 Ответ

0 голосов
/ 25 февраля 2020

Из того, что вы упомянули в комментариях, я почти уверен, что проблему можно решить с помощью переписывания пути.

Теперь, когда вы отправляете запрос на /svc1/ с помощью path: /svc1/, запрос пересылается на app1-svc с путем, установленным в /svc1/, и вы получаете 404 ошибки, поскольку в app1 такого пути нет. Из того, что вы упомянули, вы, скорее всего, можете решить проблему с помощью переписать. Вы можете добиться этого, используя аннотацию nginx.ingress.kubernetes.io/rewrite-target, поэтому ваш вход будет выглядеть следующим образом:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  namespace: mynamespace
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /svc1(/|$)(.*)
        backend:
          serviceName: app1-svc
          servicePort: 3000
       - path: /svc2(/|$)(.*)
         backend:
           serviceName: app2-svc
           servicePort: 8080

В этом случае при отправке запроса с путем, установленным в /svc1/something, запрос будет перенаправлен в app1 с переписанным путем на /something.

Также посмотрите в входные документы для более подробного объяснения .

Дайте мне знать, если это решило вашу проблему.

...