Я использую Kubernetes с Nginx входным контроллером, и у меня есть две службы (srv1 и srv2) в моем пространстве имен, к которым я хочу получить доступ, например, так:
https://xyz.example.com/srv1/ => (point to the root of srv1)
https://xyz.example.com/srv2/ => (point to the root of srv2)
, например, если кто-то нажмите на следующий URL:
https://xyz.example.com/srv1/page1.aspx
, тогда они попадут на page1.aspx , который находится в root моего приложения в srv1
он отлично работает с приведенным ниже входным файлом:
Проблема:
У меня есть вторая страница page2.aspx и Я поместил его рядом с page1.aspx , так что оба они находятся в root, теперь, если я нажму на кнопку на странице1, которая имеет код на стороне сервера, чтобы перенаправить нас на page2.aspx , тогда я ожидал, что мы попадем на следующий URL:
https://xyz.example.com/srv1/page2.aspx
, но вместо этого он перенаправит меня на следующий путь:
https://xyz.example.com/page2.aspx
Только для пояснение, я поместил ссылку HTML на страницу1, которая указывает на страницу2, она работает просто отлично, потому что работает на стороне клиента, а не на стороне сервера.
До сих пор я использовал следующие 3 языка для перенаправления на стороне сервера, и все они имеют одинаковое поведение:
C# & .net core (versions 2.1 , 2.2 , 3.0 and 3.1)
Python (version 3.7)
Ruby (version 2.7.1)
, так что я думаю, что проблема из Kubernetes, у кого-нибудь есть идеи?
вот мой вход YAML:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ds1-ingress
namespace: ds1
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- xyz.example.com
secretName: tls-secret
rules:
- host: xyz.example.com
http:
paths:
- backend:
serviceName: srv1
servicePort: 80
path: /srv1/(.*)
- backend:
serviceName: srv2
servicePort: 80
path: /srv2/*