Kubernetes на ранчо - проблема с Ingress Path

Я создал приложение nodejs / express с контроллером входящего трафика, которое работает на Kubernetes с Rancher. Только бэкэнд по умолчанию работает отлично, и я могу добраться до любого из своих маршрутов, созданных с помощью express, например http://1.2.3.4/api или http://1.2.3.4/api/districts.

Что не работает, так это пути, которые я определил, например http://1.2.3.4/gg1/api или http://1.2.3.4/gg2/api/districts. В журналах Pod я вижу ошибку 404 всякий раз, когда делаю запрос по одному из указанных мной путей.

Я часами безуспешно искал решение. Я видел, что у многих людей возникают проблемы с входом и путями по разным причинам, но я пока не мог найти решение своей проблемы. Может быть, кто-то здесь знает решение этой проблемы?

Чтобы заставить Ingression работать, я использовал этот пример здесь: Использование Kubernetes Ingress Controller с нуля

Вот как я все развертываю:

kubectl create -f deployment1-config.yaml
kubectl create -f deployment2-config.yaml

kubectl expose deployment test-ingress-node-1 --target-port=5000 --type=NodePort kubectl expose deployment test-ingress-node-2 --target-port=5000 --type=NodePort

kubectl run nginx --image=nginx --port=80 kubectl expose deployment nginx --target-port=80 --type=NodePort

kubectl create -f ingress.yaml

Все запросы достигают только модуля бэкэнда по умолчанию, а пути с / gg1 или / gg2 дают только 404 в журнале модуля или Невозможно GET / gg1 в браузере.

вход-config.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-node-adv-ingress
  annotations:
    kubernetes.io/ingress.class: "rancher"
    ingress.kubernetes.io/rewrite-target: /
spec:
  backend:
    serviceName: test-ingress-node-1
    servicePort: 5000
  rules:
  - host:
    http:
      paths:
      - path: /gg1
        backend:
          serviceName: test-ingress-node-1
          servicePort: 5000
      - path: /gg2
        backend:
          serviceName: test-ingress-node-2
          servicePort: 5000

развертывание-1.config.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  generation: 2
  labels:
    run: test-ingress-node-1
  name: test-ingress-node-1
  namespace: default
  resourceVersion: "123456"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/test-ingress-node-1
spec:
  replicas: 1
  selector:
    matchLabels:
      run: test-ingress-node-1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: test-ingress-node-1
    spec:
      containers:
      - image: myProject-service-latest
        imagePullPolicy: Always
        name: test-ingress-node-1
        ports:
        - containerPort: 5000
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  observedGeneration: 2
  replicas: 1
  updatedReplicas: 1

развертывание-2.config.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  generation: 2
  labels:
    run: test-ingress-node-2
  name: test-ingress-node-2
  namespace: default
  resourceVersion: "123456"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/test-ingress-node-2
spec:
  replicas: 1
  selector:
    matchLabels:
      run: test-ingress-node-2
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: test-ingress-node-2
    spec:
      containers:
      - image: myProject-service-latest
        imagePullPolicy: Always
        name: test-ingress-node-2
        ports:
        - containerPort: 5000
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  observedGeneration: 2
  replicas: 1
  updatedReplicas: 1


person stoned_raider    schedule 01.02.2018    source источник


Ответы (2)


Правильный путь такой же, как конечная точка ресурса node js! Ознакомьтесь с входящей документацией Kubernetes.

«И хост, и путь должны соответствовать содержимому входящего запроса, прежде чем балансировщик нагрузки направит трафик на бэкэнд».

https://kubernetes.io/docs/concepts/services-networking/ingress/ < / а>

person Carlos Saez    schedule 15.05.2018

Попробуйте заменить строку ingress.kubernetes.io/rewrite-target: / под annotations в ingress-config.yaml файле на эту строку:

nginx.ingress.kubernetes.io/rewrite-target: /
person Ben Even Tsur    schedule 02.02.2020