我最近开始研究使用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
答案 0 :(得分:1)
Fabric8客户端具有以下API调用:
client.endpoints().get();
这将为您提供所有终点的列表。现在有一些方法可以使用以下方法将您收到的列表限制为特定的命名空间/标签:
client.endpoints().inNamespace("5683616f16426028459a535c").withLabel("name", "spark-master").list();