#kubernetes-cluster #kubernetes #cluster #discovery #service-discovery #kube #api-service

kube-discovery

帮助您在 Kubernetes 集群中查找服务和部署信息的功能

7 个不稳定版本 (3 个破坏性更新)

0.4.2 2024 年 4 月 19 日
0.4.1 2024 年 3 月 25 日
0.3.3 2024 年 3 月 20 日
0.3.2 2024 年 1 月 23 日
0.1.0 2023 年 10 月 1 日

#653开发工具

Download history 6/week @ 2024-04-12 134/week @ 2024-04-19 1/week @ 2024-04-26 5/week @ 2024-06-07 14/week @ 2024-06-14 3/week @ 2024-06-21 1/week @ 2024-06-28

每月下载量 694 次
generic-db-observer 中使用

MIT/Apache

25KB
381 代码行

kube-discovery

使用场景

"我在 Kubernetes 集群上有一个测试环境,但我不想不断更新我的环境变量中的位置和认证信息。我能否直接访问集群并从中加载相关数据?"

局限性

此 crate 是为我的特定用例编写的,因此它所做的某些假设可能对其他配置不适用。
注意:此 crate 使用固定版本的 Kubernetes 的 k8s_openapi。请确保为相应版本启用对应的 v1-feature。此外,请确保使用 kube_discovery::kube 作为 kube crate,并使用 kube_discovery::k8s_openapi 作为 k8s_openapi crate。这样您就可以避免版本冲突。

示例(位置发现)

use kube_discovery::k8s_openapi::api::core::v1::Service;
use kube_discovery::kube::{
    api::{DeleteParams, PostParams},
    Api, Client, Config,
};
use kube_discovery::*;

#[tokio::main]
async fn main() {
    // doctest setup
    let kube_config = Config::infer().await.unwrap();
    let kube_client = Client::try_from(kube_config.clone()).unwrap();
    let svc_api: Api<Service> = Api::namespaced(kube_client.clone(), "scratch");

    // Say you've got a service like this
    let service_with_nodeport: Service = serde_yaml::from_str(
        "
    apiVersion: v1
    kind: Service
    metadata:
      name: doctest-example
      labels:
        app: doctest-example
    spec:
      type: NodePort
      selector:
        app: example-app
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
        nodePort: 31234
    ",
    )
    .unwrap();
    svc_api
        .create(&PostParams::default(), &service_with_nodeport)
        .await
        .unwrap();

    // Instead of storing the service's public url in some environment variable
    // (or, heavens forbid, even hardcoding it), just load the location based
    // on the service's labels.
    let service_uri = LabelSelector("app=doctest-example")
        .load_service_host(&kube_config, &kube_client)
        .await
        .unwrap();

    assert_eq!(service_uri, "162.55.38.94:31234");

    // doctest cleanup
    svc_api
        .delete("doctest-example", &DeleteParams::default())
        .await
        .unwrap();
}

许可证

MIT OR Apache-2.0

依赖关系

~46MB
~733K SLoC