我在 Kubernetes 集群中有一个服务,它有一个标签选择器,几个 pod 有这个标签,因此“连接”到服务。是否可以使用服务 IP 检索这些 pod 的内部 IP 地址?
我知道可以在 Kubernetes CLI 中检索服务端点,但是,我想知道这是否可以在 Java 中实现?即 Nslookup。
也许这个问题的补充是:如何在 headless 服务上执行 DNS 查询,是否传递服务名称?
谢谢,
最佳答案
您可以从 API 服务器获取端点。例如获取 API 服务器返回的第一个端点的 IP 地址:
$ curl -s -k -H 'Authorization: Bearer <REDACTED>' \
https://<apiserver-address>:6443/api/v1/endpoints | \
jq .items[0].subsets[0].addresses[].ip
您还可以使用它来检索运行 Pod 的节点名称,调用上述端点。
$ curl -s -k -H 'Authorization: Bearer <REDACTED>' \
https://<apiserver-address>:6443/api/v1/endpoints | \
jq .items[0].subsets[0].addresses[].nodeName
这也可以使用您喜欢的语言 API 来完成,例如 Java , Go和 Python
描述here您可以使用 SRV 记录来查找服务的 CLUSTER-IP 地址(而不是您的 pod IP 地址)。来自一个 pod:
$ dig srv _portname._tcp.servicename.default.svc.cluster.local
...
servicename.default.svc.cluster.local. 5 IN A 10.x.x.x <== service IP
...
关于java - Kubernetes 和 Java : Retrieving Pod IPs behind Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53806817/