Linux contrack තවදුරටත් ඔබේ මිතුරෙකු නොවන විට

Linux contrack තවදුරටත් ඔබේ මිතුරෙකු නොවන විට

සම්බන්ධතා ලුහුබැඳීම (“conntrack”) යනු Linux කර්නල් ජාලකරණ තොගයේ මූලික අංගයකි. එය කර්නලයට සියලු තාර්කික ජාල සම්බන්ධතා හෝ ප්‍රවාහයන් පිළිබඳ වාර්තාවක් තබා ගැනීමට සහ එමඟින් එක් එක් ප්‍රවාහය සෑදෙන සියලුම පැකට් හඳුනා ගැනීමට ඉඩ සලසයි.

Conntrack යනු සමහර මූලික අවස්ථා වලදී භාවිතා කරන වැදගත් කර්නල අංගයකි:

  • NAT කොන්ට්‍රැක් වෙතින් ලැබෙන තොරතුරු මත රඳා පවතින බැවින් එයට එකම ප්‍රවාහයේ ඇති සියලුම පැකට් එක සමානව සැලකිය හැක. උදාහරණයක් ලෙස, Pod එකක් Kubernetes සේවාවකට ප්‍රවේශ වූ විට, kube-proxy load balancer පොකුර තුළ ඇති විශේෂිත පොඩ් එකකට ගමනාගමනය යොමු කිරීමට NAT භාවිතා කරයි. Conntrack වාර්තා කරන්නේ ලබා දී ඇති සම්බන්ධතාවයක් සඳහා, IP සේවාව වෙත සියලුම පැකට් එකම පොඩ් එකකට යැවිය යුතු බවත්, පසුපෙළ පොඩ් එකෙන් ආපසු ලබා දෙන පැකට් ඉල්ලීම පැමිණි පොඩ් එකට නැවත NAT කළ යුතු බවත්ය.
  • Calico වැනි රාජ්‍ය ෆයර්වෝල් සම්බන්ධතා පථයේ සිට සුදු ලැයිස්තුවේ “ප්‍රතිචාර” ගමනාගමනය දක්වා තොරතුරු මත රඳා පවතී. ප්‍රතිචාර ගමනාගමනයට පැහැදිලිව ඉඩ දීම සඳහා ප්‍රතිපත්තියක් ලිවීමෙන් තොරව "ඕනෑම දුරස්ථ IP ලිපිනයකට සම්බන්ධ වීමට මගේ පොඩ්ට අවසර දෙන්න" යැයි පවසන ජාල ප්‍රතිපත්තියක් ලිවීමට මෙය ඔබට ඉඩ සලසයි. (මෙය නොමැතිව, ඔබට ආරක්ෂිතව අඩු "ඕනෑම IP එකකින් මගේ පොඩ් එකට පැකට් වලට ඉඩ දෙන්න" රීතිය එක් කිරීමට සිදුවේ.)

මීට අමතරව, ප්‍රවාහයක පළමු පැකට්ටුව පමණක් බැවින් කොන්ට්‍රැක් සාමාන්‍යයෙන් පද්ධති ක්‍රියාකාරිත්වය (CPU පරිභෝජනය සහ පැකට් ප්‍රමාදය අඩු කිරීමෙන්) වැඩි දියුණු කරයි.
එය සමඟ කළ යුතු දේ තීරණය කිරීම සඳහා සම්පූර්ණ ජාල තොගය හරහා යා යුතුය. පෝස්ට් එක බලන්න"kube-proxy මාතයන් සංසන්දනය කිරීම"මෙය ක්‍රියාත්මක වන ආකාරය පිළිබඳ උදාහරණයක් බැලීමට.

කෙසේ වෙතත්, contrack එහි සීමාවන් ඇත ...

එසේනම් ඒ සියල්ල වැරදුනේ කොතැනද?

