/etc/resolv.conf Kubernetes పాడ్స్ కోసం, ndots:5 ఎంపిక, ఇది అప్లికేషన్ పనితీరును ఎలా ప్రతికూలంగా ప్రభావితం చేస్తుంది

/etc/resolv.conf Kubernetes పాడ్స్ కోసం, ndots:5 ఎంపిక, ఇది అప్లికేషన్ పనితీరును ఎలా ప్రతికూలంగా ప్రభావితం చేస్తుంది

మేము ఇటీవలే Kopsని ఉపయోగించి AWSలో Kubernetes 1.9ని ప్రారంభించాము. నిన్న, మా కుబెర్నెట్స్ క్లస్టర్‌లలోని అతిపెద్ద క్లస్టర్‌లకు కొత్త ట్రాఫిక్‌ను సజావుగా అందజేస్తున్నప్పుడు, మా అప్లికేషన్ ద్వారా లాగ్ చేయబడిన అసాధారణమైన DNS పేరు రిజల్యూషన్ ఎర్రర్‌లను నేను గమనించడం ప్రారంభించాను.

GitHubలో దీని గురించి చాలా ఉన్నాయి అన్నారు, కాబట్టి నేను కూడా దాన్ని గుర్తించాలని నిర్ణయించుకున్నాను. చివరికి, మా విషయంలో ఇది పెరిగిన లోడ్ వల్ల సంభవిస్తుందని నేను గ్రహించాను kube-dns и dnsmasq. నాకు అత్యంత ఆసక్తికరమైన మరియు కొత్త విషయం ఏమిటంటే DNS అభ్యర్థన ట్రాఫిక్ గణనీయంగా పెరగడానికి కారణం. నా పోస్ట్ దీని గురించి మరియు దాని గురించి ఏమి చేయాలి.

కంటైనర్ లోపల DNS రిజల్యూషన్ - ఏదైనా Linux సిస్టమ్‌లో వలె - కాన్ఫిగరేషన్ ఫైల్ ద్వారా నిర్ణయించబడుతుంది /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 పాడ్స్ కోసం, ndots:5 ఎంపిక, ఇది అప్లికేషన్ పనితీరును ఎలా ప్రతికూలంగా ప్రభావితం చేస్తుంది

కింది రేఖాచిత్రం మేము మా అప్లికేషన్‌లో కాన్ఫిగర్ చేసిన అనేక హోస్ట్ పేర్లను పూర్తి పేర్లకు మార్చడానికి ముందు మరియు తర్వాత అప్లికేషన్ జాప్యాన్ని చూపుతుంది (నిలువు నీలం రేఖ విస్తరణ):

/etc/resolv.conf Kubernetes పాడ్స్ కోసం, ndots:5 ఎంపిక, ఇది అప్లికేషన్ పనితీరును ఎలా ప్రతికూలంగా ప్రభావితం చేస్తుంది

పరిష్కారం #1 - పూర్తి అర్హత కలిగిన పేర్లను ఉపయోగించండి

మీరు పెద్ద సంఖ్యలో కనెక్షన్‌లను సృష్టించే కొన్ని స్టాటిక్ బాహ్య పేర్లు (అనగా అప్లికేషన్ కాన్ఫిగరేషన్‌లో నిర్వచించబడినవి) ఉంటే, వాటిని జోడించడం ద్వారా వాటిని పూర్తి అర్హత కలిగిన వాటికి మార్చడం చాలా సులభమైన పరిష్కారం. చివరలో.

ఇది తుది పరిష్కారం కాదు, కానీ ఇది త్వరగా, శుభ్రంగా కానప్పటికీ, పరిస్థితిని మెరుగుపరచడానికి సహాయపడుతుంది. మా సమస్యను పరిష్కరించడానికి మేము ఈ ప్యాచ్‌ని వర్తింపజేసాము, దీని ఫలితాలు ఎగువ స్క్రీన్‌షాట్‌లలో చూపబడ్డాయి.

పరిష్కారం #2 - అనుకూలీకరణ ndots в dnsConfig

కుబెర్నెటెస్ 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

ఒక వ్యాఖ్యను జోడించండి