服务是 Kubernetes的一个重要概念,也是让许多开发人员感到困扰的根源。许
多开发人员为了弄清楚无法通过服务IP或FQDN连接到他们的pod的原因花费了
大量时间。出于这个原因,了解一下如何排除服务故障是很有必要的:
- 如果无法通过服务访问pod,应该根据下面的列表进行排查:
首先,确保从集群内连接到服务的集群I,而不是从外部。 - 不要通过ping服务P来判断服务是否可访问(请记住,服务的集群IP是虚
拟IP,是无法ping通的)。 - 如果已经定义了就绪探针,请确保它返回成功;否则该pod不会成为服务的
一部分 - 要确认某个容器是服务的一部分,请使用 kubect get endpoints来检
查相应的端点对象。 - 如果尝试通过FQDN或其中一部分来访问服务(例如, myservice.
mynamespace.svc.cluster. 或者 local .myservice.mynamespace),
并不起作用,请查看是否可以使用其集群IP而不是FQDN来访问服务 - 检查是否连接到服务公开的端口,而不是目标端口。
- 尝试直接连接到pod以确认pod正在接收正确端口上的连接。
- 如果甚至无法通过pod的IP访问应用,请确保应用不是仅绑定到本地主机。
以上就是我经常用的K8s 服务故障排查思路, 这应该可以帮助解决大部分与服务相关的问题。