获取所有正在运行的 Pod 的列表,以供自己的服务使用



情况

  • 我在 Kubernetes 中运行了一个 Spring Boot 服务
  • 多个
  • 实例正在运行(kubernetes 部署配置了多个副本(
  • 我有一个来自集群外部的传入 HTTP,它命中了实例
  • 我想将事实传达给所有其他实例

问题

是否有一个简单的,不需要外部的东西,解决方案来查找"我服务的所有pod"的列表?我想我记得这可以通过 DNS 解析实现,但我的 Google-Fu 似乎很弱,无法找到一些东西。

当然,我总是可以通过其他解决方案(例如 Redis、Kafka 等(来实现这一点,但由于我只需要它作为一次性功能,因此我不想引入任何活动部件并使其尽可能简单。

内部 K8s DNS 只会为您提供服务的 IP 地址。幸运的是,端点资源正是为了获取支持服务的 Pod。

使用 kubectl,您可以像这样检查端点:

kubectl get endpoints nginx -o yaml

使用此命令,您可以掌握 Pod 名称:

kubectl get endpoints nginx -o=jsonpath='{.subsets[*].addresses[*].targetRef.name}'

要从 Spring Boot 应用程序中执行相同的操作,您可以尝试使用官方的 Kubernetes Java 客户端库。

您可以通过运行以下命令列出服务背后的所有 pod

$ kubectl get endpoints <service-name> -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' 'n' | xargs -I % kubectl get pods --field-selector=status.podIP=%

最新更新