කොන්ට්‍රැක් වගුවේ වින්‍යාස කළ හැකි උපරිම ප්‍රමාණය ඇති අතර, එය පිරී ගියහොත්, සම්බන්ධතා සාමාන්‍යයෙන් ප්‍රතික්ෂේප වීමට හෝ වැටීමට පටන් ගනී. බොහෝ යෙදුම්වල ගමනාගමනය හැසිරවීමට වගුවේ ප්‍රමාණවත් නිදහස් ඉඩක් ඇති අතර මෙය කිසි විටෙකත් ගැටලුවක් නොවනු ඇත. කෙසේ වෙතත්, ඔබට සම්බන්ධක වගුව භාවිතා කිරීම සලකා බැලීමට අවශ්‍ය අවස්ථා කිහිපයක් තිබේ:

  • ඔබගේ සේවාදායකය සමගාමීව සක්‍රීය සම්බන්ධතා අතිශයින් විශාල සංඛ්‍යාවක් හසුරුවන්නේ නම් වඩාත් පැහැදිලි අවස්ථාවයි. උදාහරණයක් ලෙස, ඔබේ conntrack වගුව 128k ඇතුළත් කිරීම් සඳහා වින්‍යාස කර ඇතත්, ඔබට > 128k සමගාමී සම්බන්ධතා තිබේ නම්, ඔබ නිසැකවම ගැටලුවකට මුහුණ දෙනු ඇත!
  • තරමක් අඩු පැහැදිලි අවස්ථාවක්: ඔබගේ සේවාදායකය තත්පරයකට ඉතා විශාල සම්බන්ධතා සංඛ්‍යාවක් සකසන්නේ නම්. සම්බන්ධතා කෙටි කාලීන වුවද, ඒවා යම් කාලයක් සඳහා Linux විසින් නිරීක්ෂණය කරනු ලැබේ (පෙරනිමියෙන් තත්පර 120). උදාහරණයක් ලෙස, ඔබගේ conntrack වගුව 128k ප්‍රවේශයන් සඳහා වින්‍යාස කර ඇත්නම් සහ ඔබ තත්පරයකට සම්බන්ධතා 1100ක් හැසිරවීමට උත්සාහ කරන්නේ නම්, සම්බන්ධතා ඉතා කෙටි කාලීන වුවද (128k/120s = 1092 සම්බන්ධතා/ සම්බන්ධතා) ඒවා conntrack වගුවේ ප්‍රමාණය ඉක්මවා යනු ඇත. s).

මෙම වර්ගීකරණයට අයත් යෙදුම් වර්ග කිහිපයක් තිබේ. මීට අමතරව, ඔබට බොහෝ නරක ක්‍රියාකාරීන් සිටී නම්, ඔබේ සේවාදායකයේ සම්බන්ධතා වගුව අඩක් විවෘත සම්බන්ධතා වලින් පිරවීම සේවා ප්‍රතික්ෂේප කිරීමේ (DOS) ප්‍රහාරයක කොටසක් ලෙස භාවිතා කළ හැකිය. අවස්ථා දෙකේදීම, conntrack ඔබේ පද්ධතියේ සීමාකාරී බාධකයක් විය හැක. සමහර අවස්ථාවලදී, කොන්ට්‍රැක් වගු පරාමිතීන් සකස් කිරීම ඔබේ අවශ්‍යතා සපුරාලීමට ප්‍රමාණවත් විය හැකිය - ප්‍රමාණය වැඩි කිරීමෙන් හෝ කොන්ට්‍රැක් කල් ඉකුත්වීම් අඩු කිරීමෙන් (නමුත් ඔබ එය වැරදි කළහොත්, ඔබ බොහෝ කරදරවලට මුහුණ දෙනු ඇත). වෙනත් අවස්ථාවල දී ආක්‍රමණශීලී ගමනාගමනය සඳහා කොන්ට්‍රැක් මඟ හැරීමට අවශ්‍ය වනු ඇත.

සැබෑ උදාහරණයක්

අපි නිශ්චිත උදාහරණයක් දෙමු: අප සමඟ වැඩ කළ එක් විශාල SaaS සපයන්නෙකුට ධාරක (අථත්‍ය යන්ත්‍ර නොවේ) මත memcached සේවාදායකයන් ගණනාවක් තිබුණි, ඒ සෑම එකක්ම තත්පරයකට 50K+ කෙටි කාලීන සම්බන්ධතා සකසන ලදී.

