በኩበርኔትስ ክላስተር ውስጥ ቀዳዳዎችን እንዘጋለን. በDevOpsConf ሪፖርት ያድርጉ እና ግልባጭ ያድርጉ

ፓቬል ሴሊቫኖቭ, የሳውዝብሪጅ መፍትሄዎች አርክቴክት እና የስሉር መምህር, በ DevOpsConf 2019 ላይ አንድ አቀራረብ አቅርበዋል. ይህ ንግግር በ Kubernetes "Slurm Mega" ላይ ካለው የጥልቅ ኮርስ ርእሶች አንዱ አካል ነው.

Slurm Basic፡ የኩበርኔትስ መግቢያ በኖቬምበር 18-20 በሞስኮ ውስጥ ይካሄዳል.
Slurm Mega: በ Kubernetes መከለያ ስር መመልከት - ሞስኮ, ህዳር 22-24.
Slurm መስመር፡ ሁለቱም የኩበርኔትስ ኮርሶች ሁልጊዜ ይገኛል.

ከቅጣቱ በታች የሪፖርቱ ግልባጭ አለ።

ደህና ከሰአት, ባልደረቦች እና የሚራራላቸው. ዛሬ ስለ ደህንነት እናገራለሁ.

ዛሬ በአዳራሹ ውስጥ ብዙ የጥበቃ ሰራተኞች እንዳሉ አይቻለሁ። ከደህንነት አለም ለናንተ እንደተለመደው በትክክል ካልተጠቀምኩ አስቀድሜ ይቅርታ እጠይቃለሁ።

የሆነው ሆኖ ከስድስት ወር በፊት አንድ የህዝብ ኩበርኔትስ ክላስተር አገኘሁት። ህዝባዊ ማለት XNUMXኛ ቁጥር ያለው የስም ቦታ አለ ማለት ነው፤ በእነዚህ የስም ቦታዎች ውስጥ በስም ቦታ የተለዩ ተጠቃሚዎች አሉ። እነዚህ ሁሉ ተጠቃሚዎች የተለያዩ ኩባንያዎች ናቸው. ደህና፣ ይህ ክላስተር እንደ ሲዲኤን ጥቅም ላይ መዋል አለበት ተብሎ ይታሰብ ነበር። ይኸውም ክላስተር ይሰጡሃል፣ እዚያ ተጠቃሚ ይሰጡሃል፣ ወደ ስምህ ቦታ ሂድ፣ ግንባሮችህን አሰማርክ።

የቀድሞ ኩባንያዬ እንዲህ ያለውን አገልግሎት ለመሸጥ ሞክሮ ነበር. እና ይህ መፍትሄ ተስማሚ መሆኑን ወይም አለመሆኑን ለማየት ክላስተርን እንድነቅል ተጠየቅሁ።

ወደዚህ ዘለላ መጣሁ። የተገደበ መብቶች፣ የተገደበ የስም ቦታ ተሰጠኝ። እዚያ ያሉት ሰዎች ደህንነት ምን እንደሆነ ተረዱ። ስለ Role-based access control (RBAC) በኩበርኔትስ አንብበውታል - እና እኔ ከስምምነት ተለይቼ ፖድዎችን ማስጀመር አልቻልኩም ብለው ጠምዘዋል። ያለ ማሰማራት ፖድ በማስጀመር ለመፍታት የሞከርኩትን ችግር አላስታውስም ነገር ግን ፖድ ብቻ ማስጀመር ፈልጌ ነበር። ለመልካም እድል በክላስተር ውስጥ ምን አይነት መብቶች እንዳሉኝ፣ ምን ማድረግ እንደምችል፣ ምን ማድረግ እንደማልችል እና እዚያ ምን እንዳበላሹ ለማየት ወሰንኩ። በተመሳሳይ ጊዜ, በ RBAC ውስጥ በትክክል ምን እንዳዋቀሩ እነግርዎታለሁ.

በሁለት ደቂቃ ውስጥ አንድ አስተዳዳሪ ለክላስተር ደረሰኝ ፣ ሁሉንም የአጎራባች የስም ቦታዎችን ተመለከትኩኝ ፣ አገልግሎቱን ገዝተው ያሰማሩትን የኩባንያዎችን የማምረቻ ግንባር አየሁ ። ወደ አንድ ሰው ፊት ከመሄድ እና አንዳንድ የስድብ ቃላትን በዋናው ገጽ ላይ ከማስቀመጥ እራሴን ማቆም አልቻልኩም።

ይህንን እንዴት እንዳደረግኩ እና እራስዎን ከዚህ እንዴት እንደሚከላከሉ በምሳሌዎች እነግራችኋለሁ.

መጀመሪያ ግን ራሴን ላስተዋውቅ። ስሜ ፓቬል ሴሊቫኖቭ ነው. በሳውዝብሪጅ አርክቴክት ነኝ። እኔ Kubernetes፣ DevOps እና ሁሉንም አይነት ቆንጆ ነገሮች ተረድቻለሁ። እኔ እና የሳውዝብሪጅ ኢንጂነሮች ይህንን ሁሉ እየገነባን ነው፣ እና እያማከርኩ ነው።

ከዋና ዋና ተግባሮቻችን በተጨማሪ፣ Slurms የተባሉ ፕሮጀክቶችን በቅርቡ ጀምረናል። ሌሎች ሰዎች ከK8s ጋር እንዲሰሩ ለማስተማር ከኩበርኔትስ ጋር የመስራት አቅማችንን ትንሽ ወደ ብዙሀን ለማምጣት እየሞከርን ነው።

ዛሬ ስለ ምን እናገራለሁ? የሪፖርቱ ርዕስ ግልጽ ነው - ስለ ኩበርኔትስ ክላስተር ደህንነት. ግን ይህ ርዕስ በጣም ትልቅ እንደሆነ ወዲያውኑ መናገር እፈልጋለሁ - እና ስለዚህ በእርግጠኝነት የማላወራውን ነገር ወዲያውኑ ግልጽ ማድረግ እፈልጋለሁ. ቀደም ሲል በበይነመረቡ ላይ ከመቶ ጊዜ በላይ ጥቅም ላይ ስለዋሉት ስለ የተጠለፉ ቃላት አልናገርም። ሁሉም አይነት RBAC እና የምስክር ወረቀቶች።

