使用入口控制器的动态路由

时间:2020-07-01 23:29:52

标签: docker kubernetes kubernetes-ingress kubernetes-pod

是否可以使用Nginx入口控制器进行动态路由?动态是指基于url,我需要从url中剥离并获取一个值,并根据该值进行路由。让我知道怎么可能。如果nginx控制器无法实现,请让我知道其他可行的方法。感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

入口控制器基于Ingress对象。 Kubernetes对象定义本质上是静态的(因此我们可以对其进行版本控制)。

根据我在评论中收集的信息,当用户请求domain.com/foo时,他们将被重定向到您的应用程序实例吗?您将需要一个来源来获取更新的信息。

我可以看到两种方法:

  • 手动或以编程方式(使用Helm或其他模板软件)编辑入口对象
  • 使用持久性数据库制作专用的应用程序,并从那里触发重定向:domain.com/*-> redirect app->`user app。这样,您可以根据需要控制用户列表。

这取决于最终用户是留在domain.com/user还是将他们重定向到另一个唯一域。我需要更多信息来讨论。

答案 1 :(得分:0)

将标签附加到您的服务中,让Traefik完成其余工作!

https://docs.traefik.io/routing/providers/consul-catalog/

我想这可能非常接近您想要实现的目标。

祝你好运!

答案 2 :(得分:0)

基于大使标头的路由的动态路由

大使是另一个基于特使的解决方案。它有免费和商业版本。大使被描述为“微服务的Kubernetes原生API网关”,它带来了相应的好处-例如与K8s原语的紧密集成。拥有Ingress控制器期望提供的功能,它也可以与各种服务网格解决方案一起使用(Consul,Linkerd,Istio)。

标头注释 headers属性是header:value对的字典。 Edge Stack大使将仅允许与指定的标头:值对匹配的请求到达目标服务。

您还可以将标头的值设置为true,以测试标头的存在。

---
apiVersion: getambassador.io/v2
kind:  Mapping
metadata:
  name:  user-header-based-routing
spec:
  prefix: /backend/
  service: userA
  headers:
    x-authenticated-user: userA
...