Skip to content

Commit 174a25e

Browse files
moreno-michaeldyc3
andcommitted
Add compatibility with Docker dns servers (#1290)
* added dns.rs, adds compatibility with dns servers * Adjusted format for Docker DNS * added missing field * made suggested changes, working on resolving compiler issues * fixed compiler issues * ran cargo fmt * made most suggested changes * fixing compiler issues * update balancer config for docker * Update crates/ott-balancer/src/discovery/dns.rs --------- Co-authored-by: Carson McManus <[email protected]> Co-authored-by: Carson McManus <[email protected]>
1 parent d5a0534 commit 174a25e

File tree

5 files changed

+64
-3
lines changed

5 files changed

+64
-3
lines changed

crates/ott-balancer/src/config.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use clap::{Parser, ValueEnum};
44
use figment::providers::Format;
55
use serde::Deserialize;
66

7-
use crate::discovery::{FlyDiscoveryConfig, HarnessDiscoveryConfig, ManualDiscoveryConfig};
7+
use crate::discovery::{
8+
DnsDiscoveryConfig, FlyDiscoveryConfig, HarnessDiscoveryConfig, ManualDiscoveryConfig,
9+
};
810

911
static mut CONFIG: Option<BalancerConfig> = None;
1012

@@ -32,6 +34,7 @@ impl Default for BalancerConfig {
3234
#[derive(Debug, Deserialize)]
3335
#[serde(tag = "method", rename_all = "lowercase")]
3436
pub enum DiscoveryConfig {
37+
Dns(DnsDiscoveryConfig),
3538
Fly(FlyDiscoveryConfig),
3639
Manual(ManualDiscoveryConfig),
3740
Harness(HarnessDiscoveryConfig),

crates/ott-balancer/src/discovery.rs

+2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ use std::net::IpAddr;
44
use std::time::Duration;
55
use std::{collections::HashSet, net::SocketAddr};
66

7+
mod dns;
78
mod fly;
89
mod harness;
910
mod manual;
1011

12+
pub use dns::*;
1113
pub use fly::*;
1214
pub use harness::*;
1315
pub use manual::*;
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
use async_trait::async_trait;
2+
use tracing::info;
3+
use trust_dns_resolver::TokioAsyncResolver;
4+
5+
use super::*;
6+
7+
#[derive(Debug, Clone, Deserialize)]
8+
pub struct DnsDiscoveryConfig {
9+
/// The port that monoliths should be listening on for load balancer connections.
10+
pub monolith_port: u16,
11+
/// The DNS server to query. Optional. If not provided, the system configuration will be used instead.
12+
pub dns_server: Option<String>,
13+
/// The A record to query. If using docker-compose, this should be the service name for the monolith.
14+
pub query: String,
15+
}
16+
17+
pub struct DnsMonolithDiscoverer {
18+
config: DnsDiscoveryConfig,
19+
}
20+
21+
impl DnsMonolithDiscoverer {
22+
pub fn new(config: DnsDiscoveryConfig) -> Self {
23+
info!(
24+
"Creating DnsMonolithDiscoverer, DNS server: {:?}",
25+
config.dns_server
26+
);
27+
Self { config }
28+
}
29+
}
30+
31+
#[async_trait]
32+
impl MonolithDiscoverer for DnsMonolithDiscoverer {
33+
async fn discover(&mut self) -> anyhow::Result<Vec<MonolithConnectionConfig>> {
34+
let resolver =
35+
TokioAsyncResolver::tokio_from_system_conf().expect("failed to create resolver");
36+
37+
let lookup = resolver.ipv4_lookup(&self.config.query).await?;
38+
let monoliths = lookup
39+
.iter()
40+
.map(|ip| MonolithConnectionConfig {
41+
host: HostOrIp::Ip(IpAddr::V4(*ip)),
42+
port: self.config.monolith_port,
43+
})
44+
.collect::<Vec<_>>();
45+
46+
Ok(monoliths)
47+
}
48+
49+
fn mode(&self) -> DiscoveryMode {
50+
DiscoveryMode::Polling(Duration::from_secs(10))
51+
}
52+
}

crates/ott-balancer/src/lib.rs

+4
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ pub async fn run() -> anyhow::Result<()> {
6565

6666
info!("Starting monolith discovery");
6767
let _discovery_handle = match &config.discovery {
68+
DiscoveryConfig::Dns(config) => {
69+
let discovery = discovery::DnsMonolithDiscoverer::new(config.clone());
70+
start_discovery_task(discovery, discovery_tx)
71+
}
6872
DiscoveryConfig::Fly(config) => {
6973
let discovery = discovery::FlyMonolithDiscoverer::new(config.clone());
7074
start_discovery_task(discovery, discovery_tx)

deploy/ott-balancer-docker.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[discovery]
2-
method = "docker"
2+
method = "dns"
33
monolith_port = 3002
4-
monolith_container_name = "opentogethertube"
4+
query = "opentogethertube"

0 commit comments

Comments
 (0)