/etc/resolv.conf Kubernetes pods کے لیے، ndots:5 آپشن، یہ کس طرح ایپلی کیشن کی کارکردگی کو منفی طور پر متاثر کر سکتا ہے

/etc/resolv.conf Kubernetes pods کے لیے، ndots:5 آپشن، یہ کس طرح ایپلی کیشن کی کارکردگی کو منفی طور پر متاثر کر سکتا ہے

ہم نے حال ہی میں Kops کا استعمال کرتے ہوئے AWS پر Kubernetes 1.9 لانچ کیا۔ کل، ہمارے سب سے بڑے Kubernetes کلسٹرز تک آسانی سے نئی ٹریفک کو رول آؤٹ کرتے ہوئے، میں نے اپنی ایپلیکیشن کے ذریعے لاگ ان ہونے والی DNS نام کی ریزولوشن کی غیر معمولی غلطیوں کو دیکھنا شروع کیا۔

GitHub پر اس کے بارے میں بہت کچھ ہے۔ بولا، تو میں نے بھی اس کا پتہ لگانے کا فیصلہ کیا۔ آخر میں، میں نے محسوس کیا کہ ہمارے معاملے میں یہ بڑھتے ہوئے بوجھ کی وجہ سے ہوتا ہے۔ kube-dns и dnsmasq. میرے لیے سب سے دلچسپ اور نئی چیز ڈی این ایس کی درخواست ٹریفک میں نمایاں اضافے کی وجہ تھی۔ میری پوسٹ اس بارے میں ہے اور اس کے بارے میں کیا کرنا ہے۔

کنٹینر کے اندر ڈی این ایس ریزولوشن - جیسا کہ کسی بھی لینکس سسٹم میں ہے - کنفیگریشن فائل کے ذریعہ طے کیا جاتا ہے۔ /etc/resolv.conf. ڈیفالٹ کبرنیٹس dnsPolicy اس ClusterFirst، جس کا مطلب ہے کہ کسی بھی DNS درخواست کو آگے بھیج دیا جائے گا۔ dnsmasq، ایک پھلی میں چل رہا ہے kube-dns کلسٹر کے اندر، جو بدلے میں درخواست کو درخواست کو آگے بھیج دے گا۔ kube-dns، اگر نام کلسٹر لاحقہ کے ساتھ ختم ہوتا ہے، یا، بصورت دیگر، اعلی درجے کے DNS سرور پر۔

فائل /etc/resolv.conf ہر کنٹینر کے اندر پہلے سے طے شدہ اس طرح نظر آئے گا:

nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local 
eu-west-1.compute.internal
options ndots:5

جیسا کہ آپ دیکھ سکتے ہیں، تین ہدایات ہیں:

  1. نام کا سرور سروس کا IP ہے۔ kube-dns
  2. 4 مقامی سرچ ڈومینز بتائے گئے ہیں۔ search
  3. ایک آپشن ہے۔ ndots:5

اس ترتیب کا دلچسپ حصہ یہ ہے کہ مقامی سرچ ڈومینز اور سیٹنگز کیسے ndots:5 ایک ساتھ مل جاؤ. اسے سمجھنے کے لیے، آپ کو یہ سمجھنا ہوگا کہ نااہل ناموں کے لیے DNS ریزولوشن کیسے کام کرتا ہے۔

پورا نام کیا ہے؟

مکمل طور پر اہل نام ایک ایسا نام ہے جس کے لیے کوئی مقامی تلاش نہیں کی جائے گی اور نام کے حل کے دوران نام کو مطلق تصور کیا جائے گا۔ کنونشن کے مطابق، DNS سافٹ ویئر کسی نام کو مکمل طور پر اہل سمجھتا ہے اگر یہ ڈاٹ (.) کے ساتھ ختم ہوتا ہے، اور دوسری صورت میں مکمل طور پر اہل نہیں۔ یہ ہے کہ google.com. مکمل طور پر وضاحت اور google.com - نہیں.

نااہل نام کو کیسے سنبھالا جاتا ہے؟

جب کوئی ایپلیکیشن نام میں بتائے گئے ریموٹ ہوسٹ سے منسلک ہوتی ہے، DNS نام کی ریزولوشن عام طور پر سسٹم کال کا استعمال کرتے ہوئے کی جاتی ہے، جیسے getaddrinfo(). لیکن اگر نام نااہل ہے (. کے ساتھ ختم نہیں ہوتا ہے)، مجھے حیرت ہے کہ کیا سسٹم کال نام کو پہلے مطلق نام کے طور پر حل کرنے کی کوشش کرے گا، یا پہلے مقامی سرچ ڈومینز سے گزرے گا؟ یہ آپشن پر منحصر ہے۔ ndots.

