情况
- 我在 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=%