GH GambleHub

Usługa Discovery а DNS

Service Discovery а DNS

1) Dlaczego go potrzebujesz

W systemach rozproszonych węzły pojawiają się i znikają, a klienci muszą szybko i niezawodnie znaleźć działające instancje usługi. DNS - uniwersalna warstwa nazw; discovery - strategia dopasowania nazwy usługi do rzeczywistych punktów końcowych, biorąc pod uwagę zdrowie, wagę i politykę routingu.

Główne cele:
  • nazwy stabilne zamiast adresów efemerycznych,
  • dokładna, ale nie hałaśliwa aktualizacja (równowaga między świeżością a TTL),
  • degradacja bez całkowitego upadku (kontrola awaryjna),
  • minimum „guesswork” na klienta: timeouts, retrays, cache policy.

2) Modele wyszukiwania usług

2. 1 Strona klienta

Sam klient rozwiązuje nazwę do zestawu punktów końcowych i sald (round-robin, EWMA, hash by key). Źródło - DNS (A/AAAA/SRV), rejestr usług (Konsul/Eureka), lista statyczna.

Plusy: mniej centralnych SPOFs, elastyczne algorytmy.
Minusy: heterogeniczność klienta, trudniej jest zaktualizować logikę.

2. 2 Serwer (po stronie serwera)

Klient idzie do front/LB (L4/L7 gateway/ingress). Balansowanie i kontrola zdrowia - po stronie proxy/balancer.

Plusy: jedno miejsce polityki, obserwowalność.
Minusy: Potrzebujesz bardzo dostępnego obwodu (N + 1, multi-AZ).

2. 3 Hybryda

DNS daje zestaw punktów wejścia (regionalnych LB), a następnie L7/mesh bilansowania.

3) DNS: podstawy, zapisy i TTL

3. 1 Typy podstawowe

A/AAAA - adresy IPv4/IPv6.
CNAME - alias do innej nazwy (nie do wierzchołka).
SRV - '_ service. _ proto. nazwa "→ host/port/weight/priority (dla gRPC/LDAP/SIP itp.).
TXT/HTTP/HTTPS - metadane/wskaźniki (w tym dla detekcji HTTP).
NS/SOA - delegacja i atrybuty strefy.

3. 2 TTL i Cache

Pamięć podręczna dostępna jest od: rozdzielacza systemu operacyjnego, lokalnego rozdzielacza stubów, węzłów (NodeLocal DNS/ DNS), dostawcy, rekursorów pośrednich i klienta bibliotecznego. Rzeczywista świeżość = min (TTL, polityka klienta). Pamięć podręczna ujemna (NXDOMAIN) jest również buforowana przez 'SOA. MINIMUM „/” TTL'.

Zalecenia:
  • Prod - TTL 30-120s dla dynamicznych rekordów, 300-600 s dla stabilnych.
  • Dla przełączników (feilover), przygotować obniżony TTL z góry, a nie „podczas pożaru”.
  • Weź pod uwagę lepką pamięć podręczną bibliotek (Java/Go/Node) - w razie potrzeby skonfiguruj TTL rozdzielacza wewnątrz czasu trwania.

4) Polityka bilansowania DNS i tolerancji błędów

Ważony RR - wagi A/AAAA/SRV.
Awaria - zestawy podstawowe/wtórne (kontrola zdrowotna na zewnątrz).
Geo/Latency - odpowiedź na „najbliższy” POP/region.
Anycast - jeden IP w różnych POP (BGP); odporne na zakłócenia regionalne.
Split-horizon - różne odpowiedzi wewnątrz VPC/on-prem i w Internecie.
GSLB jest globalnym balancerem z kontrolą zdrowia i polityką (opóźnienia, geo, zdolność).

5) Kontrole zdrowotne i świeżość

Sam DNS jest „głupi”: nie zna zdrowia backendów. Dlatego:
  • Lub zewnętrzny kontroler zdrowia zarządza zapisami/wagami (GSLB, Route53/Traffic-policy, external-dns + próbki).
  • Lub klient/siatki sprawia aktywny wyrzut i ponowne próbowanie z wielu punktów końcowych.

6) Kubernetes: odkrycie z pudełka

Nazwy usług: 'svc. przestrzeń nazw. svc. klastra. lokalne ".
ClusterIP: stabilny wirtualny IP + kube-proxy/ebpf.
Usługa bezgłowa ('clusterIP: None'): nadaje rekordy A strąkom (lub ich subdomenom), SRV dla portów.
EndpointSlice: skalowalna lista punktów końcowych (zastępująca punkty końcowe).
• DNS: cluster DNS resolver; wtyczki przepisać/szablon/do przodu/do pamięci podręcznej; strefa „kube-dns”.
NodeLocal DNSCache: lokalny pamięć podręczna na węźle → mniej opóźnień i przechwytywania problemów z upstream resolver.

Przykład: Bezgłowa + SRV

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

Klient może rozwiązać '_ grpc. _ tcp. płatności. prod. svc. klastra. lokalne "(SRV) i uzyskać host/port/wagi.

WDNS (fragment 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 (pomysły):
  • DaemonSet z lokalnym rozdzielaczem w '169. 254. 20. 10`; kubelet określa ten punkt.
  • Zmniejsza rozdzielczość nazw p99 i chroni przed klapą DNS.

7) Service discovery вна K8s

Konsul: agent, kontrola zdrowia, katalog usług, interfejs DNS ('.consul'), KV dla konfiguracji.
Eureka/ZooKeeper/etcd: rejestry JVM/dziedzictwo; często w połączeniu z bocznym ekranem/bramą.
Wysłannik/Istio: EDS/xDS (Endpoint Discovery) i SDS (secrets); usługi deklarowane są za pośrednictwem samolotu kontrolnego.

