GH GambleHub

Service Discovery и DNS

Service Discovery и DNS

1) Perché è necessario

Nei sistemi distribuiti, i nodi compaiono e scompaiono e i clienti devono trovare istanze operative del servizio in modo rapido e affidabile. DNS - Livello di nomi universale servizio discovery è una strategia per confrontare il nome del servizio con gli endpoint reali in base alla salute, al peso e alla politica di routing.

Obiettivi chiave:
  • nomi stabili invece di indirizzi effimeri,
  • accurata, ma non rumorosa (equilibrio tra freschezza e TTL),
  • degrado senza caduta totale (failover/health-check),
  • minimo «congetture» sul client: timeout, retrai, regole di cache.

2) Modelli di servizio discovery

2. 1 Client (client-side)

Il client autorizza il nome in un set di endpoint e bilancia (round-robin, EWMA, hash chiave). La fonte è DNS (A/AAAA/SRV), servizio-registro (Consul/Eureka), elenco statico.

Meno SPOF centrali, algoritmi flessibili.
Contro: eterogeneità dei clienti, è più difficile aggiornare la logica.

2. 2 Server (server-side)

Il cliente va sul fronte/LB (L4/L7, gateway/ingress). Bilanciamento e health-checking - lato proxy/bilanciatore.

I vantaggi sono il luogo unico della politica, l'osservazione.
Contro - Richiede un perimetro ad alta disponibilità (N + 1, multi-AZ).

2. 3 Ibrido

Il DNS fornisce un insieme di punti di ingresso (LB regionali), il successivo è il bilanciamento su L7/mesh.

3) DNS base, record e TTL

3. 1 Tipi di base

A/AAAA - indirizzo IPv4/IPv6.
CNAME - Alias a un altro nome (non ad apex).
SRV — `_service._proto. name 'host/porta/peso/priorità (per , ecc.).
TXT/HTTP/HTTPS - Metadati/puntatori (ad esempio per HTTP-discovery).
NS/SOA - Delega e attributi della zona.

3. 2 TTL e cascata cache

La cache è disponibile: resolver del sistema operativo, resolutore stub locale, nodi ( ), provider, ricorsori intermedi e il client della libreria. Freschezza reale = min (TTL, criterio del client). Anche la cache negativa (NXDOMAIN) viene memorizzata con «SOA». MINIMUM`/`TTL`.

Raccomandazioni:
  • Prod - TTL 30-120s per i record dinamici, 300-600s per quelli stabili.
  • Per i failover, preparare una TTL ridotta in anticipo anziché in caso di incendio.
  • Tieni conto della cache sticky delle librerie (Java/Go/Node) - Configurare il risolutore TTL all'interno del runtime, se necessario.

4) Criteri di bilanciamento e tolleranza DNS

Weighted RR - pesi su A/AAAA/SRV.
Failover - Set primario/secondario (health-check esterno).
Geo/Latency è la risposta al RR/regione più vicina.
Anycast - Un IP in POP diverso (BGP); resistente ai guasti regionali.
Split-horizon - risposte diverse all'interno di VPC/on-pram e su Internet.
GSLB è un bilanciatore globale con health check e regole (latency, geo, capacity).

5) Health-checks e freschezza

Il DNS è da solo «stupido», non conosce la salute dei backend. Quindi:
  • Oppure health-checker esterno controlla i record/pesi (GSLB, Route53/Traffic-policy, esternal-dns + campioni).
  • Oppure client/mesh fa outlier-ejection attivo e retry di molti endpoint.

6) Kubernets: discovery dalla scatola

Nomi di servizio: 'svc. namespace. svc. cluster. local`.
ClusterIP: IP virtuale + kube-proxy/ebpf stabile.
Headless Service ('clusterIP: None') - Fornisce i record A a pod's (o il loro sottofondo), SRV per le porte.
EndpointSlice - Elenco scalabile degli endpoint (Sostituisci Endpoint).
CoreDNS - Risolutore DNS del cluster plugin rewrite/template/forward/cache; 'kube-dns' zona.
DNSCache: cache locale sul nodo più piccola di latency e intercettazione dei problemi dell'upstream resolver.

Esempio: Headless + SRV

yaml apiVersion: v1 kind: Service metadata: { name: payments, namespace: prod }
spec:
clusterIP: None selector: { app: payments }
ports:
- name: grpc port: 50051 targetPort: 50051

Il client può tagliare '_ grpc. _ tcp. payments. prod. svc. cluster. locale '(SRV) e ottenere host/porta/peso.

CoreDNS (porzione di ConfigMap)

