gpt4 book ai didi

kubernetes - 有没有办法配置 Istio 将流量路由到处于终止状态的 POD?

转载 作者:行者123 更新时间:2023-12-02 02:49:56 27 4
gpt4 key购买 nike

我有一个 Kubernetes 集群,其中部署了两个服务:SvcA 和 SvcB - 都在服务网格中。

SvcA 由单个 Pod SvcA_P1 支持。 SvcA_P1 中的应用程序公开了一个 PreStop HTTP Hook 。在 SvcA_P1 所在的节点上执行“kubectl drain”命令时,Pod 将转换为“terminating”状态并保持该状态,直到应用程序完成其工作(其余请求返回并且 Kubernetes 删除该 pod)。 SvcA_P1 的工作包括完成正在进行的对话内(属于已建立的 session )HTTP 请求/响应。它可以在完成前保持“终止”状态数小时。

当 Pod 进入“终止”阶段时,Istio sidecar 似乎从池中删除了 SvcA_P1。从例如 SvcB_P1 发送到 SvcA_P1 的请求被拒绝,并带有“上游不健康”。

有没有办法将 Istio/Envoy 配置为:

  • 在“终止”状态下继续向 SvcA_P1 发送具有亲和力的流量/ session ?
  • 拒绝与 SvcA_P1 没有 session 关联的流量(没有 JSESSIONID、cookie 或特殊 HTTP header )?

  • 我玩过 DestinationRule(s),修改了 trafficPolicy.loadBalancer.consistentHash.[httpHeaderName|httpCookie]没有运气。一旦 Envoy 移除上游服务器,新的目的地将使用减少的服务器集重新散列。

    谢谢,

    雷神

    最佳答案

    根据 Kubernetes documentation ,当必须删除 pod 时,会同时发生三件事:

    • Pod shows up as “Terminating” when listed in client commands
    • When the Kubelet sees that a Pod has been marked as terminating because the "dead" timer for the Pod has been set in the API server, it begins the pod shutdown process.
      • If the pod has defined a preStop hook, it is invoked inside of the pod. If the preStop hook is still running after the grace period expires, step 2 is then invoked with a small (2 second) extended grace period.
    • Pod is removed from endpoints list for service, and are no longer considered part of the set of running pods for replication controllers. Pods that shutdown slowly cannot continue to serve traffic as load balancers (like the service proxy) remove them from their rotations.


    一旦 Istio 像 Kubernetes 服务下方/背后的网状网络一样工作,并且服务不再将处于终止状态的 Pod 视为流量的目的地,调整 Istio 策略就没有多大帮助。

    关于kubernetes - 有没有办法配置 Istio 将流量路由到处于终止状态的 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729519/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com