دستی سے resolv.conf:

ndots:n

устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.

اس کا مطلب ہے کہ اگر کے لیے ndots 5 کی قدر دی گئی اور نام میں 5 سے کم نقطوں پر مشتمل ہے، سسٹم کال اسے ترتیب وار حل کرنے کی کوشش کرے گی، پہلے تمام مقامی سرچ ڈومینز کو عبور کرے گی، اور اگر ناکام ہو جائے تو بالآخر اسے ایک مطلق نام کے طور پر حل کرے گی۔

ایسا کیوں ndots:5 کیا یہ درخواست کی کارکردگی پر منفی اثر ڈال سکتا ہے؟

جیسا کہ آپ تصور کر سکتے ہیں، اگر آپ کی ایپلی کیشن بہت زیادہ بیرونی ٹریفک کا استعمال کرتی ہے، تو ہر TCP کنکشن قائم کرنے کے لیے (یا زیادہ درست طریقے سے، ہر نام کے حل کے لیے)، یہ نام کے درست طریقے سے حل ہونے سے پہلے 5 DNS سوالات جاری کرے گا، کیونکہ یہ سب سے پہلے گزرے گا۔ 4 مقامی سرچ ڈومین، اور آخر میں ایک مطلق نام کے حل کی درخواست جاری کرے گا۔

مندرجہ ذیل چارٹ ہمارے 3 kube-dns ماڈیولز پر کل ٹریفک کو ظاہر کرتا ہے اس سے پہلے اور بعد میں ہم نے اپنی درخواست میں کنفیگر کیے گئے کچھ میزبان ناموں کو مکمل طور پر اہل افراد میں تبدیل کیا۔

/etc/resolv.conf Kubernetes pods کے لیے، ndots:5 آپشن، یہ کس طرح ایپلی کیشن کی کارکردگی کو منفی طور پر متاثر کر سکتا ہے

درج ذیل خاکہ ایپلی کیشن میں تاخیر کو ظاہر کرتا ہے اس سے پہلے اور بعد میں ہم نے اپنی ایپلیکیشن میں ترتیب کردہ کئی میزبان ناموں کو مکمل ناموں میں تبدیل کیا (عمودی نیلی لائن تعیناتی ہے):

/etc/resolv.conf Kubernetes pods کے لیے، ndots:5 آپشن، یہ کس طرح ایپلی کیشن کی کارکردگی کو منفی طور پر متاثر کر سکتا ہے

حل نمبر 1 - مکمل طور پر اہل نام استعمال کریں۔

اگر آپ کے پاس کچھ جامد بیرونی نام ہیں (یعنی ایپلیکیشن کنفیگریشن میں بیان کردہ) جن سے آپ بڑی تعداد میں کنکشن بناتے ہیں، تو شاید سب سے آسان حل یہ ہے کہ انہیں صرف جوڑ کر مکمل طور پر اہل ناموں میں تبدیل کر دیا جائے۔ آخر میں.

یہ کوئی حتمی حل نہیں ہے، لیکن یہ فوری طور پر، اگرچہ صاف طور پر نہیں، صورت حال کو بہتر بنانے میں مدد کرتا ہے۔ ہم نے اپنے مسئلے کو حل کرنے کے لیے اس پیچ کو لاگو کیا، جس کے نتائج اوپر اسکرین شاٹس میں دکھائے گئے ہیں۔

حل #2 - حسب ضرورت ndots в dnsConfig

Kubernetes 1.9 میں، فعالیت الفا موڈ (بیٹا ورژن v1.10) میں ظاہر ہوئی، جو آپ کو پوڈ پراپرٹی کے ذریعے DNS پیرامیٹرز کو بہتر طریقے سے کنٹرول کرنے کی اجازت دیتی ہے۔ dnsConfig. دوسری چیزوں کے علاوہ، یہ آپ کو قدر کو ترتیب دینے کی اجازت دیتا ہے۔ ndots ایک مخصوص پوڈ کے لیے، یعنی

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsConfig:
    options:
      - name: ndots
        value: "1"

ذرائع

ہمارے بلاگ پر دیگر مضامین بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں