අපි මෑතකදී Kops භාවිතයෙන් AWS මත Kubernetes 1.9 දියත් කළෙමු. ඊයේ, අපගේ Kubernetes පොකුරුවලින් විශාලතම වෙත නව ගමනාගමනය සුමටව ගෙන යමින් සිටියදී, අපගේ යෙදුම මගින් ලොග් කර ඇති අසාමාන්ය DNS නාම විභේදන දෝෂයන් මම දැකීමට පටන් ගතිමි.
GitHub හි මේ ගැන බොහෝ දේ ඇත kube-dns
и dnsmasq
. මට වඩාත්ම සිත්ගන්නාසුළු හා අලුත් දෙය වූයේ DNS ඉල්ලීම් තදබදය සැලකිය යුතු ලෙස වැඩි වීමට හේතුවයි. මගේ සටහන මේ ගැන සහ ඒ සඳහා කළ යුතු දේ.
කන්ටේනරය තුළ DNS විභේදනය - ඕනෑම ලිනක්ස් පද්ධතියක මෙන් - වින්යාස ගොනුව මගින් තීරණය වේ /etc/resolv.conf
. පෙරනිමි Kubernetes 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
ඔබට පෙනෙන පරිදි, නියෝග තුනක් තිබේ:
- නම සේවාදායකය යනු සේවාවේ IP වේ
kube-dns
- දේශීය සෙවුම් වසම් 4ක් සඳහන් කර ඇත
search
- විකල්පයක් ඇත
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 සම්බන්ධතාවයක් සඳහාම (හෝ වඩාත් නිවැරදිව, විසඳන ලද සෑම නමක් සඳහාම) බාහිර මාර්ග තදබදයක් භාවිතා කරන්නේ නම්, එය නම නිවැරදිව නිරාකරණය කිරීමට පෙර DNS විමසුම් 5 ක් නිකුත් කරනු ඇත, මන්ද එය මුලින්ම සිදු වනු ඇත. 4 දේශීය සෙවුම් වසම, අවසානයේ දී නිරපේක්ෂ නාම විභේදන ඉල්ලීමක් නිකුත් කරනු ඇත.
පහත ප්රස්ථාරයෙන් අපගේ 3 kube-dns මොඩියුලවල සම්පූර්ණ ගමනාගමනය පෙන්වයි, අපි අපගේ යෙදුමේ වින්යාස කර ඇති සත්කාරක නාම කිහිපයක් සම්පූර්ණ සුදුසුකම් ලත් ඒවා වෙත මාරු කිරීමට පෙර සහ පසුව.
පහත රූප සටහන මඟින් අපගේ යෙදුමේ වින්යාස කර ඇති ධාරක නාම කිහිපයක් සම්පූර්ණ නම් වලට මාරු කිරීමට පෙර සහ පසුව යෙදුම් ප්රමාදය පෙන්වයි (සිරස් නිල් රේඛාව යනු යෙදවීමයි):
විසඳුම #1 - සම්පූර්ණ සුදුසුකම් ලත් නම් භාවිතා කරන්න
ඔබ සම්බන්ධතා විශාල සංඛ්යාවක් නිර්මාණය කරන ස්ථිතික බාහිර නම් කිහිපයක් (එනම් යෙදුම් වින්යාසය තුළ අර්ථ දක්වා ඇත) තිබේ නම්, සමහර විට සරලම විසඳුම වන්නේ ඒවා සරලව එකතු කිරීමෙන් සම්පූර්ණ සුදුසුකම් ලත් ඒවා වෙත මාරු කිරීමයි. අවසානයේ දී.
මෙය අවසාන විසඳුම නොවේ, නමුත් එය ඉක්මනින්, පිරිසිදු නොවූවත්, තත්වය වැඩිදියුණු කිරීමට උපකාරී වේ. අපගේ ගැටලුව විසඳීමට අපි මෙම පැච් එක යෙදුවෙමු, එහි ප්රතිඵල ඉහත තිරපිටපත්වල පෙන්වා ඇත.
විසඳුම #2 - අභිරුචිකරණය ndots
в dnsConfig
Kubernetes 1.9 හි, ක්රියාකාරීත්වය ඇල්ෆා මාදිලියේ (බීටා අනුවාදය v1.10) දර්ශනය විය, එමඟින් පොඩ් දේපල හරහා DNS පරාමිතීන් වඩා හොඳින් පාලනය කිරීමට ඔබට ඉඩ සලසයි. dnsConfig
. වෙනත් දේ අතර, එය ඔබට අගය වින්යාස කිරීමට ඉඩ සලසයි ndots
විශේෂිත පොඩ් එකක් සඳහා, i.e.
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: dns-example
spec:
containers:
- name: test
image: nginx
dnsConfig:
options:
- name: ndots
value: "1"
මුලාශ්ර
අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:
Golang හි සන්දර්භය පැකේජය තේරුම් ගැනීම Docker Images හැකිලීමට සරල උපක්රම තුනක් Kubernetes හි රාජ්යමය උපස්ථ විෂමජාතීය වෙබ් ව්යාපෘති විශාල සංඛ්යාවක උපස්ථය Redmine සඳහා Telegram bot. ඔබ සහ අන් අය සඳහා ජීවිතය සරල කරන්නේ කෙසේද?
මූලාශ්රය: www.habr.com