Kubernetes入口控制器重定向到基本登录路径,不保留指定服务的入口端口或服务路径
我正在尝试使用k8s中的入口控制器访问群集中运行的web服务器。我使用基于路径的路由入口资源进行测试,并通过访问工作IP地址进行测试(因为入口使用的是可通过任何工作节点访问的节点端口服务) 当我访问其他测试web应用程序(无登录页)时,我可以通过以下方式访问我的服务: http://{worker ip}:{ingres node port}/{svc name} 当我尝试访问具有登录页面的应用程序时,在输入上述内容后,我会被重定向到以下位置: http://{worker ip}/vui/login 这显然不会将我重定向到正确的登录页面,屏幕上会显示一个错误。是否有任何方法在整个过程中保留路径和端口名,以便使用正确的服务名称和端口号发送/vui/登录路径?如果我直接输入整个路径,我仍然无法访问服务。我认为,由于路径已更改为正确的登录页面,但实际上无法访问服务,因此重定向工作到某个点,然后在URL更改为不使用路径和服务名称时失败 任何关于入口、基于路径的路由以及在登录页面重定向时使用它们的建议都将不胜感激 以下是我在测试中使用的入口定义:Kubernetes入口控制器重定向到基本登录路径,不保留指定服务的入口端口或服务路径,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我正在尝试使用k8s中的入口控制器访问群集中运行的web服务器。我使用基于路径的路由入口资源进行测试,并通过访问工作IP地址进行测试(因为入口使用的是可通过任何工作节点访问的节点端口服务) 当我访问其他测试web应用程序(无登录页)时,我可以通过以下方式访问我的服务: http://{worker ip}:{ingres node port}/{svc name} 当我尝试访问具有登录页面的应用程序时,在输入上述内容后,我会被重定向到以下位置: http://{worker ip}/vui/lo
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations: ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /test1
backend:
serviceName: test1-service
servicePort: 5678
- path: /test2
backend:
serviceName: test2-service
servicePort: 5678
- path: /test3
backend:
serviceName: test3-service
servicePort: 8080
您可以为您的案例使用nextURL参数。例如,您正在输入
https://example.com/test3
如果我正确理解了您的问题,这会将您重定向到登录页面。该URL随后成为登录页面URL-
https://example.com/vui/login
在本例中,它最初来自的URL不会被保留
因此,我认为您可以在URL中使用next参数,并在用户通过身份验证后将路由重定向到该URL。网址将为-
https://example.com/vui/login?next=/test3/
然后,您可以使用查询路由注释部署k8s入口资源-
ingress.kubernetes.io/query-routing: default/query-routing
并添加一个将从中应用URL参数的ConfigMap-
kind:ConfigMap
apiVersion: v1
metadata:
name: query-routing
data:
mapping: |-
[{
"field": "login",
"value": "1",
"path": "/test3",
"service": "test3-service ",
"port": "8080"
}]
请共享入口xml文件第一个和第二个服务可以通过入口访问,但它们是不同的应用程序,没有登录页面(它们是显示测试消息的示例echo web服务器)。第三个重定向到登录页面,并丢失最初输入的URL。请编辑您的问题并在此处插入您的yaml定义,而不是在注释中,以便正确格式化。选择需要格式化的文本后按Ctrl+K。我已将入口定义添加到问题中。正如我所提到的,我使用了一些测试服务,但是需要重定向到登录页面的服务给我带来了问题。谢谢@mario