ඔවුන් conntrack වින්‍යාසය, වගු ප්‍රමාණය වැඩි කිරීම සහ ලුහුබැඳීමේ කාලය අඩු කිරීම සමඟ අත්හදා බැලීම් කළහ, නමුත් වින්‍යාසය විශ්වාස කළ නොහැකි විය, RAM පරිභෝජනය සැලකිය යුතු ලෙස වැඩි විය, එය ගැටළුවක් විය (GBytes අනුපිළිවෙල අනුව!), සහ සම්බන්ධතා ඉතා කෙටි බැවින් conntrack සිදු නොවීය. එහි සුපුරුදු කාර්ය සාධන ප්‍රතිලාභ (පරිභෝජනය අඩු කරන ලද CPU හෝ පැකට් ප්‍රමාදය) නිර්මාණය කරන්න.

ඔවුන් විකල්පයක් ලෙස කැලිකෝ වෙත යොමු විය. Calico ජාල ප්‍රතිපත්ති මඟින් ඔබට ඇතැම් රථවාහන වර්ග සඳහා conntrack භාවිතා නොකිරීමට ඉඩ සලසයි (doNotTrack ප්‍රතිපත්ති විකල්පය භාවිතා කරමින්). මෙය ඔවුන්ට අවශ්‍ය කාර්ය සාධන මට්ටම සහ Calico විසින් සපයන ලද අමතර ආරක්ෂාවක් ලබා දුන්නේය.

කොන්ට්‍රැක් මඟහැර යාමට ඔබට යා යුතු දිග මොනවාද?

  • ලුහුබැඳ නොයන්න ජාල ප්‍රතිපත්ති සාමාන්‍යයෙන් සමමිතික විය යුතුය. SaaS සපයන්නා සම්බන්ධයෙන්: ඔවුන්ගේ යෙදුම් ආරක්ෂිත කලාපයක් තුළ ධාවනය වූ අතර, එම නිසා, ජාල ප්‍රතිපත්තිය භාවිතා කරමින්, ඔවුන්ට memcached වෙත ප්‍රවේශ වීමට අවසර දී ඇති වෙනත් විශේෂිත යෙදුම්වලින් ගමනාගමනය සුදු ලැයිස්තුගත කළ හැකිය.
  • ලුහුබැඳ නොයන ප්‍රතිපත්තිය සම්බන්ධතාවයේ දිශාව සැලකිල්ලට නොගනී. මේ අනුව, memcached සේවාදායකය හැක් කර ඇත්නම්, එය නිවැරදි මූලාශ්‍ර වරාය භාවිතා කරන තාක් කල්, ඔබට න්‍යායාත්මකව ඕනෑම memcached සේවාදායකයෙකුට සම්බන්ධ වීමට උත්සාහ කළ හැකිය. කෙසේ වෙතත්, ඔබ ඔබේ memcached සේවාලාභීන් සඳහා ජාල ප්‍රතිපත්තිය නිවැරදිව නිර්වචනය කර ඇත්නම්, මෙම සම්බන්ධතා උත්සාහයන් තවමත් සේවාලාභියා පැත්තෙන් ප්‍රතික්ෂේප කරනු ලැබේ.
  • ප්‍රවාහයක පළමු පැකට්ටුවට පමණක් අදාළ වන සාමාන්‍ය ප්‍රතිපත්තිවලට ප්‍රතිවිරුද්ධව සෑම පැකට්ටුවකටම ලුහුබැඳ නොයෑමේ ප්‍රතිපත්තිය යෙදේ. මෙම ප්‍රතිපත්තිය සෑම පැකට්ටුවකටම යෙදිය යුතු නිසා මෙය පැකට්ටුවකට CPU පරිභෝජනය වැඩි කළ හැක. නමුත් කෙටි කාලීන සම්බන්ධතා සඳහා, කොන්ට්‍රැක් සැකසීම සඳහා සම්පත් පරිභෝජනය අඩු කිරීම මගින් මෙම වියදම සමතුලිත වේ. උදාහරණයක් ලෙස, SaaS සපයන්නෙකු සම්බන්ධයෙන්, එක් එක් සම්බන්ධතාවය සඳහා පැකට් ගණන ඉතා කුඩා බැවින්, එක් එක් පැකට්ටුව සඳහා ප්‍රතිපත්ති යොදන විට අමතර CPU පරිභෝජනය යුක්ති සහගත විය.

