0

我最近开始研究一个代码库,它使用fabric8 来管理kubernetes 中的容器、pod、服务等。

在为给定的 pod 创建服务后,我需要通知我们的最终用户他们可以访问该服务的外部 IP。

从命令行(kubectl),我会做一个描述,并得到这样的输出

kubectl  describe  service   spark-master
    Name:           spark-master
    Namespace:      5683616f16426028459a535c
    Labels:         group=krylov-dev,name=spark-master
    Selector:       name=spark-master
    Type:           LoadBalancer
    IP:         10.0.0.103
    Port:           7077    7077/TCP
    NodePort:       7077    31988/TCP
    Endpoints:      172.17.0.2:7077
    Port:           7070    7070/TCP
    NodePort:       7070    32539/TCP
    Endpoints:      172.17.0.2:7070  <<- this is what i want!
    Session Affinity:   None
    No events.

我使用wireshark来跟踪上述命令运行时正在进行的REST API调用,似乎原始Kubernetes REST API通过这样的URL访问上述信息

GET /api/v1/namespaces/my_namespace_whatever/endpoints/spark-master 

所以,理论上我可以通过原始的 Kubernetes REST API 获得我想要的信息。但是由于我们使用的是fabric8,如果有任何方法可以使用他们的API 来实现这一点,我宁愿坚持下去。

我看到有一个类包含有关fabric8
(io.fabric8.kubernetes.api.model.Endpoints)中端点的信息,但我搜索并找不到有关如何查询服务以获取其端点信息的文档。

此外,当使用 fabric8 API 来观察事件时,我们尝试查看 service.getStatus.getLoadBalancer.getIngress() (每当我们得到与我们的服务关联的事件时),但这总是空的 ;^(

将不胜感激任何提示或指导.... -克里斯

4

1 回答 1

1

Fabric8 客户端具有以下 API 调用:

client.endpoints().get();

这将为您提供所有端点的列表。现在,您可以使用以下方法将收到的列表限制为特定的命名空间/标签:

client.endpoints().inNamespace("5683616f16426028459a535c").withLabel("name", "spark-master").list();

于 2015-12-30T06:44:56.233 回答