【发布时间】:2021-05-22 20:34:06
【问题描述】:
我有一个 kubernetes 入口,用于我使用基于路径的路由的应用程序。 集群在 Google Cloud Kubernetes Engine 上运行,我的入口控制器是 Traefik v2.4。
我的一些链接是:
- https://www.kwetter.org/ -> 主页(前端)
- https://www.kwetter.org/profile -> 个人资料页面(前端)
- https://www.kwetter.org/messages-> 消息页面(前端)
- https://www.kwetter.org/api/auth/connect -> OAuth 端点(IdentityServer)
- https://www.kwetter.org/api/auth/users -> 用户端点(IdentityServer)
我想要的逻辑是让任何匹配路径 /* 的东西进入前端,任何匹配 /api/auth/* 的东西都被路由到身份服务器。
但是,只有精确的路径被路由,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 消息“响应 404(后端未找到),路径的服务规则不存在”。完整的 url 是 https://kwetter.org/static/js/2.2217857e.chunk.js 并带有 pathType: Prefix,这应该与“/”路径匹配。
谁能告诉我哪里出错了?
编辑解决方案: 我尝试了基于重写目标的解决方案,这与我的 API 控制器在他们到达的服务上发生冲突。
最后我只是尝试在路径上放一颗星:
- 路径:/*
- 路径:/api/auth/*
这解决了整个路由问题,甚至不知道这是可能的。
【问题讨论】:
-
您可能需要在
path中使用正则表达式,请参阅:kubernetes.github.io/ingress-nginx/user-guide/…
标签: kubernetes-ingress traefik-ingress