በቅርቡ Kubernetes 1.9 በ AWS ላይ በኮፕስ እገዛ ጀመርን። ትላንት፣ ወደ ትልቁ የኩበርኔትስ ክላስተር አዲስ ትራፊክ በተቀላጠፈ ሁኔታ እየዘረጋሁ ሳለ፣ በእኛ መተግበሪያ የተመዘገቡ ያልተለመዱ የዲ ኤን ኤስ ስም መፍታት ስህተቶችን ማየት ጀመርኩ።
GitHub ስለ እሱ ትንሽ አለው። kube-dns
и dnsmasq
. ለእኔ በጣም አስደሳች እና አዲስ የሆነው ለዲ ኤን ኤስ መጠይቅ ትራፊክ ጉልህ ጭማሪ ምክንያት ነው። ስለዚህ እና ምን ማድረግ እንዳለብኝ, የእኔ ልጥፍ.
በመያዣው ውስጥ የዲ ኤን ኤስ ጥራት - እንደ ማንኛውም የሊኑክስ ስርዓት - በማዋቀሪያው ፋይል ይወሰናል /etc/resolv.conf
. ነባሪ Kubernetes dnsPolicy
ይህም ClusterFirst
, ይህም ማለት ማንኛውም የዲ ኤን ኤስ ጥያቄ ወደ እሱ ይመለሳል ማለት ነው dnsmasq
በፖዳ ውስጥ መሮጥ kube-dns
በክላስተር ውስጥ, ይህም በተራው ጥያቄውን ወደ ማመልከቻው ያስተላልፋል kube-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
እንደምታየው፣ ሶስት መመሪያዎች አሉ፡-
- አገልጋዩ የአገልግሎቱ አይፒ ነው።
kube-dns
- 4 የአካባቢ ፍለጋ ጎራዎች ተገልጸዋል።
search
- አንድ አማራጭ አለ
ndots:5
የዚህ ውቅረት አስደሳች ክፍል የአካባቢያዊ የፍለጋ ጎራዎች እና ቅንብሮች እንዴት ነው ndots:5
አብሮ መኖር። ይህንን ለመረዳት የዲ ኤን ኤስ ጥራት ላልሆኑ ስሞች እንዴት እንደሚሰራ መረዳት ያስፈልግዎታል።
ሙሉ ስም ማነው?
ሙሉ ብቃት ያለው ስም በአገር ውስጥ የማይፈለግ እና በስም መፍታት ጊዜ እንደ ፍጹም ስም የሚቆጠር ስም ነው። በስምምነት፣ የዲ ኤን ኤስ ሶፍትዌር ስምን በነጥብ (.) የሚያልቅ ከሆነ ሙሉ በሙሉ ብቁ እንደሆነ ይቆጥረዋል፣ እና በሌላ መልኩ ሙሉ በሙሉ ብቁ ካልሆነ። ያውና google.com.
ሙሉ በሙሉ የተገለጸ እና google.com
- አይ.
ብቁ ያልሆነ ስም እንዴት ይያዛል?
አንድ መተግበሪያ በስሙ ውስጥ ከተጠቀሰው የርቀት አስተናጋጅ ጋር ሲገናኝ የዲ ኤን ኤስ ስም መፍታት ብዙውን ጊዜ የስርዓት ጥሪን በመጠቀም ይከናወናል ፣ ለምሳሌ ፣ getaddrinfo()
. ነገር ግን ስሙ ያልተሟላ ከሆነ (በ. የማያልቅ) ከሆነ፣ የስርዓት ጥሪው መጀመሪያ ስሙን እንደ ፍፁም ለመፍታት ይሞክር ይሆን ወይስ መጀመሪያ በአካባቢው የፍለጋ ጎራዎች ውስጥ ያልፋል? እንደ ምርጫው ይወሰናል ndots
.
ከመመሪያው ለ resolv.conf
:
ndots:n
устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.
ይህ ማለት ለ ከሆነ ndots
ወደ 5 ተቀናብሯል እና ስሙ ከ 5 ያነሱ ነጥቦችን ይዟል፣ የስርዓት ጥሪው በቅደም ተከተል ለመፍታት ይሞክራል፣ በመጀመሪያ በሁሉም የአካባቢ ፍለጋ ጎራዎች ውስጥ ያልፋል እና አልተሳካም ፣ በመጨረሻም እንደ ፍጹም ስም ይፈታዋል።
ለምን ታዲያ ndots:5
የመተግበሪያውን አፈፃፀም ላይ አሉታዊ ተጽዕኖ ሊያሳድር ይችላል?
እርስዎ ሊገምቱት እንደሚችሉት፣ ማመልከቻዎ ብዙ የውጭ ትራፊክን የሚጠቀም ከሆነ፣ ለእያንዳንዱ የተቋቋመ የTCP ግንኙነት (ወይም በትክክል፣ ለእያንዳንዱ የተፈታ ስም)፣ ስሙ በትክክል ከመፈታቱ በፊት 5 የዲ ኤን ኤስ ጥያቄዎችን ያወጣል፣ ምክንያቱም መጀመሪያ ያልፋል። 4 የአካባቢ ፍለጋ ጎራ፣ እና መጨረሻ ላይ ፍፁም የስም መፍቻ ጥያቄ ያቀርባል።
የሚከተለው ገበታ በእኛ መተግበሪያ ውስጥ የተዋቀሩ በርካታ የአስተናጋጅ ስሞችን ወደ ሙሉ ብቃት ወደ ሚያሟሉ በ 3 kube-dns ፖድፖች ላይ ያለውን አጠቃላይ ትራፊክ ያሳያል።
በመተግበሪያችን ውስጥ የተዋቀሩ በርካታ የአስተናጋጅ ስሞችን ወደ ሙሉ ስሞች ከመቀየር በፊት እና በኋላ የመተግበሪያውን መዘግየት ያሳያል (ቀጥ ያለ ሰማያዊ መስመር ተዘርግቷል)።
መፍትሄ ቁጥር 1 - ሙሉ ብቃት ያላቸውን ስሞች ተጠቀም
ብዙ ቁጥር ያላቸው ግንኙነቶችን የሚፈጥሩባቸው ጥቂት የማይንቀሳቀሱ ውጫዊ ስሞች ካሉዎት (ማለትም በመተግበሪያው ውቅረት ውስጥ የተገለጹ)፣ ምናልባት ቀላሉ መፍትሄ በቀላሉ በመጨመር ወደ ሙሉ ብቃት ወደሆኑ መቀየር ነው። መጨረሻ ላይ.
ይህ የመጨረሻው መፍትሄ አይደለም, ነገር ግን በፍጥነት, በንጽህና ካልሆነ, ሁኔታውን ለማሻሻል ይረዳል. ችግራችንን ለመፍታት ይህንን ፕላስተር ተተግብረናል፣ ውጤታቸውም ከላይ ባሉት የቅጽበታዊ ገጽ እይታዎች ላይ ታይቷል።
ውሳኔ ቁጥር 2 - ማበጀት ndots
в dnsConfig
Kubernetes 1.9 በአልፋ ሁነታ (የቅድመ-ይሁንታ ስሪት v1.10) በፖድ ንብረቱ በኩል የዲ ኤን ኤስ ቅንብሮችን በተሻለ ሁኔታ ለመቆጣጠር የሚያስችል ባህሪ አስተዋውቋል dnsConfig
. ከሌሎች ነገሮች በተጨማሪ እሴቱን ለማበጀት ያስችልዎታል ndots
ለአንድ የተወሰነ ፖድ, ማለትም.
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsConfig:
options:
- name: ndots
value: "1"
ምንጮች
በብሎጋችን ላይ ሌሎች ጽሑፎችን ያንብቡ፡-
በጎላንግ ውስጥ ያለውን የአውድ ጥቅል መረዳት Docker ምስሎችን ለመቀነስ ሶስት ቀላል ዘዴዎች በ Kubernetes ውስጥ ያሉ ትክክለኛ መጠባበቂያዎች ብዙ ቁጥር ያላቸው የተለያዩ የድር ፕሮጀክቶች ምትኬ የቴሌግራም ቦት ለሬድሚን። ለራስህ እና ለሌሎች ህይወት እንዴት ቀላል ማድረግ እንደምትችል
ምንጭ: hab.com