对于自我修复,我希望能够从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个错误,因此我希望客户端足够智能以进行操作< / p>
“好的,我从10.1.1.2得到一个错误,我将尝试10.1.1.3”
我更喜欢在kubernetes中本地执行此操作(即使这意味着自定义IngressController),而不是在sidecar服务网格中执行此操作。
答案 0 :(得分:1)
创建一个负载均衡的服务,该服务位于8个pod的副本集的前面。定义对whatismyvip()
HTTP端点执行ping操作的活动HTTP探针。
如果您收到任何意外的HTTP状态代码,则主机kubelet将重新启动pod。
define a liveness HTTP request
否则,如果强制一个特定的副本的意思是希望将请求从集群外部定向到特定的容器中,那么定制解决方案可能会更好。每个人都查看每个节点上是否有2个X Pod,它们前面可能有clusterIP服务。然后,在自定义应用程序之前使用负载平衡服务,该应用程序将根据您的请求代理您对特定副本或Pod组的请求。
例如以clusterIP服务A,B,C或D为目标的URL查询字符串参数。
https://customrouterapp/whatismyvip?replicaset=B