【问题标题】:K8s loadbalance between different deployment/replicasets不同部署/副本之间的 K8s 负载均衡
【发布时间】:2020-02-05 16:37:47
【问题描述】:

我们的系统有 2 个基于地理位置的端点。例如(east_url,west_url)。 我们的一个应用程序需要在这两个 url 之间进行负载平衡。在消费者应用程序中,创建了 2 个具有相同图像但环境变量不同的部署,例如“url=east_url”、“url=west_url”。

部署后,我有以下正在运行的 pod,它们每个都有标签:“app=consumer-app”和“region=east”或“region=west”

  • consumer-east-pod-1
  • consumer-east-pod-2
  • consumer-west-pod-1
  • consumer-west-pod-2

当我使用选择器创建 clusterIP 服务时:app=consumer-app,不知何故它只选择了一个副本集。我只是好奇这是否真的可以在 kubernates 中允许服务由不同的部署备份?

我能想到的另一种方法是创建 2 个服务,并让入口控制器对其进行负载平衡,这可能吗?我们使用 Kong 作为入口控制器。我正在寻找类似 openshift 的东西,它可以有“alternativeBackends”来服务于路线。 https://docs.openshift.com/container-platform/4.1/applications/deployments/route-based-deployment-strategies.html

【问题讨论】:

  • 您还可以使用 2 个独立的服务,它们都支持同一个入口。这样,东方的交通流向东方的豆荚,而西方的交通流向西方的豆荚。如果他们都使用相同的服务,他们都会收到混合在一起的流量,所以没有地理位置
  • @PatrickW 是否可以创建一个指向 2 个 url 或 ip 的 k8s 服务,并且还能够在端点上定义活动检查?
  • 每个入口可以有多个 URL

标签: docker kubernetes google-kubernetes-engine kubernetes-ingress


【解决方案1】:

我缺少东部副本集的标签,在我添加 app:consumerAPP 后,它现在可以正常工作了。 谢谢

【讨论】:

    【解决方案2】:

    TL;DR:使用 ISTIO

    使用ISTIO,您可以创建Virtual Services

    VirtualService 定义了一组流量路由规则,以便在何时应用 主机被寻址。每个路由规则都定义了匹配标准 特定协议的流量。如果流量匹配,那么它是 发送到定义的命名目标服务(或其子集/版本) 在注册表中。

    VirtualService 将允许您根据 URI 将流量发送到不同的后端。

    现在,如果您打算像 A/B 测试那样执行,您可以使用 ISTIO(目标规则):[https://istio.io/docs/reference/config/networking/destination-rule/].

    DestinationRule 定义了适用于目标流量的策略 发生路由后的服务。

    可以通过定义命名子集来指定特定于版本的策略 并覆盖在服务级别指定的设置

    1.- 如果你使用GKE,安装ISTIO的过程可以位于here

    2.- 如果你使用的是虚拟机上运行的K8s,安装过程可以查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多