کشف سرویس и DNS
سرویس کشف и DNS
1) چرا شما به آن نیاز دارید
در سیستم های توزیع شده، گره ها ظاهر می شوند و ناپدید می شوند و مشتریان باید نمونه های کار سرویس را به سرعت و قابل اعتماد پیدا کنند. DNS - لایه نام جهانی ؛ کشف سرویس - یک استراتژی برای تطبیق نام سرویس با نقاط پایانی واقعی، با توجه به سیاست سلامت، وزن و مسیریابی.
اهداف کلیدی:- نام های پایدار به جای آدرس های کوتاه مدت،
- به روز رسانی دقیق، اما نه پر سر و صدا (تعادل بین طراوت و TTL)،
- تخریب بدون سقوط کامل (شکست/بررسی سلامت)،
- حداقل «حدس زدن» در مشتری: زمان بندی، بازپرداخت، سیاست های کش.
2) مدل های کشف خدمات
2. 1 سمت مشتری
مشتری خود نام را به مجموعه ای از نقاط پایانی و تعادل (round-robin، EWMA، hash by key) حل می کند. منبع - DNS (A/AAAA/SRV)، رجیستری سرویس (Consul/Eureka)، لیست استاتیک.
مزایا: SPOF های مرکزی کمتر، الگوریتم های انعطاف پذیر.
منفی: ناهمگونی مشتری، آن را سخت تر برای به روز رسانی منطق است.
2. 2 سرور (سمت سرور)
مشتری به جلو/LB (دروازه L4/L7/ورودی) می رود. تعادل و بررسی سلامت - در سمت پروکسی/متعادل کننده.
مزایا: یک مکان واحد از سیاست، قابلیت مشاهده.
منفی: نیاز به یک محیط بسیار در دسترس (N + 1، چند AZ).
2. 3 ترکیبی
DNS مجموعه ای از نقاط ورود (LB های منطقه ای) را می دهد، سپس تعادل را L7/mesh می کند.
3) DNS: مبانی، سوابق و TTL
3. 1 انواع پایه
A/AAAA - آدرس های IPv4/IPv6
CNAME - نام مستعار به نام دیگری (نه به apex).
SRV - '_ service. _ proto. نام → میزبان/پورت/وزن/اولویت (برای gRPC/LDAP/SIP، و غیره).
TXT/HTTP/HTTPS - ابرداده/اشاره گر (از جمله برای کشف HTTP).
NS/SOA - نمایندگی منطقه و ویژگی ها.
3. 2 TTL و کش
حافظه پنهان در دسترس است: حل سیستم عامل، حل خرد محلی، گره (NodeLocal DNS/CoreDNS)، ارائه دهنده، recursers متوسط و مشتری کتابخانه. تازگی واقعی = دقیقه (TTL، سیاست مشتری). کش منفی (NXDOMAIN) نیز بر روی 'SOA ذخیره می شود. حداقل "/" TTL ".
توصیه ها:- تولید - TTL 30-120 ثانیه برای سوابق پویا، 300-600 ثانیه برای پایدار.
- برای سوئیچ ها (feilover)، TTL کاهش یافته را از قبل آماده کنید، و نه «در هنگام آتش سوزی».
- حافظه نهان چسبنده کتابخانه ها (Java/Go/Node) را در نظر بگیرید - در صورت لزوم، TTL حل کننده را در زمان اجرا پیکربندی کنید.
4) سیاست های تعادل DNS و تحمل خطا
وزن RR - وزن در A/AAAA/SRV.
شکست - مجموعه های اولیه/ثانویه (بررسی سلامت در خارج).
Geo/Latency - پاسخ به نزدیکترین POP/منطقه.
Anycast - یک IP در POP های مختلف (BGP) ؛ مقاوم در برابر اختلالات منطقه ای
Split-horizon - پاسخ های مختلف در داخل VPC/on-prem و در اینترنت.
GSLB یک تعادل جهانی با بررسی و سیاست های بهداشتی (تاخیر، جغرافیایی، ظرفیت) است.
5) بررسی سلامت و طراوت
خود DNS «گنگ» است: سلامت backend ها را نمی داند. بنابراین:- یا یک بررسی کننده سلامت خارجی سوابق/وزن را مدیریت می کند (نمونه های GSLB، Route53/Traffic-policy، dns + خارجی).
- یا/مشتری مش باعث می شود فعال outlier-ejection و سعی کنید از بسیاری از نقاط پایانی.
6) Kubernetes: کشف خارج از جعبه
نام خدمات: svc فضای نام. اس وی سی خوشه بندی محلی ".
ClusterIP: IP مجازی پایدار + kube-proxy/ebpf.
سرویس بدون سر ('clusterIP: None'): سوابق A را به غلاف (یا زیر دامنه های آنها)، SRV برای پورت ها می دهد.
EndpointSlice: لیست مقیاس پذیر از نقاط پایانی (جایگزین Endpoints).
CoreDNS: حل کننده DNS خوشه ؛ پلاگین بازنویسی/قالب/جلو/کش; منطقه «kube-dns».
NodeLocal DNSCache: حافظه نهان محلی روی گره → تأخیر کمتر و رهگیری مشکلات حل کننده بالادست.
مثال: بدون سر + SRV
yaml apiVersion: v1 kind: Service metadata: { name: payments, namespace: prod }
spec:
clusterIP: None selector: { app: payments }
ports:
- name: grpc port: 50051 targetPort: 50051
مشتری می تواند "_ grpc. _ tcp را حل کند. پرداخت ها دانلود کنید. اس وی سی خوشه بندی محلی (SRV) و دریافت میزبان/پورت/وزن.
CoreDNS (قطعه 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 (ایده ها):
- DaemonSet با حل کننده محلی در 169. 254. 20. 10`; kubelet این نقطه را مشخص می کند.
- وضوح نام p99 را کاهش می دهد و در برابر فلپ DNS بالادست محافظت می کند.
7) کشف خدمات вне K8s
کنسول: عامل، بررسی سلامت، دایرکتوری سرویس، رابط DNS ('.consul')، KV برای تنظیمات.
Eureka/ZooKeeper/etcd: ثبت نام برای JVM/میراث ؛ اغلب در رابطه با یک sidecar/دروازه.
Envoy/Istio: EDS/xDS (Endpoint Discovery) و SDS (secrets) خدمات از طریق کنترل هواپیما اعلام می شود.
8) امنیت DNS
DNSSEC: حفاظت از یکپارچگی رکورد (امضای منطقه). انتقاد از حوزه های عمومی
DoT/DoH: کانال رمزگذاری بازگشتی (سیاست های داخلی، سازگاری).
ACL و تقسیم افق: منطقه خصوصی - فقط از VPC/VPN.
حفاظت در برابر مسمومیت کش: تصادفی سازی پورت/شناسه، TTL های کوتاه برای پویایی.
Policies on egress: اجازه می دهد DNS تنها در حل کننده های قابل اعتماد، ورود به سیستم.
9) رفتار مشتری و عقب نشینی
احترام به TTL: بی وقفه ذخیره نکنید، با قطعنامه های مکرر «بی قانون» نباشید (طوفان به بازگشتی).
Happy Eyeballs (IPv4/IPv6)، اتصالات موازی به چندین A/AAAAs دم را کاهش می دهد.
Retrays فقط برای درخواست idempoint ؛ jitter، محدود کردن بازپرداخت بودجه.
- جاوا: آدرس شبکه. کش. tt 'l،' آدرس شبکه. کش. منفی است. بهش بگو.
- برو: 'GODEBUG = netdns = go '/' cgo', 'Resolver. ترجیحاً «Go»، «DialTimeout».
- گره: DNS. setDefaultResultOrder ('ipv4first') ',' lookup 'с' all: true '.
10) تعویض GSLB/DNS: تمرین
TTL را از 300 → 60 24-48 ساعت قبل از تعویض برنامه ریزی شده کاهش دهید.
نگه داشتن یک مجموعه قناری از نقاط پایانی وزن کم برای اعتبار.
استفاده از وزن + بررسی سلامت به جای به روز رسانی توده دستی از سوابق A.
برای استاتیک/لبه - Anycast ؛ برای API - Geo/Latency + L7-feiler سریع.
11) قابلیت مشاهده و SLO برای نام
معیارها:- نرخ/تأخیر پرس و جوهای DNS، نسبت ضربه کش، خطاهای نوع (SERVFAIL/NXDOMAIN).
- درصد درخواستها با پاسخهای قدیمی (در صورت استفاده از stale-cache).
- موفقیت عملیات کاربر در تغییرات رکورد (SLI کسب و کار).
- p95/p99 زمان حل و فصل در برنامه های کاربردی.
- لایه بندی مسیر: client → local cache → nodal cache → cluster resolver → provider recursion.
- پیگیری NXDOMAIN (نام/اشتباهات تایپی) و SERVFAIL (مسائل مربوط به بازگشت/محدودیت منابع) سنبله.
12) نمونه های پیکربندی
CoreDNS: بازنویسی و خرد کردن منطقه
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
}
سیستم حل شده است
ini
[Resolve]
DNS=169. 254. 20. 10
FallbackDNS=1. 1. 1. 1 8. 8. 8. 8
Domains=~cluster. local ~internal
DNSSEC=yes
نماینده: DNS-refresh پویا
yaml dns_refresh_rate: 5s dns_failure_refresh_rate:
base_interval: 2s max_interval: 30s respect_dns_ttl: true
dns خارجی (پشتیبانی از منطقه عمومی)
yaml args:
- --source=service
- --source=ingress
- --domain-filter=example. com
- --policy=upsert-only
- --txt-owner-id=cluster-prod
13) چک لیست پیاده سازی (0-30 روز)
0-7 روز
دایرکتوری نام سرویس، انتخاب مدل (client-/server-side/hybrid).
TTL پایه، داشبورد معیارهای NodeLocal DNSCache، DNS را فعال کنید.
ممنوعیت «IP سخت» در پیکربندی/کد.
8-20 روز
خدمات بی سر + SRV برای gRPC ؛ EndpointSlice فعال شده است.
GSLB/وزن برای خارجی ؛ چک های بهداشتی و قناری.
زمانبندی/بازپرداخت مشتری و بودجه بازپرداخت پیکربندی شده است.
21-30 روز
مناطق تقسیم افق و خصوصی ؛ سیاست گذاری DoT/DoH
تست سوئیچینگ (توسط TTL) و feilover ؛ پس از تحلیل
Mesh/EDS، سیاست های خروجی بیرونی فعال می شوند.
14) ضد الگوهای
TTL = 0 در تولید → طوفان به بازگشت، تاخیر غیر قابل پیش بینی.
کد سخت IP/پورت، بدون CNAME/نام مستعار برای سطوح.
تغییر سوابق «دستی» بدون سلامت چک و قناری.
یک حل کننده جهانی بدون حافظه پنهان گره (تنگنا).
نادیده گرفتن کش منفی (NXDOMAIN spikes).
تلاش برای «التیام» خرابی پایگاه داده از طریق DNS به جای لایه data/feilover.
15) معیارهای بلوغ
100٪ از خدمات از نام استفاده می کنند ؛ صفر موارد سخت IP.
CoreDNS/NodeLocal در فروش، کش ضربه نسبت> 90٪ در گره.
GSLB با چک های بهداشتی، TTL مستند و سوئیچ های runbook.
SRV/EndpointSlice برای حالت/gRPC، زمان حل و فصل p99 در برنامه های کاربردی ≤ 20-30 ms.
هشدار برای SERVFAIL/NXDOMAIN و تخریب نسبت ضربه کش.
چک در CI: ممنوعیت ': آخرین' و سخت IP در نمودار/پیکربندی.
16) نتیجه گیری
کشف سرویس یک قرارداد نام پایدار و نظم و انضباط کش است. ساخت یک مدل ترکیبی: DNS ورود سریع و آسان، L7/mesh - سلامت و سیاست های هوشمند را می دهد. حفظ TTL هوشمند، حافظه پنهان میزبان، خدمات بدون سر و SRV در صورت نیاز، استفاده از GSLB/Anycast برای مرزهای منطقه ای، نگه داشتن چشم در NXDOMAIN/SERVFAIL و P99 حل و فصل زمان. سپس نام شما به عنوان یک دارایی قابل اعتماد به عنوان خدمات خود خواهد بود.