在我使用基于路径的路由的应用程序中,我有一个kubernetes入口。集群运行在引擎上,我的入口控制器是Traefikv2.4。
我的一些链接是:
我想要的逻辑是有任何匹配路径/*到前端的东西,任何匹配的/api/auth/*都被路由到identity服务器。
然而,只有精确的路径被路由,https://www.kwetter.org/工作,https://www.kwetter.org/profile没有。与其他服务一样,https://www.kwetter.org/api/auth工作,https://www.kwetter.org/api/auth/users不工作。
我的入口看起来是这样的:
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: traefik-ingress
annotations:
networking.gke.io/managed-certificates: kwetter-certificate
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
spec:
rules:
- host: kwetter.org
http:
paths:
- path: /
backend:
serviceName: kwetter-web-app
servicePort: 80
- path: /api/auth
pathType: Prefix
backend:
serviceName: kwetter-identity-server
servicePort: 80
- host: www.kwetter.org
http:
paths:
- path: /
backend:
serviceName: kwetter-web-app
servicePort: 80
- path: /api/auth
pathType: Prefix
backend:
serviceName: kwetter-identity-server
servicePort: 80页面对前端很好地加载,但是静态文件返回404,带有traefik消息“Response404(后端NotFound),路径不存在的服务规则”。完整的url是https://kwetter.org/static/js/2.2217857e.chunk.js,使用pathType:前缀,这应该与"/“路径匹配。

有人能告诉我哪里出了问题吗?
编辑解决方案:-我尝试了基于重写目标的解决方案,这与我的API控制器在他们到达的服务中发生了冲突。
最后,我试着把一颗星星放在路上:
这解决了整个路由问题,甚至不知道这是可能的。
发布于 2021-05-24 09:04:34
我想要的逻辑是有任何匹配路径/*到前端的东西,任何匹配的/api/auth/*都被路由到identity服务器。
您需要在您的rewrite-target文件中使用正则表达式和.yaml注释。请看Ingress .yaml文件的示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
rules:
- host: rewrite.bar.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /something(/|$)(.*)在这个入口定义中,(.*)捕获的任何字符都将分配给占位符$2,然后该占位符被用作rewrite-target注释中的参数。
例如,上面的入口定义将导致以下重写:
rewrite.bar.com/something重写到rewrite.bar.com/rewrite.bar.com/something/重写到rewrite.bar.com/rewrite.bar.com/something/new重写到rewrite.bar.com/new您可以找到有关rewrite-target注释这里的更多信息。
您可以在traefik文档中找到类似的提示。
# Replace path with regex
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-replacepathregex
spec:
replacePathRegex:
regex: ^/foo/(.*)
replacement: /bar/$1但在这种情况下,您可能会注意到yaml的一些不同之处。如果要为traefik创建正则表达式,可以测试解决方案这里。
https://stackoverflow.com/questions/67653940
复制相似问题