እኔ እና ባልደረቦቼን ስለ ኩበርኔትስ ክላስተር ደህንነት ስላስቸገረኝ ነገር እናገራለሁ ። እነዚህን ችግሮች የኩበርኔትስ ስብስቦችን በሚሰጡ አቅራቢዎች እና ወደ እኛ በሚመጡ ደንበኞች መካከል እናያለን። እና ከሌሎች አማካሪ የአስተዳዳሪ ኩባንያዎች ወደ እኛ ከሚመጡ ደንበኞች እንኳን. ያም ማለት የአደጋው መጠን በጣም ትልቅ ነው.

ለዛሬ የምነግራቸዉ ሶስት ነጥቦች አሉ፡-

  1. የተጠቃሚ መብቶች እና የፖድ መብቶች። የተጠቃሚ መብቶች እና የፖድ መብቶች አንድ አይነት አይደሉም።
  2. ስለ ክላስተር መረጃ መሰብሰብ. በዚህ ክላስተር ውስጥ ልዩ መብቶች ሳይኖርዎት የሚፈልጉትን መረጃ ሁሉ ከክላስተር መሰብሰብ እንደሚችሉ አሳይሻለሁ።
  3. የዶኤስ ጥቃት በክላስተር ላይ። መረጃ መሰብሰብ ካልቻልን በማንኛውም ሁኔታ ክላስተር ማስቀመጥ እንችላለን። በክላስተር መቆጣጠሪያ አካላት ላይ ስለ DoS ጥቃቶች እናገራለሁ.

እኔ የምጠቅሰው ሌላው አጠቃላይ ነገር ይህንን ሁሉ የሞከርኩት ነው፣ በእርግጠኝነት ሁሉም ይሰራል ብዬ መናገር የምችለው።

Kubespray ን በመጠቀም የኩበርኔትስ ክላስተር መትከልን እንደ መሰረት እንወስዳለን. ማንም የማያውቅ ከሆነ፣ ይህ በእውነቱ ለአንሲብል የሚናዎች ስብስብ ነው። በስራችን ውስጥ ያለማቋረጥ እንጠቀማለን. ጥሩው ነገር በየትኛውም ቦታ ይንከባለሉ - በብረት ቁርጥራጮች ላይ ወይም በሆነ ቦታ ወደ ደመና ይንከባለሉ። አንድ የመጫኛ ዘዴ ለሁሉም ነገር በመርህ ደረጃ ይሠራል.

በዚህ ክላስተር ውስጥ Kubernetes v1.14.5 ይኖረኛል። እኛ የምንመለከተው የኩቤ ክላስተር በሙሉ በስም ቦታዎች የተከፋፈለ ነው፣ እያንዳንዱ የስም ቦታ የተለየ ቡድን ነው፣ እና የዚህ ቡድን አባላት ለእያንዳንዱ የስም ቦታ መዳረሻ አላቸው። ወደ ተለያዩ የስም ቦታዎች መሄድ አይችሉም፣ ለራሳቸው ብቻ። ነገር ግን ለመላው ስብስብ መብቶች ያለው የተወሰነ የአስተዳዳሪ መለያ አለ።

በኩበርኔትስ ክላስተር ውስጥ ቀዳዳዎችን እንዘጋለን. በDevOpsConf ሪፖርት ያድርጉ እና ግልባጭ ያድርጉ

በመጀመሪያ የምናደርገው ነገር የክላስተር መብቶችን ማግኘት እንደሆነ ቃል ገብቻለሁ። የኩበርኔትስ ክላስተርን የሚሰብር በልዩ ሁኔታ የተዘጋጀ ፖድ እንፈልጋለን። እኛ ማድረግ ያለብን በ Kubernetes ክላስተር ላይ መተግበር ብቻ ነው።

kubectl apply -f pod.yaml

ይህ ፖድ የኩበርኔትስ ክላስተር ጌቶች ወደ አንዱ ይደርሳል። እና ከዚህ በኋላ ክላስተር admin.conf የሚባል ፋይል በደስታ ይመልስልናል። በCube ውስጥ ይህ ፋይል ሁሉንም የአስተዳዳሪ የምስክር ወረቀቶች ያከማቻል እና በተመሳሳይ ጊዜ የክላስተር ኤፒአይን ያዋቅራል። እንደማስበው 98% የኩበርኔትስ ስብስቦችን የአስተዳዳሪ መዳረሻ ማግኘት በጣም ቀላል ነው።

እደግመዋለሁ፣ ይህ ፖድ በእርስዎ ክላስተር ውስጥ ባለው አንድ ገንቢ ነው የሱን ፕሮፖዛል ወደ አንድ ትንሽ የስም ቦታ የማሰማራት እድል ያለው፣ ሁሉም በRBAC የታጨቀ ነው። ምንም መብት አልነበረውም. ሆኖም ግን የምስክር ወረቀቱ ተመልሷል።

እና አሁን ስለ ልዩ የተዘጋጀ ፖድ. በማንኛውም ምስል ላይ እናሰራዋለን. እንደ ምሳሌ ዴቢያን:ጄሴን እንውሰድ።

እኛ ይህ ነገር አለን:

tolerations:
-   effect: NoSchedule 
    operator: Exists 
nodeSelector: 
    node-role.kubernetes.io/master: "" 

መቻቻል ምንድን ነው? በኩበርኔትስ ክላስተር ውስጥ ያሉ ማስተርስ ብዙውን ጊዜ ታይንት በሚባል ነገር ምልክት ይደረግባቸዋል። እና የዚህ "ኢንፌክሽን" ይዘት ፖድዶች ለዋና አንጓዎች ሊመደቡ እንደማይችሉ ይናገራል. ነገር ግን በማንኛውም ፖድ ውስጥ ለ "ኢንፌክሽኑ" ታጋሽ መሆኑን ለማመልከት ማንም አይጨነቅም. የመቻቻል ክፍል አንዳንድ መስቀለኛ መንገድ NoSchedule ካለው፣ የእኛ መስቀለኛ መንገድ እንደዚህ ላለ ኢንፌክሽን ታጋሽ ነው - እና ምንም ችግሮች የሉም።

