/etc/resolv.conf Kubernetes pods لاءِ، ndots:5 آپشن، اهو ڪيئن اثر انداز ڪري سگھي ٿو ايپليڪيشن جي ڪارڪردگيءَ تي

/etc/resolv.conf Kubernetes pods لاءِ، ndots:5 آپشن، اهو ڪيئن اثر انداز ڪري سگھي ٿو ايپليڪيشن جي ڪارڪردگيءَ تي

اسان تازو لانچ ڪيو Kubernetes 1.9 AWS تي Kops استعمال ڪندي. ڪالهه، اسان جي ڪبرنيٽس ڪلسٽرز جي سڀ کان وڏي ۾ نئين ٽريفڪ کي آسانيءَ سان گڏ ڪرڻ دوران، مون اسان جي ايپليڪيشن ذريعي لاگ ٿيل غير معمولي DNS نالي ريزوليوشن غلطيون ڏسڻ شروع ڪيون.

GitHub تي هن بابت گهڻو ڪجهه آهي ڳالهايو، تنهن ڪري مون ان کي پڻ سمجهڻ جو فيصلو ڪيو. آخر ۾، مون محسوس ڪيو ته اسان جي صورت ۾ اهو وڌندڙ لوڊ جي سبب آهي kube-dns и dnsmasq. مون لاءِ سڀ کان وڌيڪ دلچسپ ۽ نئين شيءِ ڊي اين ايس جي درخواست جي ٽرئفڪ ۾ اهم واڌ جو تمام گهڻو سبب هو. منهنجي پوسٽ هن بابت آهي ۽ ان بابت ڇا ڪجي.

ڪنٽينر اندر DNS ريزوليوشن - جيئن ڪنهن به لينڪس سسٽم ۾ - ترتيب ڏنل فائل طرفان طئي ٿيل آهي /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

تبصرو شامل ڪريو