8) Bezpieczeństwo DNS

DNSSEC: ochrona integralności zapisu (podpis strefy). Krytyczne dla domen publicznych.
DoT/DoH: kanał do szyfrowania rekursji (wewnętrzne zasady, kompatybilność).
ACL i split-horizon: strefa prywatna - tylko z VPC/VPN.
Ochrona przed zatruciem pamięci podręcznej: randomizacja portu/identyfikatora, krótkie TTL dla dynamiki.
Zasady dotyczące wyjścia: zezwalaj DNS tylko na zaufanych rozdzielców, dziennik.

9) Zachowanie klienta i odwrotu

Szacunek TTL: nie buforować bez końca, nie „bezprawnie” z częstymi rozdzielczościami (burza do rekursywnego).
Happy Eyeballs (IPv4/IPv6), równoległe połączenia z wieloma A/AAAA zmniejszają ogon.
Przekłada się tylko na idempotentne prośby; jitter, ograniczanie przekładów budżetowych.

Dostrajanie rozdzielacza runtime:
  • Java: 'network kaddress. pamięci podręcznej. ttl', "networkaddress. pamięci podręcznej. negatywne. ttl'.
  • Idź: 'GODEBUG = netdns = go '/' cgo', 'Resolver'. PreferGo ',' DialTimeout '.
  • Węzeł: 'dns. SetDefaultلOrder ('ipv4first') ',' searup ',' wszystko: true '.

10) Przełączanie GSLB/DNS: praktyka

Obniżyć TTL od 300 → 60 24-48 godzin przed planowanym przełącznikiem.
Trzymaj zestaw kanaryjski o niskiej masie punktów końcowych do walidacji.
Użyj ważonej + kontroli stanu zdrowia zamiast ręcznej aktualizacji masy zapisów A.
Dla statyków/krawędzi - Anycast; dla API - Geo/Latency + szybki L7-feiler.

11) Obserwowalność i SLO dla nazwy

Metryka:
  • Szybkość/opóźnienie zapytań DNS, współczynnik trafienia pamięci podręcznej, błędy według typu (SERVFAIL/NXDOMAIN).
  • Odsetek zapytań z ciągłymi odpowiedziami (jeśli za pomocą pamięci podręcznej).
  • Sukces operacji użytkownika w zakresie zmian rekordu (business SLI).
  • p95/p99 czas rozdzielczości w aplikacjach.
Diagnostyka:
  • Stratify ścieżka: client → local cache → cache węzłowe → cluster resolver → provider recursion.
  • Śledź kolce NXDOMAIN (Błędy nazwy/Typo) i SERVFAIL (Problemy z rekursją/limity zasobów).

12) Przykłady konfiguracji

DNS: strefa przepisu i stubu

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
}

rozdzielczość systemowa

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

Wysłannik: dynamiczny odświeżacz DNS

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

zewnętrzne-dns (wsparcie strefy publicznej)

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

13) Lista kontrolna realizacji (0-30 dni)

0-7 dni

Katalog nazw usług, wybór modelu (client-/server-side/hybrid).
Podstawowe TTL, włącz NodeLocal DNSCache, deski rozdzielcze DNS.
Zakaz „twardego IP” w konfiguracji/kodzie.

8-20 dni

Usługi bez głowy + SRV dla gRPC; EndpointSlice jest włączony.
GSLB/ważone dla zewnętrznych; kontrole zdrowotne i kanaryjskie.
Konfigurowane są czasy klienta/przekwalifikowanie i przekwalifikowanie budżetu.

21-30 dni

Podział na horyzonty i obszary prywatne; DoT/DoH według zasad.
Test przełączania (według TTL) i feilover; po analizie.
Oczka/EDS, włączone są polityki w zakresie wyrzutów zewnętrznych.

14) Anty-wzory

TTL = 0 w prod → burza do nawrotów, nieprzewidywalne opóźnienia.
Kod IP/port, brak CNAME/aliasów dla poziomów.
Zmiana zapisów „ręcznie” bez kontroli zdrowia i kanarków.
Jeden globalny rozdzielacz bez pamięci podręcznej węzła (wąskie gardło).
Ignorowanie pamięci podręcznej ujemnej (kolce NXDOMAIN).
Próby „uzdrowienia” awarii bazy danych za pośrednictwem DNS zamiast warstwy danych/feilover.

15) Wskaźniki zapadalności

100% usług używa nazw; zero ciężkich spraw IP.
DNS/NodeLocal w sprzedaży, cache hit-ratio> 90% na węzłach.
GSLB z kontrolami zdrowotnymi, udokumentowane przełączniki TTL i runbook.
SRV/EndpointSlice dla stacjonarnych/gRPC, p99 czas rozdzielczości w aplikacjach ≤ 20-30 ms.
Wpisy dotyczące degradacji SERVFAIL/NXDOMAIN i współczynnika trafienia w pamięci podręcznej.
Kontrole w CI: zakaz ': najnowsze' i hard-IP w wykresach/konfiguracjach.

16) Wniosek

Odkrycie usługi to stabilny kontrakt na nazwę i dyscyplina pamięci podręcznej. Zbuduj model hybrydowy: DNS zapewnia szybkie i łatwe logowanie, L7/mesh - zdrowie i inteligentne polityki. Utrzymuj inteligentny TTL, pamięć podręczną hosta, usługi bez głowy i SRV w razie potrzeby, użyj GSLB/Anycast dla granic regionalnych, pilnuj NXDOMAIN/SERVFAIL i p99 resolve-time. Wtedy twoje nazwisko będzie tak niezawodnym atutem jak sama usługa.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.