በመቀጠል፣ የእኛ ስር መቻቻል ብቻ ሳይሆን በተለይም ጌታውን ማነጣጠር ይፈልጋል እንላለን። ጌቶች እኛ የሚያስፈልገንን በጣም ጣፋጭ ነገር ስላላቸው - ሁሉም የምስክር ወረቀቶች. ስለዚህ, nodeSelector እንላለን - እና በጌቶች ላይ መደበኛ መለያ አለን, ይህም በክላስተር ውስጥ ካሉት ሁሉም አንጓዎች በትክክል ጌቶች የሆኑትን ለመምረጥ ያስችልዎታል.

በእነዚህ ሁለት ክፍሎች በእርግጠኝነት ወደ ጌታው ይመጣል. እና እዚያ እንዲኖር ይፈቀድለታል.

ግን ወደ ጌታው መምጣት ብቻ አይበቃንም። ይህ ምንም አይሰጠንም. ስለዚህ ቀጥሎ እነዚህ ሁለት ነገሮች አሉን።

hostNetwork: true 
hostPID: true 

የምናስጀምረው ፖድችን በከርነል ስም ቦታ፣ በኔትወርክ ስም ቦታ እና በPID ስም ቦታ ውስጥ እንደሚኖር እንገልፃለን። ፖዱ በጌታው ላይ ከተጀመረ በኋላ የዚህን መስቀለኛ መንገድ ሁሉንም እውነተኛ የቀጥታ በይነገጾች ማየት፣ ሁሉንም ትራፊክ ማዳመጥ እና የሁሉም ሂደቶች PID ማየት ይችላል።

ከዚያ የትንሽ ነገሮች ጉዳይ ነው። etcd ይውሰዱ እና የሚፈልጉትን ያንብቡ።

በጣም የሚያስደስት ነገር ይህ የኩበርኔትስ ባህሪ ነው, እሱም በነባሪነት እዚያ ይገኛል.

volumeMounts:
- mountPath: /host 
  name: host 
volumes:
- hostPath: 
    path: / 
    type: Directory 
  name: host 

እና ዋናው ነገር እኛ የምንጀምረው በፖድ ውስጥ ነው፣ ያለዚህ ክላስተር ያለመብት፣ የአስተናጋጅ ፓዝ አይነት መጠን መፍጠር እንፈልጋለን ማለት እንችላለን። ይህ ማለት ከምንጀምርበት አስተናጋጅ መንገዱን መውሰድ እና እንደ ድምጽ መውሰድ ማለት ነው። እና ከዚያ ስሙን እንጠራዋለን: አስተናጋጅ. ይህንን አጠቃላይ የአስተናጋጅ መንገድ በፖድ ውስጥ እንጭነዋለን። በዚህ ምሳሌ, ወደ / አስተናጋጅ ማውጫ.

ደግሜ እደግመዋለሁ። ፖድ ወደ ጌታው እንዲመጣ፣ አስተናጋጁ ኔትወርክን እና አስተናጋጅ ፒአይድን እዚያ እንዲያገኝ ነግረነዋል - እና ሙሉውን የጌታውን ስር በዚህ ፖድ ውስጥ ጫን።

በዴቢያን ውስጥ ባሽ ሩጫ እንዳለን ተረድተዋል፣ እና ይህ ባሽ ከስር ስር ይሰራል። ማለትም፣ በኩበርኔትስ ክላስተር ውስጥ ምንም አይነት መብት ሳይኖረን ገና በመምህሩ ላይ ሥር ተቀብለናል።

ከዚያ አጠቃላይ ስራው ወደ ንዑስ ማውጫ / አስተናጋጅ / ወዘተ / kubernetes/pki መሄድ ነው, ካልተሳሳትኩ, ሁሉንም የክላስተር ዋና ሰርተፊኬቶች እዚያ ይውሰዱ እና, በዚህ መሰረት, የክላስተር አስተዳዳሪ ይሁኑ.

በዚህ መንገድ ከተመለከቱት በፖድ ውስጥ በጣም አደገኛ ከሆኑት መብቶች ውስጥ እነዚህ ናቸው - ተጠቃሚው ምንም አይነት መብት ቢኖረውም:
በኩበርኔትስ ክላስተር ውስጥ ቀዳዳዎችን እንዘጋለን. በDevOpsConf ሪፖርት ያድርጉ እና ግልባጭ ያድርጉ

በአንዳንድ የክላስተር የስም ቦታ ላይ ፖድ የማሄድ መብቶች ካሉኝ፣ ይህ ፖድ በነባሪነት እነዚህ መብቶች አሉት። ልዩ ልዩ ፓድዎችን ማሄድ እችላለሁ፣ እና እነዚህ በአጠቃላይ ሁሉም መብቶች ናቸው፣ በተግባር በመስቀለኛ መንገድ ላይ።

የእኔ ተወዳጅ የ Root ተጠቃሚ ነው። እና Kubernetes ይህ Run As Non-Root አማራጭ አለው። ይህ ከጠላፊ የሚከላከል አይነት ነው። "የሞልዳቪያ ቫይረስ" ምን እንደሆነ ታውቃለህ? በድንገት ጠላፊ ከሆናችሁ እና ወደ እኔ የኩበርኔትስ ክላስተር ከመጡ እኛ ድሆች አስተዳዳሪዎች እንዲህ ብለን እንጠይቃለን፡- “እባክዎ የእኔን ክላስተር የምትጠልፉበትን ፖድዎ ውስጥ ያመልክቱ፣ እንደ ስር-አልባ ሩጡ። ያለበለዚያ ፣ ሂደቱን ከሥሩ ስር በፖዳዎ ውስጥ ማስኬድዎ ይከሰታል ፣ እና እኔን ለመጥለፍ ለእርስዎ በጣም ቀላል ይሆንልዎታል። እባክህ እራስህን ከራስህ ጠብቅ"

የአስተናጋጅ ዱካ መጠን, በእኔ አስተያየት, ከኩበርኔትስ ክላስተር የተፈለገውን ውጤት ለማግኘት ፈጣኑ መንገድ ነው.

ግን ከዚህ ሁሉ ጋር ምን ይደረግ?

