Service Pod启动时准备探测另一项服务

Service Pod启动时准备探测另一项服务,service,tcp,kubernetes,dependencies,readinessprobe,Service,Tcp,Kubernetes,Dependencies,Readinessprobe,在Kubernetes设置中,我有两个服务-A和B。 服务B依赖于服务A通过完全启动。 现在,我想在服务B的Pod中设置一个TCP就绪探测,以便它们测试服务a的Pod是否完全运行 服务B中部署的ReadinessProbe部分如下所示: readinessProbe: tcpSocket: host: serviceA.mynamespace.svc.cluster.local port: 1101 # same port of Service A Readiness Che

在Kubernetes设置中,我有两个服务-A和B。
服务B依赖于服务A通过完全启动。 现在,我想在服务B的Pod中设置一个TCP就绪探测,以便它们测试服务a的Pod是否完全运行

服务B中部署的ReadinessProbe部分如下所示:

readinessProbe:
  tcpSocket:
    host: serviceA.mynamespace.svc.cluster.local
    port: 1101 # same port of Service A Readiness Check
我可以应用这些更改,但就绪探测失败,原因是:

Readiness probe failed: dial tcp: lookup serviceB.mynamespace.svc.cluster.local: no such host
我在其他地方使用相同的主机名(例如,我将其作为ENV传递给容器),它可以工作并得到解析

有没有人想到让另一个服务做好准备,或者在服务之间进行其他类型的依赖性检查?
谢谢:)

由于就绪性和活动性完全由
kubelet
节点代理管理,并从特定节点配置继承DNS发现服务,因此您无法解析K8s内部名称服务器记录:

对于探针,kubelet在节点进行探针连接,而不是 在pod中,这意味着您不能在中使用服务名称 主机参数,因为kubelet无法解析它

您可以考虑当源<强> POD A通过传播<代码>主机网络时使用节点IP地址:Trime参数,因此<代码> KuBeleT>代码>可以从<<强> Pod B 中获得并成功准备就绪,如官方K8S:

中所描述的。
然而,我发现了Stack,在那里你可以获得更有效的解决方案,如何通过它来实现相同的结果。

我认为这可能是预期的结果,因为另一边的应用程序还没有准备好,试着把intialdelayseconds=60Checkout pod ready++放到你的用例中,比如说你启动了两个B而没有启动服务A。会发生什么?(如果它从未通过本地健康检查,而Kubernetes将自动重新启动它,那就糟糕了吗?@DavidMaze:我不太明白这个问题。目前,这两项服务都通过了健康检查。但是,在服务B运行之前,我必须确保服务A已启动并正在运行。如果我不这样做,我必须从服务B的部署中删除Pod,让它创建一个新的Pod。那么它工作得很好。但那是人工交互。。因此对操作不利。Init容器就是这样做的!谢谢你指出为什么探测器不能工作!
tcpSocket:
  host: Node Hostname or IP address where Pod A residing
  port: 1101