Насколько я ни старался, мне не удалось воспроизвести вашу проблему. Поэтому я решил описать, как я пытался воспроизвести это, чтобы вы могли выполнить те же действия, и в зависимости от того, где / если вы потерпите неудачу, мы сможем найти причину проблемы.
Прежде всего, убедитесь, что вы используют NGINX Ingress , поскольку он более мощный.
Я установил свой NGINX Ingress с помощью Helm, выполнив следующие шаги:
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
$ helm repo update
$ helm install nginx-ingress stable/nginx-ingress
Для развертывания мы собираемся использовать пример из здесь .
Развертывание приложения hello, world
Создайте развертывание, используя следующую команду:
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
Вывод:
deployment.apps/web created
Раскрытие развертывания:
kubectl expose deployment web --type=NodePort --port=8080
Вывод:
service/web exposed
Создать второе развертывание
Создайте развертывание v2 с помощью следующей команды:
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
Вывод:
deployment.apps/web2 created
Показать развертывание:
kubectl expose deployment web2 --port=8080 --type=NodePort
Вывод:
service/web2 exposed
На этом этапе у нас запущены развертывания и службы:
* 10 55 *
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d5h
nginx-ingress-controller LoadBalancer 10.111.183.151 <pending> 80:31974/TCP,443:32396/TCP 54m
nginx-ingress-default-backend ClusterIP 10.104.30.84 <none> 80/TCP 54m
web NodePort 10.102.38.233 <none> 8080:31887/TCP 24m
web2 NodePort 10.108.203.191 <none> 8080:32405/TCP 23m
Для входа мы собираемся использовать тот, который указан в вопросе, но нам нужно изменить бэкенды:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tweeta-ingress
spec:
rules:
- host: tweeta.abc.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 8080
- path: /api
backend:
serviceName: web2
servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tweeta-ingress-v2
spec:
rules:
- host: app.abc.com
http:
paths:
- path: /tweeta
backend:
serviceName: web
servicePort: 8080
- path: /tweeta/api
backend:
serviceName: web2
servicePort: 8080
Теперь давайте протестируем наши входы:
$ curl tweeta.abc.com
Hello, world!
Version: 1.0.0
Hostname: web-6785d44d5-j8bgk
$ curl tweeta.abc.com/api
Hello, world!
Version: 2.0.0
Hostname: web2-8474c56fd-lx55n
$ curl app.abc.com/tweeta
Hello, world!
Version: 1.0.0
Hostname: web-6785d44d5-j8bgk
$ curl app.abc.com/tweeta/api
Hello, world!
Version: 2.0.0
Hostname: web2-8474c56fd-lx55n
Как видно, все работает нормально без модов в ваших ингрессах.