ከኩበርኔትስ ጋር ለሚገናኝ ማንኛውም መደበኛ አስተዳዳሪ ሊመጣ የሚገባው ሀሳብ፡- “አዎ፣ ነግሬሃለሁ፣ Kubernetes አይሰራም። በውስጡ ቀዳዳዎች አሉ. እና መላው ኩብ በሬ ወለደ ነው። እንደ እውነቱ ከሆነ, እንደ ዶክመንቶች ያለ ነገር አለ, እና እዚያ ከተመለከቱ, አንድ ክፍል አለ የፖድ ደህንነት ፖሊሲ.

ይህ የያማል ነገር ነው - በ Kubernetes ክላስተር ውስጥ ልንፈጥረው እንችላለን - በተለይም በፖዳዎች ገለፃ ውስጥ የደህንነት ገጽታዎችን ይቆጣጠራል። ያም ማለት በእውነቱ, ማንኛውንም የአስተናጋጅ አውታረ መረብ, አስተናጋጅ ፒአይዲ, በሚነሳበት ጊዜ በፖድ ውስጥ ያሉ የተወሰኑ የድምጽ ዓይነቶችን የመጠቀም መብቶችን ይቆጣጠራል. በፖድ ደህንነት ፖሊሲ እርዳታ ይህ ሁሉ ሊገለጽ ይችላል.

ስለ ፖድ ደህንነት ፖሊሲ በጣም የሚያስደንቀው ነገር በ Kubernetes ክላስተር ውስጥ ሁሉም የ PSP ጫኚዎች በምንም መልኩ አልተገለፁም ፣ በቀላሉ በነባሪነት ተሰናክለዋል። የፖድ ደህንነት ፖሊሲ የነቃው የመግቢያ ተሰኪን በመጠቀም ነው።

እሺ፣ የፖድ ደህንነት ፖሊሲን ወደ ክላስተር እናሰማራ፣ በስም ቦታ ላይ አንዳንድ የአገልግሎት ፓዶች አሉን እንበል፣ ይህም አስተዳዳሪዎች ብቻ ናቸው። እንበል፣ በሌሎች በሁሉም ጉዳዮች፣ ፖድዎች የተገደቡ መብቶች አሏቸው። ምክንያቱም በአብዛኛው ገንቢዎች በክላስተርዎ ውስጥ ልዩ ልዩ ፖድዎችን ማሄድ አያስፈልጋቸውም።

እና ሁሉም ነገር ከእኛ ጋር ጥሩ ይመስላል። እና የእኛ የኩበርኔትስ ክላስተር በሁለት ደቂቃ ውስጥ ሊጠለፍ አይችልም።

ችግር አለ. ምናልባት፣ የኩበርኔትስ ክላስተር ካለህ፣ ክትትል በክላስተርህ ላይ ተጭኗል። ክላስተርህ ክትትል ካለው ፕሮሜቴየስ ተብሎ እንደሚጠራ እስከ መተንበይ እደርሳለሁ።

የምነግራችሁ ለፕሮሜቲየስ ኦፕሬተር እና ለፕሮሜቲየስ በንጹህ መልክ ለሁለቱም የሚሰራ ይሆናል። ጥያቄው አስተዳዳሪን በፍጥነት ወደ ክላስተር ማስገባት ካልቻልኩ ይህ ማለት የበለጠ ማየት አለብኝ ማለት ነው። እና በክትትልዎ እገዛ መፈለግ እችላለሁ።

ምናልባት ሁሉም ሰው ስለ Habré ተመሳሳይ መጣጥፎችን ያነብ ይሆናል, እና ክትትልው በክትትል ስም ቦታ ውስጥ ይገኛል. የሄልም ቻርት ለሁሉም ሰው በግምት ተመሳሳይ ይባላል። እኔ እገምታለሁ helm install stable/prometheus ን ካደረጉ ፣በግምት ተመሳሳይ ስሞች ይኖራሉ። እና ምናልባት በእርስዎ ስብስብ ውስጥ ያለውን የዲ ኤን ኤስ ስም እንኳን መገመት የለብኝም። ምክንያቱም ስታንዳርድ ነው።

በኩበርኔትስ ክላስተር ውስጥ ቀዳዳዎችን እንዘጋለን. በDevOpsConf ሪፖርት ያድርጉ እና ግልባጭ ያድርጉ

በመቀጠል አንድ የተወሰነ ፖድ ማሄድ የሚችሉበት የተወሰነ dev ns አለን። እና ከዚያ ከዚህ ፖድ እንደዚህ ያለ ነገር ማድረግ በጣም ቀላል ነው-

$ curl http://prometheus-kube-state-metrics.monitoring 

ፕሮሜቴየስ-ኩቤ-ስቴት-ሜትሪክስ ከኩበርኔትስ ኤፒአይ ራሱ መለኪያዎችን ከሚሰበስቡ ፕሮሜቲየስ ላኪዎች አንዱ ነው። ብዙ ውሂብ እዚያ አለ፣ በክላስተርዎ ውስጥ ምን እየሄደ እንዳለ፣ ምን እንደሆነ፣ ምን ችግሮች እንዳሉብዎ።

እንደ ቀላል ምሳሌ፡-