yaml apiVersion: v1 kind: ConfigMap metadata: { name: coredns, namespace: kube-system }
data:
Corefile:
.:53 {
errors health ready cache 30 loop forward. /etc/resolv. conf prometheus:9153 reload
}
NodeLocal DNS (idee):
  • con un locale al 169. 254. 20. 10`; kubelet indica questo punto.
  • Riduce p99 name-resolution e protegge da «flap» upstream-DNS.

7) Service discovery вне K8s

Consul: agente, health-checks, servizio-directory, interfaccia DNS ('.consul'), KV per configure.
Eureka/ZooKeeper/etcd: registri per JVM/legacy; spesso in collegamento con sidecar/gateway.
Avvoy/Istio: EDS/xDS (Endpoint Discovery) e SDS (segreti); i servizi vengono annunciati tramite control-plane.

8) Protezione DNS

DNSSEC - Protezione dell'integrità dei record (firma zone). Critico per i domini pubblici.
DoT/DoH: crittografia del canale al ricorsore (criteri interni, compatibilità).
ACL e split-horizon: zona privata - solo VPC/VPN.
Protezione da avvelenamento da cache: randomizzazione delle porte/ID, TTL brevi per l'altoparlante.
Criteri su egress - Consente il DNS solo per i risvolti affidabili, registro.

9) Comportamento dei clienti e retrai

Rispetto della TTL: non memorizzare la cache all'infinito, non distribuirla con frequenti tagliandi (tempesta al ricorsore).
Happy Eyeballs (IPv4/IPv6), connettori paralleli a più A/AAAA riducono il tail.
Retrai solo in caso di richieste idipotenti; jitter, limitazione budget retraes.

Regolazione sottile del RENT:
  • Java: `networkaddress. cache. ttl`, `networkaddress. cache. negative. ttl`.
  • Go: `GODEBUG=netdns=go`/`cgo`, `Resolver. PreferGo`, `DialTimeout`.
  • Node: `dns. setDefaultResultOrder('ipv4first')`, `lookup` с `all:true`.

10) GSLB/DNS - Pratica

Abbassare la TTL da 24-48 ore prima del cambio programmato.
Tenete un set di endpoint canarini a basso peso per la validazione.
Utilizzare weighted + health-check invece dell'update manuale dei record A.
Per statica/edge - Anycast; per API - Geo/Latency + veloce L7-feelover.

11) Osservabilità e SLO per il nome

Metriche:
  • Rate/latency query DNS, cache hit-ratio, errori per tipo (SERVFAIL/NXDOMAIN).
  • Percentuale di richieste con risposte stale (se si utilizza lo stale-cache).
  • Successo delle operazioni utente per i cambi di record (Business SLI).
  • p95/p99 resolve-time nelle applicazioni.
Diagnostica:
  • Rilascia il percorso: il client la cache locale con la cache a nodo, il resolver a cluster del provider.
  • Monitorare i picchi NXDOMAIN (errori di nome/errore) e SERVFAIL (problemi ricorsori/risorse-limite).

12) Esempi di configurazione

CoreDNS: rewrite e zona stub

yaml
.:53 {
log errors cache 60 rewrite name suffix. svc. cluster. local. svc. cluster. local forward. 10. 0. 0. 2 10. 0. 0. 3
}

example. internal:53 {
file /zones/example. internal. signed dnssec
}

systemd-resolved (forza resolver locale)

ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes

Avvoy: DNS-refresh dinamico

yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true

esternal-dns (supporto area pubblica)

yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod

13) Assegno foglio di implementazione (0-30 giorni)

0-7 giorni

Elenco dei nomi dei servizi, selezione del modello (client/server-side/ibrido).
TTL di base, attivare le NodeLocal DNSCache, i dashboard DNS-metriche.
Proibizione dì hard IP "nella configurazione/codice.

8-20 giorni

Servizi Headless + SRV per l' gRPC; Il EndpointSlice è acceso.
GSLB/weighted per esterni; health-checks e canarino.
Timeout/retrai dei clienti configurati e budget dei retrai.

21-30 giorni

Split-horizon e aree private; DoT/DoH di politica.
Test di commutazione (TTL) e feelover post-analisi.
I criteri mesh/EDS, outlier-ejection sono inclusi.

14) Anti-pattern

TTL = 0 nel →, tempesta ai ricorsori, ritardi imprevedibili.
Hardcode IP/porte, nessun CNAME/aliase per i livelli.
Modifica manuale dei record senza health-checks o canarini.
Una risolutrice globale senza cache sui nodi (ristretto).
Ignora la cache negativa (picchi NXDOMAIN).
Tentativi di «curare» un guasto DNS anziché un livello di dati/feelover.

15) Metriche di maturità

Il 100% dei servizi utilizza i nomi; Zero casi di hard-IP.
CoreDNS/NodeLocal in vendita, cache hit-ratio> 90% su nodi.
GSLB con health-checks documentati da TTL e runbook failover.
SRV/EndpointSlice per il stateful/gRPC, p99 resolve-time nelle applicazioni ≤ 20-30 ms.
Alert per SERVFAIL/NXDOMAIN e degrado cache hit-ratio.
Controlli CI: proibizione di latest e hard-IP nelle liste/configurazioni.

16) Conclusione

Servizio discovery è un contratto di nome stabile e disciplina della cache. Costruisci un modello ibrido: DNS fornisce un ingresso rapido e semplice, L7/mesh: salute e politiche intelligenti. Supportare TTL intelligenti, cache su nodi, servizi headless e SRV dove necessario, utilizzare GSLB/Anycast per i confini regionali, tenere d'occhio NXDOMAIN/SERVFAIL e p99 resolve-time. Allora il tuo nome sarà un bene affidabile come il servizio stesso.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.