Skip to content

Commit

Permalink
Add methods to create HttpsConnector directly from Config
Browse files Browse the repository at this point in the history
  • Loading branch information
kazk committed Jun 3, 2021
1 parent 33e62f7 commit 06668cb
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 38 deletions.
7 changes: 2 additions & 5 deletions examples/Cargo.toml
Expand Up @@ -13,15 +13,12 @@ edition = "2018"
default = ["native-tls", "schema", "kubederive", "ws"]
kubederive = ["kube/derive"] # by default import kube-derive with its default features
schema = ["kube-derive/schema"] # crd_derive_no_schema shows how to opt out
native-tls = ["kube/client", "kube/native-tls", "hyper-tls", "tokio-native-tls"]
rustls-tls = ["kube/client", "kube/rustls-tls", "hyper-rustls"]
native-tls = ["kube/client", "kube/native-tls"]
rustls-tls = ["kube/client", "kube/rustls-tls"]
ws = ["kube/ws"]

[dependencies]
tokio-util = "0.6.0"
hyper-tls = { version = "0.5.0", optional = true }
tokio-native-tls = { version = "0.3.0", optional = true }
hyper-rustls = { version = "0.22.1", optional = true }

[dev-dependencies]
anyhow = "1.0.37"
Expand Down
10 changes: 1 addition & 9 deletions examples/custom_client.rs
@@ -1,6 +1,4 @@
// Minimal custom client example.
use hyper::client::HttpConnector;
use hyper_tls::HttpsConnector;
use k8s_openapi::api::core::v1::ConfigMap;
use tower::ServiceBuilder;

Expand All @@ -16,13 +14,7 @@ async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();

let config = Config::infer().await?;
// Create HttpsConnector using `native_tls::TlsConnector` based on `Config`.
let https = {
let tls = tokio_native_tls::TlsConnector::from(config.native_tls_connector()?);
let mut http = HttpConnector::new();
http.enforce_http(false);
HttpsConnector::from((http, tls))
};
let https = config.native_tls_https_connector()?;
let client = Client::new(
ServiceBuilder::new()
.layer(SetBaseUriLayer::new(config.cluster_url))
Expand Down
17 changes: 2 additions & 15 deletions examples/custom_client_tls.rs
@@ -1,9 +1,6 @@
// Custom client supporting both native-tls and rustls-tls
// Must enable `rustls-tls` feature to run this.
// Run with `USE_RUSTLS=1` to pick rustls.
use std::sync::Arc;

use hyper::client::HttpConnector;
use k8s_openapi::api::core::v1::ConfigMap;
use tower::ServiceBuilder;

Expand All @@ -23,24 +20,14 @@ async fn main() -> anyhow::Result<()> {
// Pick TLS at runtime
let use_rustls = std::env::var("USE_RUSTLS").map(|s| s == "1").unwrap_or(false);
let client = if use_rustls {
let https = {
let rustls_config = Arc::new(config.rustls_tls_client_config()?);
let mut http = HttpConnector::new();
http.enforce_http(false);
hyper_rustls::HttpsConnector::from((http, rustls_config))
};
let https = config.rustls_tls_https_connector()?;
Client::new(
ServiceBuilder::new()
.layer(SetBaseUriLayer::new(config.cluster_url))
.service(hyper::Client::builder().build(https)),
)
} else {
let https = {
let tls = tokio_native_tls::TlsConnector::from(config.native_tls_connector()?);
let mut http = HttpConnector::new();
http.enforce_http(false);
hyper_tls::HttpsConnector::from((http, tls))
};
let https = config.native_tls_https_connector()?;
Client::new(
ServiceBuilder::new()
.layer(SetBaseUriLayer::new(config.cluster_url))
Expand Down
11 changes: 2 additions & 9 deletions examples/custom_client_trace.rs
Expand Up @@ -2,8 +2,7 @@
use std::time::Duration;

use http::{Request, Response};
use hyper::{client::HttpConnector, Body};
use hyper_tls::HttpsConnector;
use hyper::Body;
use k8s_openapi::api::core::v1::ConfigMap;
use tower::ServiceBuilder;
use tower_http::{decompression::DecompressionLayer, trace::TraceLayer};
Expand All @@ -21,13 +20,7 @@ async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::init();

let config = Config::infer().await?;
// Create HttpsConnector using `native_tls::TlsConnector` based on `Config`.
let https = {
let tls = tokio_native_tls::TlsConnector::from(config.native_tls_connector()?);
let mut http = HttpConnector::new();
http.enforce_http(false);
HttpsConnector::from((http, tls))
};
let https = config.native_tls_https_connector()?;
let client = Client::new(
ServiceBuilder::new()
.layer(SetBaseUriLayer::new(config.cluster_url))
Expand Down
26 changes: 26 additions & 0 deletions kube/src/config/tls.rs
Expand Up @@ -4,6 +4,7 @@ use super::Config;

impl Config {
/// Create `native_tls::TlsConnector`
#[cfg_attr(docsrs, doc(cfg(feature = "native-tls")))]
#[cfg(feature = "native-tls")]
pub fn native_tls_connector(&self) -> Result<tokio_native_tls::native_tls::TlsConnector> {
self::native_tls::native_tls_connector(
Expand All @@ -13,7 +14,20 @@ impl Config {
)
}

/// Create `hyper_tls::HttpsConnector`
#[cfg_attr(docsrs, doc(cfg(all(feature = "client", feature = "native-tls"))))]
#[cfg(all(feature = "client", feature = "native-tls"))]
pub fn native_tls_https_connector(
&self,
) -> Result<hyper_tls::HttpsConnector<hyper::client::HttpConnector>> {
let tls = tokio_native_tls::TlsConnector::from(self.native_tls_connector()?);
let mut http = hyper::client::HttpConnector::new();
http.enforce_http(false);
Ok(hyper_tls::HttpsConnector::from((http, tls)))
}

/// Create `rustls::ClientConfig`
#[cfg_attr(docsrs, doc(cfg(feature = "rustls-tls")))]
#[cfg(feature = "rustls-tls")]
pub fn rustls_tls_client_config(&self) -> Result<rustls::ClientConfig> {
self::rustls_tls::rustls_client_config(
Expand All @@ -22,6 +36,18 @@ impl Config {
self.accept_invalid_certs,
)
}

/// Create `hyper_rustls::HttpsConnector`
#[cfg_attr(docsrs, doc(cfg(all(feature = "client", feature = "rustls-tls"))))]
#[cfg(all(feature = "client", feature = "rustls-tls"))]
pub fn rustls_tls_https_connector(
&self,
) -> Result<hyper_rustls::HttpsConnector<hyper::client::HttpConnector>> {
let rustls_config = std::sync::Arc::new(self.rustls_tls_client_config()?);
let mut http = hyper::client::HttpConnector::new();
http.enforce_http(false);
Ok(hyper_rustls::HttpsConnector::from((http, rustls_config)))
}
}


Expand Down

0 comments on commit 06668cb

Please sign in to comment.