kube_pod_container_info{namespace=“kube-system”,pod=”kube-apiserver-k8s- 1″,container=”kube-apiserver”,image=

"gcr.io/google-containers/kube-apiserver:v1.14.5"

,image_id=»docker-pullable://gcr.io/google-containers/kube- apiserver@sha256:e29561119a52adad9edc72bfe0e7fcab308501313b09bf99df4a96 38ee634989″,container_id=»docker://7cbe7b1fea33f811fdd8f7e0e079191110268f2 853397d7daf08e72c22d3cf8b»} 1

ልዩ ካልሆነ ፖድ ቀላል የክርን ጥያቄ በማቅረብ የሚከተለውን መረጃ ማግኘት ይችላሉ። የትኛውን የኩበርኔትስ ስሪት እየሮጡ እንደሆነ ካላወቁ በቀላሉ ይነግርዎታል።

እና በጣም የሚያስደስት ነገር የኩቤ-ስቴት-ሜትሪክስን ከመድረስ በተጨማሪ ፕሮሜቲየስን እራሱ በቀጥታ ማግኘት ይችላሉ. መለኪያዎችን ከዚያ መሰብሰብ ይችላሉ። እንዲያውም ከዚያ ሆነው መለኪያዎችን መገንባት ይችላሉ። በንድፈ ሀሳብ እንኳን, በፕሮሜቲየስ ውስጥ ካለው ክላስተር ውስጥ እንዲህ አይነት መጠይቅ መገንባት ይችላሉ, ይህም በቀላሉ ያጠፋል. እና የእርስዎ ክትትል ከጥቅሉ ላይ ሙሉ በሙሉ መስራት ያቆማል።

እና እዚህ ማንኛውም የውጭ ክትትል ክትትልዎን ይከታተል እንደሆነ ጥያቄው ይነሳል. በራሴ ላይ ምንም አይነት መዘዝ ሳይኖር በኩበርኔትስ ክላስተር ውስጥ ለመስራት እድሉን አገኘሁ። ምንም አይነት ክትትል ስለሌለ እዛ እየሰራሁ መሆኔን እንኳን አታውቅም።

ልክ እንደ ፒኤስፒ፣ ችግሩ እነዚህ ሁሉ የተዋቡ ቴክኖሎጂዎች - ኩበርኔትስ፣ ፕሮሜቴየስ - ልክ አይሰሩም እና በቀዳዳዎች የተሞሉ መሆናቸው ነው የሚመስለው። እውነታ አይደለም.

እንደዚህ ያለ ነገር አለ - የአውታረ መረብ ፖሊሲ.

መደበኛ አስተዳዳሪ ከሆንክ ስለ አውታረ መረብ ፖሊሲ ​​ምናልባት ይህ ሌላ yaml እንደሆነ ታውቃለህ፣ ከእነዚህም ውስጥ ብዙዎቹ በክላስተር ውስጥ አሉ። እና አንዳንድ የአውታረ መረብ ፖሊሲዎች በእርግጠኝነት አያስፈልጉም። እና ምንም እንኳን የአውታረ መረብ ፖሊሲ ​​ምን እንደሆነ ቢያነቡም ፣ እሱ የኩበርኔትስ የ yaml ፋየርዎል ነው ፣ በስም ቦታዎች መካከል ፣ በፖድ መካከል የመዳረሻ መብቶችን ለመገደብ ይፈቅድልዎታል ፣ ከዚያ በእርግጠኝነት በ Kubernetes ውስጥ በ yaml ቅርጸት ያለው ፋየርዎል በሚቀጥሉት ገለጻዎች ላይ የተመሠረተ መሆኑን ወስነዋል ። ... አይ ፣ አይሆንም። ይህ በእርግጠኝነት አስፈላጊ አይደለም.

ምንም እንኳን የእርስዎን Kubernetes በመጠቀም በጣም ቀላል እና ቀላል ፋየርዎልን መገንባት እንደሚችሉ ለደህንነት ስፔሻሊስቶችዎ ባይነግሩም እና በዚያ ላይ በጣም ትንሽ የሆነ። ይህንን እስካሁን ካላወቁ እና ካላስቸገሩዎት፡- “እሺ፣ ስጠኝ፣ ስጠኝ…” ከዚያ በማንኛውም ሁኔታ፣ ከእርስዎ ስብስብ ውስጥ ሊጎተቱ የሚችሉ የአገልግሎት ቦታዎችን ለማገድ የኔትወርክ ፖሊሲ ያስፈልግዎታል። ያለ ምንም ፍቃድ.

እኔ በሰጠሁት ምሳሌ ላይ እንደተገለጸው፣ ይህንን ለማድረግ ምንም አይነት መብት ሳይኖርዎት የኩቤ ግዛት መለኪያዎችን ከየትኛውም የስም ቦታ በኩቤኔትስ ክላስተር ማንሳት ይችላሉ። የአውታረ መረብ ፖሊሲዎች ከሁሉም የስም ቦታዎች ወደ የክትትል ስም ቦታ ዝግ መዳረሻ አላቸው እና ያ ነው፡ መዳረሻ የለም፣ ምንም ችግሮች የሉም። በሁሉም ገበታዎች ውስጥ ፣ ሁለቱም መደበኛ ፕሮሜቲየስ እና በኦፕሬተሩ ውስጥ ያለው ፕሮሜቴየስ ፣ በቀላሉ የአውታረ መረብ ፖሊሲዎችን ለእነሱ ለማንቃት በዋና እሴቶች ውስጥ አንድ አማራጭ አለ። እሱን ማብራት ብቻ ያስፈልግዎታል እና እነሱ ይሰራሉ።

እዚህ በእርግጥ አንድ ችግር አለ. መደበኛ ፂም ያለው አስተዳዳሪ እንደመሆኖ የአውታረ መረብ ፖሊሲዎች አያስፈልጉም ብለው ወስነዋል። እና እንደ ሃብር ባሉ ሀብቶች ላይ ሁሉንም አይነት መጣጥፎችን ካነበቡ በኋላ ፍላነል በተለይም በአስተናጋጅ-ጌትዌይ ሁነታ መምረጥ የሚችሉት ምርጥ ነገር እንደሆነ ወስነዋል።

ምን ማድረግ አለብኝ?

በእርስዎ የኩበርኔትስ ክላስተር ውስጥ ያለዎትን የአውታረ መረብ መፍትሄ እንደገና ለመዘርጋት መሞከር ይችላሉ፣ የበለጠ ተግባራዊ በሆነ ነገር ለመተካት ይሞክሩ። ለተመሳሳይ ካሊኮ, ለምሳሌ. ግን ወዲያውኑ መናገር እፈልጋለሁ የአውታረ መረብ መፍትሄ በ Kubernetes የስራ ክላስተር ውስጥ የመቀየር ተግባር በጣም ቀላል አይደለም። እኔ ሁለት ጊዜ ፈታሁት (ሁለቱም ጊዜ, ቢሆንም, በንድፈ), ነገር ግን እኛ Slurms ላይ እንዴት ማድረግ እንኳ አሳይተናል. ለተማሪዎቻችን የኔትወርክ መፍትሄን በ Kubernetes ክላስተር ውስጥ እንዴት መለወጥ እንደሚቻል አሳይተናል። በመርህ ደረጃ, በምርት ክላስተር ላይ ምንም የእረፍት ጊዜ አለመኖሩን ለማረጋገጥ መሞከር ይችላሉ. ግን ምናልባት ላይሳካልህ ይችላል።

እና ችግሩ በእርግጥ በጣም ቀላል ነው. በክላስተር ውስጥ የምስክር ወረቀቶች አሉ፣ እና የምስክር ወረቀቶችዎ በአንድ አመት ውስጥ እንደሚያልቁ ያውቃሉ። ደህና፣ ብዙ ጊዜ መደበኛ መፍትሄ በክላስተር ውስጥ ካሉ የምስክር ወረቀቶች ጋር - ለምን እንጨነቃለን፣ በአቅራቢያ አዲስ ክላስተር እናነሳለን፣ አሮጌው እንዲበሰብስ እና ሁሉንም ነገር እንደገና እንሰራለን። እውነት ነው, ሲበሰብስ, ለአንድ ቀን መቀመጥ አለብን, ግን እዚህ አዲስ ስብስብ አለ.

አዲስ ክላስተር ሲያነሱ በተመሳሳይ ጊዜ ከፍላነል ይልቅ ካሊኮን ያስገቡ።

የምስክር ወረቀቶችዎ ለአንድ መቶ ዓመታት ከተሰጡ እና ክላስተርን እንደገና ለማሰማራት ካልሄዱ ምን ማድረግ አለብዎት? እንደ Kube-RBAC-Proxy ያለ ነገር አለ። ይህ በጣም ጥሩ እድገት ነው, እራሱን እንደ የጎን መኪና መያዣ በኩበርኔትስ ክላስተር ውስጥ ወዳለው ማንኛውም ፖድ ለመክተት ያስችልዎታል. እና በእውነቱ በ RBAC of Kubernetes በኩል ለዚህ ፖድ ፍቃድ ይጨምራል።

አንድ ችግር አለ. ከዚህ ቀደም ይህ የኩቤ-RBAC-ተኪ መፍትሔ በኦፕሬተሩ ፕሮሜቲየስ ውስጥ ተገንብቷል። ከዚያ በኋላ ግን ጠፋ። አሁን ዘመናዊ ስሪቶች የአውታረ መረብ ፖሊሲ ​​እንዳለህ እና እነሱን ተጠቅመው መዝጋት በሚለው እውነታ ላይ ተመርኩዘው ነው። እና ስለዚህ ሰንጠረዡን ትንሽ እንደገና መፃፍ አለብን. በእውነቱ, ከሄዱ ይህ ማከማቻይህንን እንደ የጎን መኪና እንዴት እንደሚጠቀሙበት ምሳሌዎች አሉ እና ቻርቶቹ በትንሹ እንደገና መፃፍ አለባቸው።

አንድ ተጨማሪ ትንሽ ችግር አለ. መለኪያዎቹን ለማንም የሚያቀርበው ፕሮሜቴየስ ብቻ አይደለም። ሁሉም የእኛ የኩበርኔትስ ክላስተር አካላት የራሳቸውን መለኪያዎች መመለስ ይችላሉ።

ነገር ግን አስቀድሜ እንደተናገርኩት ክላስተር መድረስ እና መረጃ መሰብሰብ ካልቻላችሁ ቢያንስ ትንሽ ጉዳት ልታደርጉ ትችላላችሁ።

ስለዚህ የኩበርኔትስ ክላስተር እንዴት እንደሚበላሽ ሁለት መንገዶችን በፍጥነት አሳይሻለሁ.

ይህን ስነግርህ ትስቃለህ፣ እነዚህ ሁለት የእውነተኛ ህይወት ጉዳዮች ናቸው።

ዘዴ አንድ. የሀብት መሟጠጥ።

ሌላ ልዩ ፖድ እንጀምር። እንደዚህ አይነት ክፍል ይኖረዋል.

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

እንደሚታወቀው፣ጥያቄዎች በአስተናጋጁ ላይ ከጥያቄዎች ጋር ለተወሰኑ ፖድዎች የተያዘው የሲፒዩ እና የማህደረ ትውስታ መጠን ነው። በ Kubernetes ክላስተር ውስጥ ባለ አራት ኮር አስተናጋጅ ካለን እና አራት ሲፒዩ ፖዶች ከጥያቄዎች ጋር ወደዚያ ከደረሱን ፣ይህ ማለት ምንም ጥያቄ ያላቸው ፖዶች ወደዚህ አስተናጋጅ መምጣት አይችሉም ማለት ነው።

እንደዚህ አይነት ፖድ ካሄድኩ ትዕዛዙን እሰራለሁ፡-

$ kubectl scale special-pod --replicas=...

ከዚያ ሌላ ማንም ሰው ወደ ኩበርኔትስ ክላስተር ማሰማራት አይችልም። ምክንያቱም ሁሉም መስቀለኛ መንገድ ጥያቄዎች ያልቃሉ። እናም የአንተን የኩበርኔትስ ስብስብ አቆማለሁ። ይህንን በምሽት ካደረግኩ፣ ለረጅም ጊዜ ማሰማራቶቹን ማቆም እችላለሁ።

የኩበርኔትስ ሰነዶችን እንደገና ከተመለከትን, ገደብ ክልል የሚባለውን ይህን ነገር እናያለን. ለክላስተር እቃዎች መገልገያዎችን ያዘጋጃል. በ yaml ውስጥ የገደብ ክልል ነገር መፃፍ ፣ በተወሰኑ የስም ቦታዎች ላይ መተግበር ይችላሉ - ከዚያ በዚህ የስም ቦታ ላይ ለፖድዶች ነባሪ ፣ ከፍተኛ እና ዝቅተኛ ሀብቶች አሉዎት ማለት ይችላሉ።

በእንደዚህ አይነት ነገር እገዛ ተጠቃሚዎችን በቡድናቸው ላይ ሁሉንም አይነት አስቀያሚ ነገሮችን የማመልከት ችሎታን በተወሰነ የምርት ስም ቦታዎች ላይ መገደብ እንችላለን. ግን በሚያሳዝን ሁኔታ ለተጠቃሚው ከአንድ በላይ የሲፒዩ ጥያቄዎችን ማስጀመር እንደማይችሉ ቢነግሩዎትም ፣ እንደዚህ ያለ አስደናቂ የልኬት ትእዛዝ አለ ፣ ወይም በዳሽቦርዱ በኩል ሚዛን መስራት ይችላሉ።

እና ይህ ዘዴ ቁጥር ሁለት የመጣው እዚህ ነው. 11 ፖድዎችን እናስጀምራለን. አስራ አንድ ቢሊዮን ነው። ይህ ቁጥር ይዤ የመጣሁት ሳይሆን እኔ ራሴ ስላየሁት ነው።

እውነተኛ ታሪክ። አመሻሽ ላይ ከቢሮ ልወጣ ነበር። ጥግ ላይ ተቀምጠው በላፕቶቻቸው አንድ ነገር ሲያደርጉ የገንቢዎች ቡድን አይቻለሁ። ወደ ሰዎቹ ሄጄ “ምን ነካህ?” ብዬ ጠየቅኳቸው።

ትንሽ ቀደም ብሎ፣ ከምሽቱ ዘጠኝ ሰዓት አካባቢ፣ ከአዘጋጆቹ አንዱ ወደ ቤት ለመሄድ በዝግጅት ላይ ነበር። እናም “አሁን ማመልከቻዬን ወደ አንድ ዝቅ አደርጋለሁ” ብዬ ወሰንኩ። አንዱን ተጫንኩ፣ ግን ኢንተርኔት ትንሽ ቀንሷል። እንደገና አንዱን ጫነ፣ አንዱን ተጭኖ አስገባን ነካ። የቻልኩትን ሁሉ ነቀነቅኩ። ከዚያ በይነመረቡ ወደ ሕይወት መጣ - እና ሁሉም ነገር ወደዚህ ቁጥር መውረድ ጀመረ።

እውነት ነው፣ ይህ ታሪክ በኩበርኔትስ ላይ አልተከሰተም፤ በዚያን ጊዜ ዘላን ነበር። በዚህ ምክንያት ዘላኖች ከቋሚ የመጠን ሙከራዎችን ለማስቆም ከአንድ ሰአት ሙከራ በኋላ፣ ዘላኖች መመዘኑን አላቆምም እና ሌላ ምንም ነገር አላደርግም በማለት መለሰ። "ደክሞኛል እሄዳለሁ" እና ጠመዝማዛ።

በተፈጥሮ, እኔ Kubernetes ላይ ተመሳሳይ ነገር ለማድረግ ሞከርኩ. ኩበርኔትስ በአስራ አንድ ቢሊዮን ፖድ ደስተኛ አልነበረም፣ “አልችልም። ከውስጥ አፍ ጠባቂዎች ይበልጣል። ግን 1 ፖድዎች ይችሉ ነበር.

ለአንድ ቢሊዮን ምላሽ, ኩብ ወደ እራሱ አልወጣም. እሱ በእውነት ማዛባት ጀመረ። ሂደቱ የበለጠ በሄደ ቁጥር አዳዲስ ፓድዎችን ለመፍጠር ብዙ ጊዜ ፈጅቶበታል። ግን አሁንም ሂደቱ ቀጠለ። ብቸኛው ችግር ፖድቹን በስም ቦታዬ ውስጥ ያለገደብ ማስጀመር ከቻልኩ ያለምንም ጥያቄ እና ገደብ እንኳን በጣም ብዙ ፖዶችን በአንዳንድ ስራዎች ማስጀመር እችላለሁ በእነዚህ ተግባራት እገዛ ኖዶች በሲፒዩ ውስጥ በማስታወሻ ውስጥ መጨመር ይጀምራሉ ። ብዙ ፖዶችን ስጀምር፣ ከነሱ የሚገኘው መረጃ ወደ ማከማቻ፣ ማለትም፣ ወዘተ. እና ብዙ መረጃ እዚያ ሲደርስ ማከማቻው በጣም በዝግታ መመለስ ይጀምራል - እና ኩበርኔትስ መደበቅ ይጀምራል።

እና አንድ ተጨማሪ ችግር ... እንደሚያውቁት የኩበርኔትስ መቆጣጠሪያ አካላት አንድ ማዕከላዊ ነገር አይደሉም, ግን በርካታ አካላት ናቸው. በተለይም ተቆጣጣሪ አስተዳዳሪ, መርሐግብር እና የመሳሰሉት አሉ. እነዚህ ሁሉ ሰዎች በአንድ ጊዜ አላስፈላጊ እና ደደብ ስራዎችን መስራት ይጀምራሉ, ይህም ከጊዜ በኋላ ብዙ እና ብዙ ጊዜ ይወስዳል. የመቆጣጠሪያው አስተዳዳሪ አዲስ ፖድ ይፈጥራል. መርሐግብር አስማሚ ለእነሱ አዲስ መስቀለኛ መንገድ ለማግኘት ይሞክራል። በቅርቡ በክላስተርዎ ውስጥ ያሉ አዳዲስ አንጓዎች ሊያልቁ ይችላሉ። የኩበርኔትስ ክላስተር በዝግታ እና በዝግታ መስራት ይጀምራል።

እኔ ግን የበለጠ ለመሄድ ወሰንኩ. እንደምታውቁት, በኩበርኔትስ ውስጥ እንዲህ አይነት አገልግሎት የሚባል ነገር አለ. ደህና፣ በነባሪ በእርስዎ ዘለላዎች ውስጥ፣ ምናልባት፣ አገልግሎቱ የአይፒ ሰንጠረዦችን በመጠቀም ይሰራል።

ለምሳሌ አንድ ቢሊዮን ፖዶችን ብታካሂዱ እና ኩበርኔትስ አዲስ አገልግሎቶችን እንዲፈጥር ለማስገደድ ስክሪፕት ከተጠቀሙ፡-

for i in {1..1111111}; do
    kubectl expose deployment test --port 80  
        --overrides="{"apiVersion": "v1", 
           "metadata": {"name": "nginx$i"}}"; 
