【问题标题】:How can I call a specific pod, in a service, from outside the kube cluster如何从 kube 集群外部调用服务中的特定 pod
【发布时间】:2020-01-26 14:29:09
【问题描述】:

为了自我修复,我希望能够从 kube 集群外部调用特定 pod 实例上的函数。

所以...我有 2 个网络,非 kube 和我的 kube-cluster。我的 kube-cluster 包含一项服务 myapp,并且有 8 个副本分布在 4 个节点上。如果这些 pod 中的每一个都被赋予了一个 VIP 10.1.1.x,其中 x 是从 1 到 8,我希望能够从在非 kube 中运行的任何应用程序中调用 myapp 中公开的任何 API 方法,但强制一个特定的副本。

例如myapp 有一个 REST GET 方法,

whatismyvip()

通过在非 kube 中运行的控制台应用程序,我希望能够通过在正确的 pod 上调用上述方法来确保获得以下输出。

10.1.1.4
10.1.1.6
10.1.1.8
10.1.1.2
10.1.1.5

我为什么要做这样的事情?好吧,通常 kube-cluster 服务中产生的错误是由于错误的数据/配置导致的服务器错误,而不是系统“宕机”,即 500 错误,所以我希望客户端足够聪明才能走

“好的,我从 10.1.1.2 收到错误,我会尝试 10.1.1.3”

我更喜欢在 kubernetes 中本地执行此操作(即使它意味着自定义 IngressController)而不是 Sidecar 服务网格,Envoys 等人。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    创建一个负载均衡的服务,它面向 8 个 pod 的副本集。定义一个 ping whatismyvip() HTTP 端点的 liveness HTTP 探针。

    如果您收到任何意外的 HTTP 状态代码,主机 kubelet 将重新启动 pod。

    define a liveness HTTP request

    否则,如果强制特定副本的意思是希望将请求从集群外部定向到特定 pod,那么自定义解决方案可能会更好。每个人看看每个节点上的 2 X pod 是否可能有一个 clusterIP 服务在它们前面。然后使用面向自定义应用程序的负载平衡服务,该服务根据您的请求代理您对特定副本或一组 pod 的请求。

    例如以 clusterIP 服务 A、B、C 或 D 为目标的 URL 查询字符串参数。

    https://customrouterapp/whatismyvip?replicaset=B

    【讨论】:

    • 您在第二段中是正确的 - 我希望将我的请求从集群外部定向到特定的 pod。正是这种自定义代理行为,我不知道该怎么做(或者如果它确实可能)。您的示例 URL 不允许我们在副本集中指定特定的 pod,所以我想我更喜欢:customrouterapp/whatismyvip?vip=10.1.1.8 => { "vip": "10.1.1.8" }
    • 我在想你可以有 4 个部署(每个部署前面都有自己的 ClusterIP 服务类型)。然后你有另一个应用程序——你可以在flask、go或nodejs中创建它,例如,它接受一个GET请求,带有部署号的查询字符串参数(这些选项中的4个)。例如。 GET url/whatismyvip?deployment=1,如果在您的客户端调用它时失败,客户端会尝试deployment=2 等,直到它获得一个有效响应,其中包含正确部署服务的 IP,以根据哪个部署服务启动/工作来调用。然后,您的客户端向集群中服务的该 vip 发出请求。
    猜你喜欢
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2022-01-17
    相关资源
    最近更新 更多