【问题标题】:How to forward Traffic to specific pod?如何将流量转发到特定的 pod?
【发布时间】:2019-03-04 09:25:49
【问题描述】:

我有一个在内存数据库中使用的应用程序。我使用带有 3 个副本的 Pod 创建了 statefulset。使用 PVC 存储数据库相关文件。

我使用了一个 Loabalancer 来公开 statefulset。

因此,当流量每次被转发到不同的 Pod 时都会遇到负载均衡器。

我是否可以根据某些条件控制对 Pod 的负载平衡(例如,如果客户端 IP 是 X,则转到 pod Y)?

【问题讨论】:

    标签: kubernetes load-balancing nlb statefulset


    【解决方案1】:

    事实上,你有一个领导者/追随者拓扑,请求将流量引导到一个所说的 nome(主节点)是有缺陷的,原因有几个:

    1. 当当前的领导者故障转移并且有一个新的领导者时会发生什么 选举选出新的领导者
    2. pod 是短暂的事实 他们不应该在生产中扮演重要角色,而是工作 与部署及其副本。你想要达到的目标 是一种反模式

    无论如何,如果这是你想要的,也许你想了解gateways in istio,可以找到here

    【讨论】:

    • 我没有在我的内存数据库或应用程序上完成任何集群配置。没有启用主/从配置。在我的 staefulset 中,我将在 POD 1 中存储关于 1 到 100 的应用程序信息,在 POD2、200-300 POD3 中存储关于 100=200 的信息。如果任何 POD 出现故障,K8s 将重新安排 POD。如果需要增加,我将在 statefulset 中再创建一个 pod。问题是在检索数据时,它应该从相应的 pod 中读取。这就是为什么我问如何根据某些条件转发流量
    • 好的,您是否考虑过在 k8s 中围绕标签构建逻辑。鉴于这是静态路由的情况,您很可能会使用标签。您可能还需要考虑阅读有关网络策略的信息,以便为基于标签的路由创建新规则。
    【解决方案2】:

    您可以使用 K8s 入口资源来解决这种情况。我认为您正在尝试做的是基于主机的路由。 使用标签将您的 pod 放在不同的服务后面。在您的情况下,服务 1 后面 1 - 100,服务 2 后面 100 - 200,依此类推。然后创建一个入口资源,以根据主机或路径将传入流量重定向到不同的服务,无论您需要什么。您可能必须使用 Nginx 之类的代理才能使其在公共云平台上运行。 YAML 清单会是这样的:

    apiVersion: extensions/v1beta1 kind: Ingress metadata: name: example-ingress annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: host1.com http: paths: - path: /web1 backend: serviceName: service1 servicePort: 443 - path: /api/v1/a backend: serviceName: service2 servicePort: 80 - path: /api/v1/b backend: serviceName: service3 servicePort: 80 - host: host2.com http: paths: - path: /web2 backend: serviceName: service4 servicePort: 443 - path: /api/v2/a backend: serviceName: service5 servicePort: 80

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多