done 

በሁሉም የክላስተር አንጓዎች ላይ፣ ብዙ እና ተጨማሪ አዲስ የiptables ህጎች በአንድ ጊዜ በግምት ይፈጠራሉ። ከዚህም በላይ ለእያንዳንዱ አገልግሎት አንድ ቢሊዮን iptables ደንቦች ይፈጠራሉ.

ይህን ሁሉ ነገር በብዙ ሺህ፣ እስከ አስር ድረስ ፈትጬዋለሁ። እና ችግሩ ቀድሞውኑ በዚህ ገደብ ላይ ssh ወደ መስቀለኛ መንገድ ማድረግ በጣም ችግር ያለበት ነው። ምክንያቱም ፓኬቶች, በጣም ብዙ ሰንሰለቶች ውስጥ ማለፍ, በጣም ጥሩ አይደለም ስሜት ይጀምራሉ.

እና ይሄ ደግሞ, ሁሉም በኩበርኔትስ እርዳታ ተፈትቷል. እንደዚህ ያለ የመረጃ ምንጭ ኮታ ነገር አለ። በክላስተር ውስጥ ያለውን የስም ቦታ ያሉትን ሀብቶች እና ዕቃዎች ብዛት ያዘጋጃል። በእያንዳንዱ የኩበርኔትስ ክላስተር የስም ቦታ ላይ የያምል ነገር መፍጠር እንችላለን። ይህንን ዕቃ በመጠቀም ለዚህ የስም ቦታ የተመደቡ የተወሰኑ የጥያቄዎች እና ገደቦች አሉን ማለት እንችላለን ፣ ከዚያ በዚህ የስም ቦታ 10 አገልግሎቶችን እና 10 ፖዶችን መፍጠር ይቻላል ማለት እንችላለን ። እና ነጠላ ገንቢ ቢያንስ በምሽት እራሱን ማነቅ ይችላል። ኩበርኔትስ ይነግረዋል፡- “እቃዎ ከኮታው በላይ ስለሆነ ፖድዎን በዚያ መጠን ማመጣጠን አይችሉም። ያ ነው ፣ ችግሩ ተፈቷል ። ሰነድ እዚህ.

