Kubernetes和Java:检索服务背后的Pod IP

时间:2018-12-16 21:56:52

标签: java kubernetes

我在Kubernetes集群中有一个服务,该服务具有标签选择器,几个容器具有该标签,因此被“连接”到该服务。是否可以使用服务IP来检索这些Pod的内部IP地址?

我知道可以在Kubernetes CLI中检索服务端点,但是,我想知道是否可以在Java中实现?即Nslookup。

这个问题的补充可能是:如何对无头服务执行DNS查询,您是否传递服务名称?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以从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来完成,例如JavaGoPython

描述了here的SRV记录,可用于查找服务的CLUSTER-IP地址(而不是Pod的IP地址)。在广告连播中:

 $ dig srv _portname._tcp.servicename.default.svc.cluster.local
 ...
 servicename.default.svc.cluster.local. 5 IN A  10.x.x.x <== service IP
 ...