【问题标题】:Dynamically configuring routing to two set of pods动态配置路由到两组 pod
【发布时间】:2019-11-07 16:39:31
【问题描述】:

我在 Kubernetes 中部署了一个 Web 解决方案(连接到休息服务的角度应用程序)。我的解决方案中没有使用任何 http 会话。

在升级我的休息服务时,我需要让我的 pod 和休息服务版本 1 和休息服务版本 2 都可用。有什么方法可以设置网关/路由器,让我可以动态配置端点?

我希望/myendpoint?version=1 将流量路由到版本 1 的 POD 组,并希望 /myendpoint?version=2 将流量路由到另一组 POD。

我必须能够在不停止服务的情况下动态添加新端点。

【问题讨论】:

    标签: kubernetes routing kubernetes-ingress kubernetes-pod


    【解决方案1】:

    按部署周期分离组件

    我建议将 frontend 应用程序和 REST backend 分开。 (不知道你有没有这个)

    通过分离,您可以独立推出新版本,每个应用都有一个部署周期。

    两种部署或 N-1 兼容性

    另外,如果你想让同一个应用的多个版本更长时间可用,你可以将它们部署在两个不同的Deployments

    例如两个Deployment,每个都有自己的ServiceIngress,用于设置两者。

    kind: Ingress
    spec:
      rules:
      - host: foo.bar.com
        http:
          paths:
          - path: /v1/*
            backend:
              serviceName: service-v1
              servicePort: 8080
          - path: /v2/*
            backend:
              serviceName: service-v2
              servicePort: 8080
    

    或者您可以具有 N-1 兼容性,因此版本 2 实现了 /v1//v2/ API。

    考虑将 CDN 用于静态资产

    通常建议在 CDN 上部署前端,因为它是静态内容。有时您的 Javascript 使用 cache busting 引用其他 Javascript 文件,如果您的所有静态内容都可从 CDN 获得,则处理此类设置会容易得多。

    【讨论】:

    • 我不太确定这是否是正确的选择,也许我没有正确描述它。我的后端是 RESTServices,我需要一个像功能区这样的服务发现组件。我的 REST 服务将被更新,并且可能会添加新服务。使用 Ingress,它看起来非常静态。我需要部署一个新的 REST 服务版本并具有相同的 URL。我需要同时存在 RESTService v1 和 RESTService v2 并设置相同的 URL 以进行发现。当我收到带有 v2 参数的 REST 调用时,必须将调用重定向到部署了我的 RESTServe v2 的一组 pod
    • @Elena 我的回答描述的是你要求的,除了我不知道的 Ribbon,但 Kubernetes 带有我推荐的自己的服务发现机制。
    • @Elena Ingrss 对象为您提供了该路由,但不是在查询参数中,而是在路径前缀上,例如/v2/myendpoint 但您可以使用第 3 方入口控制器,例如Traefik、Istio 或 Kong。
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2019-03-13
    • 2014-10-26
    • 2020-12-13
    相关资源
    最近更新 更多