Kubernetes服务上的加权路由

gmol1639  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(1)|浏览(122)

我有一个主服务和多个从服务。主服务使用Google PubSub的订阅者持续轮询主题。从服务是REST API。一旦主服务接收到消息,它就将消息委托给从服务。目前我在Kubernetes中使用ClusterIP服务。我的一些请求运行时间很长,一些请求运行时间很短。
我碰巧注意到,有时候如果有一个短时间运行的请求,而一个长时间运行的请求正在处理中,它必须等到长时间运行的请求完成,即使许多pod可用,没有服务任何流量。我认为这是由于循环负载平衡。我一直在努力寻找一个解决方案,并研究了一些方法,如设置外部HTTP负载平衡器与入口和内部HTTP负载平衡器。但是我真的很困惑这两种方法之间的区别,以及哪一种方法适用于我的用例。你能建议哪一种方法可以解决我的用例吗?

t98cgbkg

t98cgbkg1#

TL; DR

假设您希望20%的流量流向x服务,其余80%流向y服务。为2个目标中的每一个创建2个入口文件,具有相同的主机名,唯一的区别是其中一个将携带以下入口注解:文档

nginx.ingress.kubernetes.io/canary: "true" #--> tell the controller to not create a new vhost

nginx.ingress.kubernetes.io/canary-weight: "20" #--> route here 20% of the traffic from the existing vhost

为什么和如何

加权路由有点超出了ClusterIP。就像你自己说的,是时候让一个新玩家进入游戏了-一个ingress controller
这是load balancer的一个k8s抽象--一个强大的服务器,位于应用程序前面,路由ClusterIP之间的流量。
install ingress controller on gcp cluster
一旦你有它安装和运行,使用它的canary特征到执行一个加权路由.这是完成使用下面的注解:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: http-svc
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
  rules:
  - host: echo.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80

here是完整的指南。

外部与内部负载平衡

(this是谷歌云文档中的相关定义,但其他云提供商的概念相似)
GCP的负载平衡器可以分为外部负载平衡器和内部负载平衡器。外部负载平衡器将来自Internet的流量分配到您的GCP网络。内部负载平衡器将流量分配到您的GCP网络。
https://cloud.google.com/load-balancing/docs/load-balancing-overview

相关问题