በዚህ ረገድ አንድ ችግር ያለበት ነጥብ ይነሳል. በኩበርኔትስ ውስጥ የስም ቦታ መፍጠር ምን ያህል ከባድ እንደሆነ ይሰማዎታል። እሱን ለመፍጠር ብዙ ነገሮችን ግምት ውስጥ ማስገባት አለብን.

የንብረት ኮታ + ገደብ ክልል + RBAC
• የስም ቦታ ይፍጠሩ
• በውስጡ ገደብ ይፍጠሩ
• በመረጃ ኮታ ውስጥ ይፍጠሩ
• ለCI የአገልግሎት መለያ ይፍጠሩ
• ለ CI እና ለተጠቃሚዎች የሮል ማሰሪያ ይፍጠሩ
• እንደ አማራጭ አስፈላጊ የሆኑትን የአገልግሎት ፓዶች ያስጀምሩ

ስለዚህ በዚህ አጋጣሚ እድገቶቼን ለማካፈል እወዳለሁ። የኤስዲኬ ኦፕሬተር የሚባል ነገር አለ። ይህ የኩበርኔትስ ክላስተር ኦፕሬተሮችን የሚጽፍበት መንገድ ነው። Asible በመጠቀም መግለጫዎችን መጻፍ ይችላሉ.

