在Kubernetes设置中,我有2个服务-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传递给了容器),它可以正常工作并得到解析。
是否有人想让其他服务做好准备或在服务之间进行某种其他的依赖关系检查? 谢谢:)
答案 0 :(得分:0)
由于就绪和活跃probes由kubelet
节点代理完全管理,并且kubelet继承了特定节点配置的DNS发现服务,因此您无法解析K8内部名称服务器DNS记录:
对于探针,kubelet在节点而不是在 在 pod 中,这意味着您不能在 主机参数,因为kubelet无法解析它。
您可以考虑以下情形:当源 Pod A 通过传播hostNetwork: true
参数消耗节点IP地址时,kubelet
可以从 Pod内部访问并成功进行“就绪”探测B ,如官方的k8 documentation中所述:
tcpSocket:
host: Node Hostname or IP address where Pod A residing
port: 1101
但是,我发现了堆栈thread,您可以在其中获得更有效的解决方案,如何通过Init Containers获得相同的结果。