是否有fabric8 API(用于kubernetes)来观看与服务相关的事件并找到其公共IP?

时间:2015-12-30 06:25:47

标签: service kubernetes fabric8

我最近开始研究使用fabric8管理容器,pods的代码库, kubernetes的服务等。

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

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

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()(每当我们得到 与我们的服务相关联的事件),但这总是空的; ^(

非常感谢任何提示或指导....     -Chris

1 个答案:

答案 0 :(得分:1)

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

client.endpoints().get();

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

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