መጀመሪያ ላይ በአንሲብል ተጽፎ ነበር፣ እና ከዚያ የኤስዲኬ ኦፕሬተር እንዳለ አይቼ የአንሲቪል ሚናን ወደ ኦፕሬተር ፃፍኩ። ይህ መግለጫ በኩበርኔትስ ክላስተር ውስጥ ትዕዛዝ ተብሎ የሚጠራ ነገር እንዲፈጥሩ ይፈቅድልዎታል. በትዕዛዝ ውስጥ፣ በ yaml ውስጥ የዚህን ትዕዛዝ አካባቢን እንዲገልጹ ያስችልዎታል። እና በቡድን አካባቢ ውስጥ, ብዙ ሀብቶችን እየመደብን መሆኑን ለመግለጽ ያስችለናል.

ትንሹ ይህን አጠቃላይ ውስብስብ ሂደት ቀላል ማድረግ.

እና በማጠቃለያው. በዚህ ሁሉ ምን ይደረግ?
አንደኛ. የፖድ ደህንነት ፖሊሲ ጥሩ ነው። እና ምንም እንኳን ከ Kubernetes ጫኚዎች ውስጥ አንዳቸውም እስከ ዛሬ ድረስ ባይጠቀሙባቸውም ፣ አሁንም በክላስተርዎ ውስጥ መጠቀም ያስፈልግዎታል።

የአውታረ መረብ ፖሊሲ ​​ሌላ አላስፈላጊ ባህሪ አይደለም። በክላስተር ውስጥ በእውነት የሚያስፈልገው ይህ ነው።

LimitRange/ResourceQuota - እሱን ለመጠቀም ጊዜው አሁን ነው። ይህንን ከረጅም ጊዜ በፊት መጠቀም ጀመርን, እና ለረጅም ጊዜ ሁሉም ሰው እንደሚጠቀምበት እርግጠኛ ነበርኩ. ይህ ብርቅ እንደሆነ ታወቀ።

በሪፖርቱ ወቅት ከጠቀስኳቸው በተጨማሪ ክላስተርን ለማጥቃት የሚያስችል ሰነድ የሌላቸው ባህሪያት አሉ። በቅርቡ ተለቋል ስለ Kubernetes ተጋላጭነቶች ሰፊ ትንታኔ.

አንዳንድ ነገሮች በጣም አሳዛኝ እና ጎጂ ናቸው። ለምሳሌ፣ በተወሰኑ ሁኔታዎች፣ በኩበርኔትስ ክላስተር ውስጥ ያሉ ኩብሌቶች የwarlocks ማውጫውን ይዘት ላልተፈቀደ ተጠቃሚ ሊሰጡ ይችላሉ።

እዚህ የነገርኳችሁን ሁሉ እንዴት እንደገና ማባዛት እንደሚችሉ መመሪያዎች አሉ። ResourceQuota እና Pod Security Policy ምን እንደሚመስሉ የምርት ምሳሌዎች ያላቸው ፋይሎች አሉ። እና ይህን ሁሉ መንካት ይችላሉ.

ለሁሉም አመሰግናለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