අපි පරීක්ෂණ ආරම්භ කරමු

අපි තත්පරයකට ඉතා විශාල සම්බන්ධතා සංඛ්‍යාවක් ධාවනය කළ හැකි වන පරිදි දුරස්ථ නෝඩ් මත ධාවනය වන memcached සේවාදායකයක් සහ බහු memcached සේවාදායක පොඩ් සහිත තනි පොඩ් එකක පරීක්ෂණය ධාවනය කළෙමු. memcached server Pod සහිත සේවාදායකයට conntrack වගුවේ cores 8ක් සහ 512k ඇතුළත් කිරීම් තිබුණි (ධාරකය සඳහා සම්මත වින්‍යාස කළ වගු ප්‍රමාණය).
අපි අතර කාර්ය සාධන වෙනස මැනිය: ජාල ප්‍රතිපත්තියක් නැත; නිත්‍ය කැලිකෝ ප්‍රතිපත්තිය සමඟ; සහ Calico do-not-track ප්‍රතිපත්තිය.

පළමු පරීක්ෂණය සඳහා, අපි සම්බන්ධතා ගණන තත්පරයකට 4.000 ලෙස සකසා ඇති අතර, එවිට අපට CPU පරිභෝජනයේ වෙනස කෙරෙහි අවධානය යොමු කළ හැකිය. කිසිදු ප්‍රතිපත්තියක් සහ සාමාන්‍ය ප්‍රතිපත්තියක් අතර සැලකිය යුතු වෙනස්කම් නොතිබුණද, CPU පරිභෝජනය 20% කින් පමණ වැඩි කළ හඹා නොයන්න:

Linux contrack තවදුරටත් ඔබේ මිතුරෙකු නොවන විට

දෙවන පරීක්ෂණයේදී, අපි අපගේ සේවාදායකයන්ට උත්පාදනය කළ හැකි තරම් සම්බන්ධතා දියත් කළ අතර අපගේ memcached සේවාදායකයට හැසිරවිය හැකි තත්පරයකට උපරිම සම්බන්ධතා සංඛ්‍යාව මැනිය. අපේක්ෂා කළ පරිදි, “ප්‍රතිපත්තියක් නැත” සහ “සාමාන්‍ය ප්‍රතිපත්ති” යන අවස්ථා දෙකම තත්පරයකට සම්බන්ධතා 4,000කට වඩා වැඩි සම්බන්ධතා සීමාවට ළඟා විය (512k / 120s = 4,369 සම්බන්ධතා/s). ලුහුබැඳ නොයෑමේ ප්‍රතිපත්තියක් සමඟින්, අපගේ ගනුදෙනුකරුවන් කිසිදු ගැටලුවකින් තොරව තත්පරයකට සම්බන්ධතා 60,000ක් යැවීය. අපට තවත් සේවාදායකයින් එකතු කිරීමෙන් මෙම සංඛ්‍යාව වැඩි කළ හැකි බව අපට විශ්වාසයි, නමුත් මෙම ලිපියේ කාරණය නිදර්ශනය කිරීමට මෙම සංඛ්‍යා දැනටමත් ප්‍රමාණවත් බව අපට හැඟේ!

Linux contrack තවදුරටත් ඔබේ මිතුරෙකු නොවන විට

නිගමනය

Conntrack යනු වැදගත් කර්නල අංගයකි. ඔහු තම කාර්යය අකුරටම ඉටු කරයි. එය බොහෝ විට ප්රධාන පද්ධති සංරචක මගින් භාවිතා වේ. කෙසේ වෙතත්, සමහර විශේෂිත අවස්ථා වලදී, කොන්ට්‍රැක් නිසා ඇතිවන තදබදය එය සපයන සාමාන්‍ය ප්‍රතිලාභ ඉක්මවා යයි. මෙම අවස්ථාවෙහිදී, Calico ජාල ප්‍රතිපත්ති ජාල ආරක්ෂාව වැඩි කරන අතරේ conntrack භාවිතය තෝරා බේරා අබල කිරීමට භාවිතා කළ හැක. අනෙකුත් සියලුම ගමනාගමනය සඳහා, Contrack දිගටම ඔබේ මිතුරා වේ!

අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න