Skip to content

Commit 731d12d

Browse files
authored
reorg: Decouple TLS implementation from proxy client (#1349)
Currently the TLS implementation in `proxy-identity-default` depends on `proxy-identity`, which depends on the proxy API to implement its refreshing identity client. This change updates these crates so that the TLS implementation only depends on the core identity crate as follows: * Move `proxy_identity::Credentials` to `identity::Credentials`; * Move `proxy/identity/default` to `identity/default`; * Rename `proxy/identity` to `proxy/identity-client` to help disambiguate it from the core identity crate.
1 parent ab7dfa8 commit 731d12d

File tree

30 files changed

+188
-161
lines changed

30 files changed

+188
-161
lines changed

Cargo.lock

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@ dependencies = [
674674
"linkerd-http-classify",
675675
"linkerd-http-metrics",
676676
"linkerd-http-retry",
677+
"linkerd-identity-default",
677678
"linkerd-io",
678679
"linkerd-metrics",
679680
"linkerd-opencensus",
@@ -682,7 +683,7 @@ dependencies = [
682683
"linkerd-proxy-discover",
683684
"linkerd-proxy-dns-resolve",
684685
"linkerd-proxy-http",
685-
"linkerd-proxy-identity-default",
686+
"linkerd-proxy-identity-client",
686687
"linkerd-proxy-resolve",
687688
"linkerd-proxy-tap",
688689
"linkerd-proxy-tcp",
@@ -742,8 +743,8 @@ dependencies = [
742743
"libfuzzer-sys",
743744
"linkerd-app-core",
744745
"linkerd-app-test",
746+
"linkerd-identity-default",
745747
"linkerd-io",
746-
"linkerd-proxy-identity-default",
747748
"linkerd-server-policy",
748749
"linkerd-tonic-watch",
749750
"linkerd-tracing",
@@ -798,8 +799,8 @@ dependencies = [
798799
"linkerd-app-test",
799800
"linkerd-http-retry",
800801
"linkerd-identity",
802+
"linkerd-identity-default",
801803
"linkerd-io",
802-
"linkerd-proxy-identity-default",
803804
"linkerd-tracing",
804805
"parking_lot",
805806
"pin-project",
@@ -995,6 +996,30 @@ name = "linkerd-identity"
995996
version = "0.1.0"
996997
dependencies = [
997998
"linkerd-dns-name",
999+
"linkerd-error",
1000+
]
1001+
1002+
[[package]]
1003+
name = "linkerd-identity-default"
1004+
version = "0.1.0"
1005+
dependencies = [
1006+
"futures",
1007+
"linkerd-conditional",
1008+
"linkerd-error",
1009+
"linkerd-identity",
1010+
"linkerd-io",
1011+
"linkerd-proxy-transport",
1012+
"linkerd-stack",
1013+
"linkerd-tls",
1014+
"linkerd-tls-test-util",
1015+
"linkerd-tracing",
1016+
"ring",
1017+
"thiserror",
1018+
"tokio",
1019+
"tokio-rustls",
1020+
"tower",
1021+
"tracing",
1022+
"webpki",
9981023
]
9991024

10001025
[[package]]
@@ -1136,7 +1161,7 @@ dependencies = [
11361161
]
11371162

11381163
[[package]]
1139-
name = "linkerd-proxy-identity"
1164+
name = "linkerd-proxy-identity-client"
11401165
version = "0.1.0"
11411166
dependencies = [
11421167
"futures",
@@ -1154,29 +1179,6 @@ dependencies = [
11541179
"tracing",
11551180
]
11561181

1157-
[[package]]
1158-
name = "linkerd-proxy-identity-default"
1159-
version = "0.1.0"
1160-
dependencies = [
1161-
"futures",
1162-
"linkerd-conditional",
1163-
"linkerd-error",
1164-
"linkerd-io",
1165-
"linkerd-proxy-identity",
1166-
"linkerd-proxy-transport",
1167-
"linkerd-stack",
1168-
"linkerd-tls",
1169-
"linkerd-tls-test-util",
1170-
"linkerd-tracing",
1171-
"ring",
1172-
"thiserror",
1173-
"tokio",
1174-
"tokio-rustls",
1175-
"tower",
1176-
"tracing",
1177-
"webpki",
1178-
]
1179-
11801182
[[package]]
11811183
name = "linkerd-proxy-resolve"
11821184
version = "0.1.0"
@@ -1200,10 +1202,9 @@ dependencies = [
12001202
"ipnet",
12011203
"linkerd-conditional",
12021204
"linkerd-error",
1203-
"linkerd-identity",
1205+
"linkerd-identity-default",
12041206
"linkerd-io",
12051207
"linkerd-proxy-http",
1206-
"linkerd-proxy-identity-default",
12071208
"linkerd-stack",
12081209
"linkerd-tls",
12091210
"linkerd2-proxy-api",

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ members = [
2929
"linkerd/http-metrics",
3030
"linkerd/http-retry",
3131
"linkerd/identity",
32+
"linkerd/identity/default",
3233
"linkerd/io",
3334
"linkerd/metrics",
3435
"linkerd/opencensus",
@@ -37,8 +38,7 @@ members = [
3738
"linkerd/proxy/core",
3839
"linkerd/proxy/discover",
3940
"linkerd/proxy/http",
40-
"linkerd/proxy/identity",
41-
"linkerd/proxy/identity/default",
41+
"linkerd/proxy/identity-client",
4242
"linkerd/proxy/resolve",
4343
"linkerd/proxy/tap",
4444
"linkerd/proxy/tcp",

linkerd/app/core/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ linkerd-exp-backoff = { path = "../../exp-backoff" }
3333
linkerd-http-classify = { path = "../../http-classify" }
3434
linkerd-http-metrics = { path = "../../http-metrics" }
3535
linkerd-http-retry = { path = "../../http-retry" }
36+
linkerd-identity-default = { path = "../../identity/default" }
3637
linkerd-io = { path = "../../io" }
3738
linkerd-metrics = { path = "../../metrics", features = ["linkerd-stack"] }
3839
linkerd-opencensus = { path = "../../opencensus" }
3940
linkerd-proxy-core = { path = "../../proxy/core" }
4041
linkerd-proxy-api-resolve = { path = "../../proxy/api-resolve" }
4142
linkerd-proxy-discover = { path = "../../proxy/discover" }
42-
linkerd-proxy-identity-default = { path = "../../proxy/identity/default" }
43+
linkerd-proxy-identity-client = { path = "../../proxy/identity-client" }
4344
linkerd-proxy-http = { path = "../../proxy/http" }
4445
linkerd-proxy-resolve = { path = "../../proxy/resolve" }
4546
linkerd-proxy-dns-resolve = { path = "../../proxy/dns-resolve" }

linkerd/app/core/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ pub use linkerd_dns;
2020
pub use linkerd_error::{is_error, Error, Infallible, Recover, Result};
2121
pub use linkerd_exp_backoff as exp_backoff;
2222
pub use linkerd_http_metrics as http_metrics;
23+
pub use linkerd_identity_default as identity;
2324
pub use linkerd_io as io;
2425
pub use linkerd_opencensus as opencensus;
25-
pub use linkerd_proxy_identity_default as identity;
26+
pub use linkerd_proxy_identity_client as identity_client;
2627
pub use linkerd_service_profiles as profiles;
2728
pub use linkerd_stack_metrics as stack_metrics;
2829
pub use linkerd_stack_tracing as stack_tracing;

linkerd/app/inbound/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ libfuzzer-sys = { version = "0.4.2", features = ["arbitrary-derive"] }
3434
hyper = { version = "0.14.14", features = ["http1", "http2"] }
3535
linkerd-app-test = { path = "../test" }
3636
linkerd-io = { path = "../../io", features = ["tokio-test"] }
37-
linkerd-proxy-identity-default = { path = "../../proxy/identity/default", features = ["test-util"] }
37+
linkerd-identity-default = { path = "../../identity/default", features = ["test-util"] }
3838
linkerd-tracing = { path = "../../tracing", features = ["ansi"] }
3939
tokio = { version = "1", features = ["full", "macros"] }
4040
tokio-test = "0.4"

linkerd/app/inbound/fuzz/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ libfuzzer-sys = { version = "0.4.2", features = ["arbitrary-derive"] }
1717
linkerd-app-core = { path = "../../core" }
1818
linkerd-app-inbound = { path = ".." }
1919
linkerd-app-test = { path = "../../test" }
20-
linkerd-proxy-identity-default = { path = "../../../proxy/identity/default", features = ["test-util"] }
20+
linkerd-identity-default = { path = "../../../identity/default", features = ["test-util"] }
2121
linkerd-tracing = { path = "../../../tracing", features = ["ansi"] }
2222
tokio = { version = "1", features = ["full"] }
2323
tracing = "0.1"

linkerd/app/outbound/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pin-project = "1"
3232
hyper = { version = "0.14.14", features = ["http1", "http2"] }
3333
linkerd-app-test = { path = "../test" }
3434
linkerd-io = { path = "../../io", features = ["tokio-test"] }
35-
linkerd-proxy-identity-default = { path = "../../proxy/identity/default", features = ["test-util"] }
35+
linkerd-identity-default = { path = "../../identity/default", features = ["test-util"] }
3636
linkerd-tracing = { path = "../../tracing", features = ["ansi"] }
3737
parking_lot = "0.11"
3838
tokio = { version = "1", features = ["time", "macros"] }

linkerd/app/src/env.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::core::{
22
addr,
33
config::*,
44
control::{Config as ControlConfig, ControlAddr},
5+
identity_client,
56
proxy::http::{h1, h2},
67
tls,
78
transport::{Keepalive, ListenAddr},
@@ -1101,7 +1102,14 @@ pub fn parse_control_addr<S: Strings>(
11011102

11021103
pub fn parse_identity_config<S: Strings>(
11031104
strings: &S,
1104-
) -> Result<(ControlAddr, identity::certify::Config, identity::Documents), EnvError> {
1105+
) -> Result<
1106+
(
1107+
ControlAddr,
1108+
identity_client::certify::Config,
1109+
identity::Documents,
1110+
),
1111+
EnvError,
1112+
> {
11051113
let control = parse_control_addr(strings, ENV_IDENTITY_SVC_BASE);
11061114
let ta = parse(strings, ENV_IDENTITY_TRUST_ANCHORS, |s| {
11071115
if s.is_empty() {

linkerd/app/src/identity.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
pub use linkerd_app_core::identity::*;
21
use linkerd_app_core::{
32
control, dns,
43
exp_backoff::{ExponentialBackoff, ExponentialBackoffStream},
5-
identity,
6-
metrics::ControlHttp as Metrics,
4+
identity::{creds, Credentials, DerX509},
5+
identity_client::{Certify, Metrics as IdentityMetrics},
6+
metrics::ControlHttp as ClientMetrics,
77
Error, Result,
88
};
9+
pub use linkerd_app_core::{
10+
identity::{InvalidName, LocalId, Name},
11+
identity_client::{certify, TokenSource},
12+
};
913
use std::{future::Future, pin::Pin};
1014
use tokio::sync::watch;
1115
use tracing::Instrument;
@@ -27,9 +31,9 @@ pub struct Documents {
2731

2832
pub struct Identity {
2933
addr: control::ControlAddr,
30-
receiver: identity::creds::Receiver,
34+
receiver: creds::Receiver,
3135
ready: watch::Receiver<bool>,
32-
metrics: identity::Metrics,
36+
metrics: IdentityMetrics,
3337
task: Task,
3438
}
3539

@@ -41,22 +45,22 @@ struct Recover(ExponentialBackoff);
4145
/// Wraps a credential with a watch sender that notifies receivers when the store has been updated
4246
/// at least once.
4347
struct NotifyReady {
44-
store: identity::creds::Store,
48+
store: creds::Store,
4549
tx: watch::Sender<bool>,
4650
}
4751

4852
// === impl Config ===
4953

5054
impl Config {
51-
pub fn build(self, dns: dns::Resolver, client_metrics: Metrics) -> Result<Identity> {
52-
let (store, receiver) = identity::creds::watch(
55+
pub fn build(self, dns: dns::Resolver, client_metrics: ClientMetrics) -> Result<Identity> {
56+
let (store, receiver) = creds::watch(
5357
(*self.documents.id).clone(),
5458
&self.documents.trust_anchors_pem,
5559
&self.documents.key_pkcs8,
5660
&self.documents.csr_der,
5761
)?;
5862

59-
let certify = identity::Certify::from(self.certify);
63+
let certify = Certify::from(self.certify);
6064
let metrics = certify.metrics();
6165

6266
let addr = self.control.addr.clone();
@@ -85,21 +89,21 @@ impl Config {
8589
}
8690
}
8791

88-
impl identity::Credentials for NotifyReady {
92+
impl Credentials for NotifyReady {
8993
#[inline]
9094
fn dns_name(&self) -> &Name {
9195
self.store.dns_name()
9296
}
9397

9498
#[inline]
95-
fn gen_certificate_signing_request(&mut self) -> identity::DerX509 {
99+
fn gen_certificate_signing_request(&mut self) -> DerX509 {
96100
self.store.gen_certificate_signing_request()
97101
}
98102

99103
fn set_certificate(
100104
&mut self,
101-
leaf: identity::DerX509,
102-
chain: Vec<identity::DerX509>,
105+
leaf: DerX509,
106+
chain: Vec<DerX509>,
103107
expiry: std::time::SystemTime,
104108
) -> Result<()> {
105109
self.store.set_certificate(leaf, chain, expiry)?;
@@ -136,11 +140,11 @@ impl Identity {
136140
})
137141
}
138142

139-
pub fn receiver(&self) -> identity::creds::Receiver {
143+
pub fn receiver(&self) -> creds::Receiver {
140144
self.receiver.clone()
141145
}
142146

143-
pub fn metrics(&self) -> identity::Metrics {
147+
pub fn metrics(&self) -> IdentityMetrics {
144148
self.metrics.clone()
145149
}
146150

linkerd/identity/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ publish = false
88

99
[dependencies]
1010
linkerd-dns-name = { path = "../dns/name" }
11+
linkerd-error = { path = "../error" }

0 commit comments

Comments
 (0)