我们有Kubernetes集群,每个服务有3个Pod运行。我们有一个用例,我希望每个Pod都知道其他Pod的IP。
For Example:
P1 --> this pod should know ip of itself, p2, p3 pod ip's
P2 --> this pod should know ip of itself, p1, p3 pod ip's
p3 --> this pod should know ip of itself, p2, p3 pod ip's
我在谷歌上找到了这个,但看起来我们只得到了豆荚本身的IP,它不会给予其他两个豆荚运行的IP。
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
有没有一种方法可以在我的Java代码中获得这些信息?
4条答案
按热度按时间lf3rwulv1#
使用你提到的env可能不够,因为pod应该是临时资源,可以被添加和删除。
但下面的命令可以获取值
您没有提到Pod是否属于同一个服务,但如果是这样(我认为是这样),您可以使用Selectors
这里的两个IP是x.y.z.a和b.c.d.e
您应该能够在相应的语言(Java)API库中找到等效的
如果您可以让请求转到任何pod,可以查看Kube DNS
g0czyy6m2#
您可以获取端点的子集以获取所有Pod的IP。端点与您的svc同名。使用
kubectl get ep ep-name -n your-ns -o yaml
了解详细信息。对于Java代码,您可以使用k8s java客户端(Officail/fabric lib)或通过k8s API访问。
更新:
可以获取所有Pod的IP。使用fabric 8 lib,您可以引用此示例
如果您的控制器是StatefulSet,可以使用headless service连接其他StatefulSet Pod。
bnl4lu3b3#
如果你正在寻找一个为pod的副本提供确定性目的地址的解决方案,我可能会选择使用headless服务部署的statefulset。这样的设置会给予你一个集群内的DNS地址,比如pod-[1,2,3].svc-name.default.cluster.local然后你可以使用这些DNS地址让pod互相通信。https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id
vulvrdjw4#
如果你需要很多关于豆荚的信息...
kubectl get pods -n <namespace> --output=wide
包括IP、状态、主机节点等