У меня есть внешнее приложение, созданное с помощью React и бэкэнда на nodejs. У обоих есть отдельный образ Docker и, следовательно, отдельное развертывание на k8s (gce).
У каждого развертывания есть соответствующая служба k8s, скажем, fe-serice
и be-service
.
Я пытаюсь настроить Ingress, чтобы обе службы были доступны в одном домене следующим образом:
/api/*
- направляются наbe-service
- все остальное направляется на
fe-service
Вот мой файл yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my-host
http:
paths:
- path: /*
backend:
serviceName: fe-service
servicePort: 80
- path: /api/*
backend:
serviceName: be-service
servicePort: 5000
Вот что я получаю с помощью curl:
curl [ip] --header "Host: my-host"
-> Приложение React (как и ожидалось)
curl [ip]/foo --header "Host: my-host"
-> nginx 404 (почему?)
curl [ip]/api --header "Host: my-host"
-> nginx 404 (почему?)
curl [ip]/api/ --header "Host: my-host"
-> приложение nodejs
curl [ip]/api/foo --header "Host: my-host"
-> приложение nodejs
Насколько я вижу, часть с api/
работает нормально, но я не могу понять все остальное, я пробовал разные комбинации с / без подстановочных знаков, но это все равно не работает так, как я хочу.
Что мне не хватает? Это вообще возможно? Заранее спасибо!