0

最近、Kubernetes でコンテナー、ポッド、サービスなどを管理するために fabric8 を使用するコード ベースの作業を開始しました。

特定のポッドのサービスを作成した後、エンド ユーザーに、そのサービスにアクセスできる外部 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.

上記のコマンドの実行時に実行されていた REST API 呼び出しを追跡するために、wireshark を使用しました。生の 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

4

1 に答える 1

1

Fabric8 クライアントには、次の API 呼び出しがあります。

client.endpoints().get();

これにより、すべてのエンドポイントのリストが得られます。以下を使用して、受け取るリストを特定の名前空間/ラベルに制限する方法があります。

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

于 2015-12-30T06:44:56.233 に答える