Skip to content

Commit 1df6856

Browse files
authored
Split linkerd-tls from linkerd-proxy-transport (#837)
The `linkerd-proxy-transport` crate has too many concerns. This change splits out the tls module into a dedicated crate, decoupled from the transport types. Additionally, the transport crate no longer re-exports the `linkerd-io` crate. The linkerd-proxy-transport crate has a lingering dependency on linkerd-tls for metric labels. This will be addressed in a followup change. This change sets up additional simplification of the TLS infrastructure to support ALPN.
1 parent 1f0b968 commit 1df6856

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+197
-190
lines changed

Cargo.lock

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ dependencies = [
683683
"linkerd-http-classify",
684684
"linkerd-http-metrics",
685685
"linkerd-identity",
686+
"linkerd-io",
686687
"linkerd-metrics",
687688
"linkerd-opencensus",
688689
"linkerd-proxy-api-resolve",
@@ -702,6 +703,7 @@ dependencies = [
702703
"linkerd-stack-metrics",
703704
"linkerd-stack-tracing",
704705
"linkerd-timeout",
706+
"linkerd-tls",
705707
"linkerd-trace-context",
706708
"linkerd-tracing",
707709
"linkerd-transport-header",
@@ -1175,7 +1177,7 @@ dependencies = [
11751177
"linkerd-error",
11761178
"linkerd-identity",
11771179
"linkerd-metrics",
1178-
"linkerd-proxy-transport",
1180+
"linkerd-tls",
11791181
"linkerd2-proxy-api",
11801182
"pin-project 1.0.2",
11811183
"tokio",
@@ -1207,9 +1209,11 @@ dependencies = [
12071209
"linkerd-conditional",
12081210
"linkerd-error",
12091211
"linkerd-identity",
1212+
"linkerd-io",
12101213
"linkerd-proxy-http",
12111214
"linkerd-proxy-transport",
12121215
"linkerd-stack",
1216+
"linkerd-tls",
12131217
"linkerd2-proxy-api",
12141218
"pin-project 1.0.2",
12151219
"prost-types",
@@ -1243,28 +1247,18 @@ dependencies = [
12431247
"async-trait",
12441248
"bytes",
12451249
"futures",
1246-
"indexmap",
12471250
"libc",
1248-
"linkerd-conditional",
1249-
"linkerd-dns-name",
12501251
"linkerd-errno",
12511252
"linkerd-error",
1252-
"linkerd-identity",
12531253
"linkerd-io",
12541254
"linkerd-metrics",
12551255
"linkerd-stack",
1256+
"linkerd-tls",
12561257
"pin-project 1.0.2",
1257-
"rustls",
12581258
"socket2",
12591259
"tokio",
1260-
"tokio-rustls",
1261-
"tokio-util",
12621260
"tower",
12631261
"tracing",
1264-
"tracing-futures",
1265-
"tracing-subscriber",
1266-
"untrusted",
1267-
"webpki",
12681262
]
12691263

12701264
[[package]]
@@ -1379,6 +1373,31 @@ dependencies = [
13791373
"tracing",
13801374
]
13811375

1376+
[[package]]
1377+
name = "linkerd-tls"
1378+
version = "0.1.0"
1379+
dependencies = [
1380+
"async-trait",
1381+
"bytes",
1382+
"futures",
1383+
"linkerd-conditional",
1384+
"linkerd-dns-name",
1385+
"linkerd-error",
1386+
"linkerd-identity",
1387+
"linkerd-io",
1388+
"linkerd-proxy-transport",
1389+
"linkerd-stack",
1390+
"rustls",
1391+
"tokio",
1392+
"tokio-rustls",
1393+
"tower",
1394+
"tracing",
1395+
"tracing-futures",
1396+
"tracing-subscriber",
1397+
"untrusted",
1398+
"webpki",
1399+
]
1400+
13821401
[[package]]
13831402
name = "linkerd-trace-context"
13841403
version = "0.1.0"

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ members = [
4949
"linkerd/stack/metrics",
5050
"linkerd/stack/tracing",
5151
"linkerd/timeout",
52+
"linkerd/tls",
5253
"linkerd/tracing",
5354
"linkerd2-proxy",
5455
"opencensus-proto",

linkerd/app/core/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ linkerd-exp-backoff = { path = "../../exp-backoff" }
3939
linkerd-http-classify = { path = "../../http-classify" }
4040
linkerd-http-metrics = { path = "../../http-metrics" }
4141
linkerd-identity = { path = "../../identity" }
42+
linkerd-io = { path = "../../io" }
4243
linkerd-metrics = { path = "../../metrics" }
4344
linkerd-transport-header = { path = "../../transport-header" }
4445
linkerd-opencensus = { path = "../../opencensus" }
@@ -61,6 +62,7 @@ linkerd-service-profiles = { path = "../../service-profiles" }
6162
linkerd-stack = { path = "../../stack" }
6263
linkerd-stack-metrics = { path = "../../stack/metrics" }
6364
linkerd-stack-tracing = { path = "../../stack/tracing" }
65+
linkerd-tls = { path = "../../tls" }
6466
linkerd-trace-context = { path = "../../trace-context" }
6567
regex = "1.0.0"
6668
tokio = { version = "1", features = ["macros", "sync", "parking_lot"]}

linkerd/app/core/src/admin/mod.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
//! * `/ready` -- returns 200 when the proxy is ready to participate in meshed traffic.
55
66
use crate::{
7+
io,
78
proxy::http::{ClientHandle, SetClientHandle},
8-
svc, trace,
9-
transport::{io, tls},
9+
svc, tls, trace,
10+
transport::listen::Addrs,
1011
};
1112
use futures::future;
1213
use http::StatusCode;
@@ -15,6 +16,7 @@ use linkerd_error::{Error, Never};
1516
use linkerd_metrics::{self as metrics, FmtMetrics};
1617
use std::{
1718
future::Future,
19+
net::SocketAddr,
1820
pin::Pin,
1921
task::{Context, Poll},
2022
};
@@ -33,10 +35,16 @@ pub struct Admin<M> {
3335
}
3436

3537
#[derive(Clone)]
36-
pub struct Accept<M>(Admin<M>, hyper::server::conn::Http);
38+
pub struct Accept<M> {
39+
service: Admin<M>,
40+
server: hyper::server::conn::Http,
41+
}
3742

3843
#[derive(Clone)]
39-
pub struct Serve<M>(tls::accept::Meta, Accept<M>);
44+
pub struct Serve<M> {
45+
client_addr: SocketAddr,
46+
inner: Accept<M>,
47+
}
4048

4149
pub type ResponseFuture =
4250
Pin<Box<dyn Future<Output = Result<Response<Body>, Never>> + Send + 'static>>;
@@ -57,7 +65,10 @@ impl<M> Admin<M> {
5765
}
5866

5967
pub fn into_accept(self) -> Accept<M> {
60-
Accept(self, hyper::server::conn::Http::new())
68+
Accept {
69+
service: self,
70+
server: hyper::server::conn::Http::new(),
71+
}
6172
}
6273

6374
fn ready_rsp(&self) -> Response<Body> {
@@ -199,11 +210,14 @@ impl<M: FmtMetrics> tower::Service<http::Request<Body>> for Admin<M> {
199210
}
200211
}
201212

202-
impl<M: Clone> svc::NewService<tls::accept::Meta> for Accept<M> {
213+
impl<M: Clone> svc::NewService<tls::accept::Meta<Addrs>> for Accept<M> {
203214
type Service = Serve<M>;
204215

205-
fn new_service(&mut self, meta: tls::accept::Meta) -> Self::Service {
206-
Serve(meta, self.clone())
216+
fn new_service(&mut self, (_, addrs): tls::accept::Meta<Addrs>) -> Self::Service {
217+
Serve {
218+
client_addr: addrs.peer(),
219+
inner: self.clone(),
220+
}
207221
}
208222
}
209223

@@ -221,13 +235,11 @@ where
221235
}
222236

223237
fn call(&mut self, io: I) -> Self::Future {
224-
let Self(ref meta, Accept(ref svc, ref server)) = self;
225-
226238
// Since the `/proxy-log-level` controls access based on the
227239
// client's IP address, we wrap the service with a new service
228240
// that adds the remote IP as a request extension.
229-
let (svc, closed) = SetClientHandle::new(meta.addrs.peer(), svc.clone());
230-
let mut conn = server.serve_connection(io, svc);
241+
let (svc, closed) = SetClientHandle::new(self.client_addr, self.inner.service.clone());
242+
let mut conn = self.inner.server.serve_connection(io, svc);
231243

232244
Box::pin(async move {
233245
tokio::select! {

linkerd/app/core/src/control.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use crate::{
33
proxy::http,
44
reconnect,
55
svc::{self, NewService},
6-
transport::{tls, ConnectTcp},
6+
tls,
7+
transport::ConnectTcp,
78
Addr, Error,
89
};
910
use std::fmt;
@@ -197,8 +198,7 @@ mod balance {
197198

198199
/// Creates a client suitable for gRPC.
199200
mod client {
200-
use crate::transport::tls;
201-
use crate::{proxy::http, svc};
201+
use crate::{proxy::http, svc, tls};
202202
use linkerd_proxy_http::h2::Settings as H2Settings;
203203
use std::{
204204
net::SocketAddr,

linkerd/app/core/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ pub use linkerd_error::{Error, Never, Recover};
1818
pub use linkerd_exp_backoff as exp_backoff;
1919
pub use linkerd_http_metrics as http_metrics;
2020
pub use linkerd_identity as identity;
21+
pub use linkerd_io as io;
2122
pub use linkerd_opencensus as opencensus;
2223
pub use linkerd_reconnect as reconnect;
2324
pub use linkerd_service_profiles as profiles;
2425
pub use linkerd_stack_metrics as stack_metrics;
2526
pub use linkerd_stack_tracing as stack_tracing;
27+
pub use linkerd_tls as tls;
2628
pub use linkerd_trace_context::TraceContext;
2729
pub use linkerd_tracing as trace;
2830
pub use linkerd_transport_header as transport_header;

linkerd/app/core/src/retry.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use super::dst::Route;
33
// use super::handle_time;
44
use super::http_metrics::retries::Handle;
55
use super::metrics::HttpRouteRetry;
6-
use super::transport::tls;
76
use crate::profiles;
87
use futures::future;
98
use hyper::body::HttpBody;
@@ -128,10 +127,6 @@ impl<B: Default + HttpBody> CloneRequest<http::Request<B>> for () {
128127
*clone.headers_mut() = req.headers().clone();
129128
*clone.version_mut() = req.version();
130129

131-
if let Some(ext) = req.extensions().get::<tls::accept::Meta>() {
132-
clone.extensions_mut().insert(ext.clone());
133-
}
134-
135130
// // Count retries toward the request's total handle time.
136131
// if let Some(ext) = req.extensions().get::<handle_time::Tracker>() {
137132
// clone.extensions_mut().insert(ext.clone());

linkerd/app/core/src/transport/labels.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
use super::tls;
21
pub use crate::metrics::{Direction, EndpointLabels, TlsId};
32
use linkerd_conditional::Conditional;
43
use linkerd_metrics::FmtLabels;
4+
use linkerd_tls as tls;
55
use std::fmt;
66

77
/// Describes a class of transport.

linkerd/app/gateway/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ mod test {
1515
profiles,
1616
proxy::{http, identity},
1717
svc::NewService,
18-
transport::tls,
19-
Error, NameAddr, NameMatch, Never,
18+
tls, Error, NameAddr, NameMatch, Never,
2019
};
2120
use linkerd_app_inbound::endpoint as inbound;
2221
use linkerd_app_test as support;

linkerd/app/gateway/src/make.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::gateway::Gateway;
2-
use linkerd_app_core::{identity, profiles, svc, transport::tls, NameAddr};
2+
use linkerd_app_core::{identity, profiles, svc, tls, NameAddr};
33
use linkerd_app_inbound::endpoint as inbound;
44
use linkerd_app_outbound as outbound;
55
use tracing::debug;

0 commit comments

Comments
 (0)