#service

istio-api-rs

A collection of CRDs for api used in Istio

9 breaking releases

0.10.0 Nov 8, 2024
0.9.0 May 26, 2024
0.8.0 Apr 14, 2024
0.7.0 Nov 24, 2023
0.2.0 Sep 1, 2022

#295 in Network programming

Download history 1/week @ 2024-07-27 22/week @ 2024-09-21 68/week @ 2024-11-02 46/week @ 2024-11-09

114 downloads per month

Apache-2.0

4.5MB
68K SLoC

istio-api-rs

A collection of CRDs used in Istio, generated by kopium directly from istio CRDs.

Quick Start

istio-api-rs is built on top of kube-rs as a set of CRDs, which means it can be easily used under kube_rs like below:

use istio_api_rs::networking::v1beta1::{
    destination_rule::*,
    gateway::*,
    virtual_service::*,
};
use kube::{
    api::ListParams,
    client::ConfigExt,
    Api, Client, Config,
};
use hyper_util::rt::TokioExecutor;
use tower::{BoxError, ServiceBuilder};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let kube_config = Config::infer().await?;
    let https = kube_config.rustls_https_connector()?;

    tracing_subscriber::fmt::init();

    let service = ServiceBuilder::new()
        .layer(kube_config.base_uri_layer())
        .option_layer(kube_config.auth_layer()?)
        .map_err(BoxError::from)
        .service(hyper_util::client::legacy::Client::builder(TokioExecutor::new()).build(https));
    let client = Client::new(service, kube_config.default_namespace);
    let list_opt = ListParams::default();

    let gws: Api<Gateway> = Api::namespaced(client.clone(), "default");
    for gw in gws.list(&list_opt).await? {
        println!("Found Gateway: {}", gw.metadata.name.unwrap());
    }

    let drs: Api<DestinationRule> = Api::namespaced(client.clone(), "default");
    for dr in drs.list(&list_opt).await? {
        println!("Found Destination Rule: {}", dr.metadata.name.unwrap());
    }

    let vss: Api<VirtualService> = Api::namespaced(client.clone(), "default");
    for vs in vss.list(&list_opt).await? {
        let content = serde_yaml::to_string(&vs).unwrap();
        println!("Found Virtual Service with YAML content: {}", content);
    }

    Ok(())
}

And in cargo.toml, you should specify the API version for both k8s & istio like:

[dependencies]
# ...
tokio = { version = "1", features = ["full"] }
hyper-util = "0.1.10"
tower = "0.5.1"
rustls = "0.20"
anyhow = "1"
serde_yaml = "0.9"
tracing-subscriber = "0.3"
kube = { version = "0.96", features = ["runtime", "derive"] }
k8s-openapi = { version = "0.23", features = ["v1_31"] }
istio-api-rs = { version = "0.10.0", features = ["v1_23"] }
# ...

Other

istio-api-rs is currently developed and tested on istio/api since v1.10, the lower api version is out of this repository's concern.

The repository is using istio-api-rs-codegen as code generator, go check that repository if you want to know more about how the codes are generated.

For release package, see crates.io.

Dependencies

~65MB
~1M SLoC