情况
- 我有一个在 Kubernetes 中运行的 Spring Boot 服务
- 多个实例正在运行(kubernetes 部署配置了多个副本)
- 我有一个来自集群外部的传入 HTTP 命中了实例
- 我想将这个事实转达给所有其他个体
问题
是否有一种简单、不需要外部东西的解决方案来查找“我的服务的所有 pod”列表?我想我记得这可以通过 DNS 解析来实现,但我的 Google-Fu 似乎很难找到一些东西。
当然,我总是可以通过其他一些解决方案(例如 Redis、Kafka 等)来解决这个问题,但由于我只需要它来实现一次性功能,所以我不想引入任何移动部件并使其尽可能简单.
最佳答案
内部 K8s DNS 只会为您提供服务的 IP 地址。幸运的是,有 Endpoints 资源正是为了获取支持服务的 Pod。
使用 kubectl,您可以像这样检查端点:
kubectl get endpoints nginx -o yaml
使用此命令,您可以获取 Pod 名称:
kubectl get endpoints nginx -o=jsonpath='{.subsets[*].addresses[*].targetRef.name}'
要从您的 Spring Boot 应用程序执行相同的操作,您可以尝试使用官方 Kubernetes Java client library.
关于spring - 获取自己服务的所有正在运行的 pod 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62412278/