ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

ማስታወሻ. ትርጉምየማይክሮ አገልግሎት አርክቴክቸር ለሚከተሉ አፕሊኬሽኖች ዛሬ ባለው መሠረተ ልማት ውስጥ የአገልግሎት መረቦች በእርግጠኝነት መነጋገሪያ ርዕስ ሆነዋል። ኢስቲዮ በብዙ የዴቭኦፕስ መሐንዲሶች ራዳር ላይ ሊሆን ቢችልም ፣ እሱ ከሚያቀርባቸው ባህሪዎች አንፃር ውስብስብ ቢሆንም ፣ ለማወቅ ብዙ ጊዜ የሚወስድ በትክክል አዲስ ምርት ነው። በቴሌኮሙኒኬሽን ኦሬንጅ ኔትወርኮች ለትልቅ ደንበኞች የክላውድ ኮምፒዩቲንግ ኃላፊ የሆነው ጀርመናዊው መሐንዲስ ሪኖር ማሎኩ ወደ ኢስቲዮ በፍጥነት እና በጥልቀት ለመጥለቅ የሚያስችሉዎትን አስደናቂ ተከታታይ ቁሳቁሶችን ጽፏል። ታሪኩን የሚጀምረው ኢስቲዮ ምን ማድረግ እንደሚችል እና በዓይንዎ በፍጥነት እንዴት ማየት እንደሚችሉ ነው።

Istio - ክፍት ምንጭ-ፕሮጀክት፣ ከGoogle፣ IBM እና Lyft ቡድኖች ጋር በመተባበር የተገነባ። በማይክሮ ሰርቪስ ላይ በመመስረት በመተግበሪያዎች ውስጥ የሚነሱትን ውስብስብ ነገሮች ይፈታል፣ ለምሳሌ፡-

  • የትራፊክ አስተዳደር: የጊዜ ማብቂያዎች, ሙከራዎች, ጭነት ማመጣጠን;
  • ደህንነትየመጨረሻ ተጠቃሚ ማረጋገጫ እና ፍቃድ;
  • ታዛቢነት: መከታተል, መከታተል, መግባት.

ሁሉም በመተግበሪያ ደረጃ ሊፈቱ ይችላሉ፣ነገር ግን ከዚያ በኋላ የእርስዎ አገልግሎቶች “ማይክሮ” አይሆኑም። እነዚህን ጉዳዮች ለመፍታት የሚደረጉት ተጨማሪ ጥረቶች በቀጥታ ለንግድ ስራ ጥቅም ላይ የሚውሉትን የኩባንያ ሀብቶች ማባከን ነው። አንድ ምሳሌ እንመልከት፡-

የፕሮጀክት አስተዳዳሪ፡ የግብረመልስ ባህሪውን ለመጨመር ምን ያህል ጊዜ ይወስዳል?
ገንቢ: ሁለት sprints.

MP: ምን?... CRUD ብቻ ነው!
R: CRUD ማድረግ የተግባሩ ቀላል አካል ነው፣ ነገር ግን አሁንም ተጠቃሚዎችን እና አገልግሎቶችን ማረጋገጥ እና ፍቃድ መስጠት አለብን። አውታረ መረቡ የማይታመን ስለሆነ, ተደጋጋሚ ጥያቄዎችን መተግበር ያስፈልግዎታል, እንዲሁም የወረዳ የሚላተም ንድፍ በደንበኞች ውስጥ. እንዲሁም አጠቃላይ ስርዓቱ አለመበላሸቱን ለማረጋገጥ, ጊዜው ያለፈበት እና ጅማቶች (በሁለቱም በተጠቀሱት ቅጦች ላይ ተጨማሪ ዝርዝሮችን ለማግኘት በጽሁፉ ላይ ይመልከቱ።)እና ችግሮችን ለመለየት፣ ክትትል፣ ፍለጋ፣ […]

MP: ኦህ፣ ይህን ባህሪ ወደ ምርት አገልግሎት ብቻ እናስቀምጠው።

ሀሳቡ ግልጽ ነው ብዬ አስባለሁ-አንድ አገልግሎት ለመጨመር የሚያስፈልገው የእርምጃዎች እና ጥረቶች መጠን በጣም ትልቅ ነው. በዚህ ጽሑፍ ውስጥ ኢስቲዮ ከላይ የተጠቀሱትን ሁሉንም ውስብስብነት (በቢዝነስ ሎጂክ ያልታለመ) ከአገልግሎቶች እንዴት እንደሚያስወግድ እንመለከታለን።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

አመለከተጽሑፉ ስለ ኩበርኔትስ የስራ እውቀት እንዳለህ ይገምታል። አለበለዚያ ለማንበብ እመክራለሁ የኩበርኔትስ መግቢያዬ እና ከዚያ በኋላ ብቻ ይህን ጽሑፍ ማንበብዎን ይቀጥሉ።

ኢስቲዮ ሀሳብ

ኢስቲዮ በሌለበት ዓለም አንድ አገልግሎት ለሌላው ቀጥተኛ ጥያቄዎችን ያቀርባል ፣ እና ካልተሳካ አገልግሎቱ እራሱን ማስተናገድ አለበት-አዲስ ሙከራ ያድርጉ ፣ ለተወሰነ ጊዜ ያቅርቡ ፣ የወረዳ ተላላፊ ይክፈቱ ፣ ወዘተ.

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
የአውታረ መረብ ትራፊክ በኩበርኔትስ

በሌላ በኩል ኢስቲዮ በኔትወርክ መስተጋብር ውስጥ ጣልቃ በመግባት ከአገልግሎቶች እና ተግባራት ሙሉ በሙሉ የተለየ ልዩ መፍትሄ ይሰጣል. እና እንደዚህ ይተገበራል-

  • ስህተትን መታገስ: በምላሹ ውስጥ ባለው የሁኔታ ኮድ መሰረት, ጥያቄው ካልተሳካ እና እንደገና እንዳቀረበ ይገነዘባል.
  • የካናሪ ልቀቶችወደ አዲሱ የአገልግሎቱ ስሪት የተወሰነ የጥያቄዎችን መቶኛ ብቻ ያዞራል።
  • ክትትል እና መለኪያዎች: አገልግሎቱ ምላሽ ለመስጠት ምን ያህል ጊዜ ፈጅቷል?
  • መከታተያ እና ታዛቢነትለእያንዳንዱ ጥያቄ ልዩ ራስጌዎችን ያክላል እና በክላስተር ውስጥ ይከታተላቸዋል።
  • ደህንነትJWT ማስመሰያ ሰርስሮ ያወጣል፣ ተጠቃሚዎችን ያረጋግጣል እና ይፈቅዳል።

እርስዎን ለመሳብ እነዚህ ጥቂቶቹ ናቸው (በእርግጥ ጥቂቶች ብቻ!)። አሁን ወደ ቴክኒካዊ ዝርዝሮች እንዝለቅ!

አርክቴክቸር

ኢስቲዮ ሁሉንም የአውታረ መረብ ትራፊክ ያጠለፈ እና በእሱ ላይ የተወሰኑ ህጎችን ይተገበራል ፣ በእያንዳንዱ ፖድ ውስጥ በጎን መኪና መያዣ መልክ ስማርት ፕሮክሲ ያስገባል። ሁሉንም እድሎች የሚያንቀሳቅሱ ፕሮክሲዎች ሀ የውሂብ አውሮፕላን, እና እነሱ በተለዋዋጭ ሊስተካከሉ ይችላሉ የመቆጣጠሪያ አውሮፕላን.

የውሂብ አውሮፕላን

በፖዳዎች ውስጥ የሚገቡት ፕሮክሲዎች ኢስቲዮ የምንፈልገውን መስፈርቶች በቀላሉ እንዲያሳካ ያስችለዋል። ለምሳሌ፣ የድጋሚውን እና የወረዳውን የሚላቀቅ ተግባራትን እንፈትሽ።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
በመልእክት ውስጥ እንደገና ሙከራዎች እና ወረዳዎች እንዴት እንደሚተገበሩ

ማጠቃለል:

  1. መልእክተኛ (እኛ እየተነጋገርን ያለነው በአንድ የጎን መኪና ኮንቴይነር ውስጥ ስለሚገኝ ፕሮክሲ ነው ፣ እሱም ይሰራጫል እና እንዴት የተለየ ምርት - በግምት. መተርጎም) ለመጀመሪያው የአገልግሎት ቢ ጥያቄ ይልካል እና አልተሳካም።
  2. መልእክተኛ Sidecar እንደገና እየሞከረ ነው። (እንደገና ይሞክሩ). (1)
  3. ያልተሳካው ጥያቄ ወደ ጠራው ፕሮክሲ ይመለሳል።
  4. ይህ የወረዳ ሰሪውን ይከፍታል እና ለቀጣይ ጥያቄዎች ቀጣዩን አገልግሎት ይደውላል። (2)

ይህ ማለት የሚቀጥለውን ዳግም ሞክር ቤተ-መጽሐፍት መጠቀም አያስፈልገዎትም ፣ የእራስዎን የሰርከት መሰባበር እና የአገልግሎት ግኝትን በ X ፣ Y ወይም Z ፕሮግራሚንግ ቋንቋ ትግበራ ማድረግ የለብዎትም ። ይህ ሁሉ እና ሌሎችም የሚገኙት ከ ሳጥን ውስጥ Istio እና አያስፈልግም አይደለም ኮድ ለውጦች.

በጣም ጥሩ! አሁን ከኢስቲዮ ጋር ጉዞ ላይ መሄድ ትፈልግ ይሆናል፣ ግን አሁንም አንዳንድ ጥርጣሬዎች፣ ክፍት ጥያቄዎች አሉ። ይህ በህይወት ውስጥ ለሁሉም አጋጣሚዎች ሁሉን አቀፍ መፍትሄ ከሆነ, ህጋዊ ጥርጣሬ አለዎት: ከሁሉም በላይ, ሁሉም እንደዚህ ያሉ መፍትሄዎች በእውነቱ ለማንኛውም ጉዳይ ተስማሚ አይደሉም.

እና በመጨረሻም “ሊበጅ የሚችል ነው?” ብለው ይጠይቃሉ።

አሁን ለባህር ጉዞ ዝግጁ ነዎት - እና ከመቆጣጠሪያ አውሮፕላን ጋር እንተዋወቅ።

የመቆጣጠሪያ አውሮፕላን

ሶስት አካላትን ያቀፈ ነው። አዉሮፕላን ነጂ, ሚክሴር и ግልብጥብጥመልእክተኞች ትራፊክን እንዲመሩ፣ ፖሊሲዎችን እንዲተገብሩ እና የቴሌሜትሪ መረጃዎችን እንዲሰበስቡ በአንድነት የሚያዋቅር ነው። በስርዓተ-ፆታ ፣ ሁሉም እንደዚህ ይመስላል

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
የቁጥጥር አውሮፕላን ከመረጃ አውሮፕላን ጋር መስተጋብር

መልእክተኞች (ማለትም የውሂብ አውሮፕላን) የተዋቀሩ ናቸው። ኩበርኔትስ ሲአርዲ (ብጁ የመረጃ ፍቺዎች) በኢስቲዮ የተገለጸ እና በተለይ ለዚሁ ዓላማ የተነደፈ። ይህ ለአንተ ምን ማለት ነው በ Kubernetes ውስጥ ከሚታወቅ አገባብ ጋር ሌላ ግብአት ናቸው። አንዴ ከተፈጠረ ይህ ሃብት በመቆጣጠሪያው አውሮፕላን ይወሰድና ለመልእክተኞች ይተገበራል።

ከኢስቲዮ ጋር የአገልግሎቶች ግንኙነት

የኢስቲዮ ከአገልግሎቶች ጋር ያለውን ግንኙነት ገልፀነዋል፣ ግን በተቃራኒው አይደለም፡ አገልግሎቶች ከኢስቲዮ ጋር እንዴት ይዛመዳሉ?

እውነቱን ለመናገር ፣ አገልግሎቶች ስለ ኢስቲዮ መኖር ያውቃሉ እንዲሁም ዓሦች ስለ ውሃ ያውቃሉ ፣ “ለማንኛውም ውሃ ምንድነው?” ብለው ሲጠይቁ።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
ምሳሌ ቪክቶሪያ Dimitrakopoulos: ውሃውን እንዴት ይወዳሉ? - ለማንኛውም ውሃ ምንድን ነው?

ስለዚህ, የሚሰራ ክላስተር መውሰድ ይችላሉ እና የኢስቲዮ ክፍሎችን ካሰማሩ በኋላ, በውስጡ ያሉት አገልግሎቶች መስራታቸውን ይቀጥላሉ, እና እነዚህን ክፍሎች ካስወገዱ በኋላ, ሁሉም ነገር እንደገና ጥሩ ይሆናል. በዚህ ሁኔታ ኢስቲዮ የሰጡትን እድሎች እንደሚያጡ ግልጽ ነው.

በቂ ንድፈ ሃሳብ - ይህንን እውቀት ወደ ተግባር እናውለው!

ኢስቲዮ በተግባር

ኢስቲዮ ቢያንስ 4 ቪሲፒዩዎች እና 8 ጂቢ ራም ያለው የኩበርኔትስ ክላስተር ይፈልጋል። ክላስተርን በፍጥነት ከፍ ለማድረግ እና ከጽሁፉ ላይ ያሉትን መመሪያዎች ለመከተል፣ አዲስ ተጠቃሚዎችን የሚያቀርበውን Google Cloud Platform እንዲጠቀሙ እመክራለሁ ነጻ $ 300.

ክላስተር ከፈጠሩ እና የኩበርኔትስ መዳረሻን በኮንሶል መገልገያ በኩል ካዘጋጁ በኋላ ኢስቲዮ በሄልም ጥቅል አስተዳዳሪ በኩል መጫን ይችላሉ።

Helm መጫን

በ ውስጥ እንደተገለፀው የ Helm ደንበኛን በኮምፒተርዎ ላይ ይጫኑት። ኦፊሴላዊ ሰነዶች. በሚቀጥለው ክፍል Istio ን ለመጫን አብነቶችን ለመፍጠር እንጠቀማለን.

መጫን

የኢስቲዮ ምንጮችን ያውርዱ የቅርብ ጊዜ የተለቀቀው (የመጀመሪያው ደራሲ ከስሪት 1.0.5 ጋር ያለው ግንኙነት አሁን ወዳለው ተቀይሯል፣ ማለትም 1.0.6 - በግምት ተርጓሚ።)፣ ይዘቱን ወደ አንድ ማውጫ ያውጡ ፣ እኔ የምጠቅሰው [istio-resources].

የIstio ሀብቶችን በቀላሉ ለመለየት በK8s ክላስተር ውስጥ የስም ቦታ ይፍጠሩ istio-system:

$ kubectl create namespace istio-system

ወደ ማውጫው በማሰስ መጫኑን ያጠናቅቁ [istio-resources] እና ትዕዛዙን ያሂዱ:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

ይህ ትእዛዝ የኢስቲዮ ቁልፍ ክፍሎችን ወደ ፋይል ያወጣል። istio.yaml. የሚከተሉትን መለኪያዎች በመግለጽ መደበኛውን አብነት ለራሳችን አሻሽለነዋል።

  • global.mtls.enabled ውስጥ ተጭኗል false (ማለትም፣ mTLS ማረጋገጥ ተሰናክሏል - በግምት። ተርጓሚ።)የእኛን የፍቅር ግንኙነት ሂደት ለማቃለል;
  • tracing.enabled ጥያቄን በጃገር መፈለግን ያስችላል;
  • kiali.enabled አገልግሎቶችን እና ትራፊክን ለማየት Kialiን ወደ ክላስተር ይጭናል፤
  • grafana.enabled የተሰበሰቡትን መለኪያዎች ለማየት Grafana ን ይጭናል።

የመነጩ ሀብቶችን በትእዛዙ ይተግብሩ፡-

$ kubectl apply -f istio.yaml

በክላስተር ውስጥ የኢስቲዮ መጫን ተጠናቅቋል! በስም ቦታ ውስጥ ያሉ ሁሉም ዱካዎች እስኪቆዩ ድረስ ይጠብቁ istio-system ይችላል። Running ወይም Completedየሚከተለውን ትዕዛዝ በማስኬድ፡-

$ kubectl get pods -n istio-system

አሁን ወደ ቀጣዩ ክፍል ለመቀጠል ዝግጁ ነን፣ ማመልከቻውን ወደምናነሳበት እና ወደምናስኬደው።

ስሜት ትንተና መተግበሪያ አርክቴክቸር

ቀደም ሲል በተጠቀሰው ውስጥ ጥቅም ላይ የዋለውን የስሜት ትንተና ማይክሮ አገልግሎት መተግበሪያን ምሳሌ እንጠቀም የኩበርኔትስ መግቢያ መጣጥፍ. የ Istio እድሎችን በተግባር ለማሳየት በቂ ውስብስብ ነው.

አፕሊኬሽኑ አራት ጥቃቅን አገልግሎቶችን ያቀፈ ነው፡-

  1. አገልግሎት SA-Frontentበ Reactjs ላይ የፊት-መጨረሻ መተግበሪያን የሚያገለግል;
  2. አገልግሎት SA የድር መተግበሪያየስሜት ትንተና ጥያቄዎችን የሚያገለግል;
  3. አገልግሎት ኤስኤ ሎጂክእራሱን የሚያከናውን ስሜት ትንተና;
  4. አገልግሎት ኤስኤ ግብረመልስ, በተከናወነው ትንተና ትክክለኛነት ላይ ከተጠቃሚዎች ግብረመልስ ይቀበላል.

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

በዚህ ሥዕላዊ መግለጫ ውስጥ ከአገልግሎቶች በተጨማሪ የመግቢያ ተቆጣጣሪን እናያለን, በኩበርኔትስ ውስጥ ወደ ተጓዳኝ አገልግሎቶች ገቢ ጥያቄዎችን ያቀርባል. ኢስቲዮ ተመሳሳይ ፅንሰ-ሀሳብ እንደ Ingress Gateway አካል ይጠቀማል፣ ዝርዝሮችም ይከተላሉ።

ከኢስቲዮ ፕሮክሲ ጋር መተግበሪያን በማስጀመር ላይ

በአንቀጹ ውስጥ ለተጠቀሱት ተጨማሪ ስራዎች፣ ማከማቻዎን ይዝጉ ኢስቲዮ-ማስተር. ለኩበርኔትስ እና ኢስቲዮ አፕሊኬሽኑን ይዟል።

የጎን መኪናዎችን ማስገባት

ማስገባት ይቻላል በራስ-ሰር ወይም вручную. የጎን መኪና ኮንቴይነሮችን በራስ ሰር ለማስገባት መለያውን በስም ቦታ ላይ ማዘጋጀት ያስፈልግዎታል istio-injection=enabled, ይህም በሚከተለው ትዕዛዝ ነው የሚከናወነው:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

አሁን እያንዳንዱ ፖድ በነባሪ የስም ቦታ ላይ የሚሰማራ (default) የጎን መኪናውን መያዣ ያገኛል. ይህንን ለማረጋገጥ ወደ የመረጃ ማከማቻ ስርወ ማውጫ በመሄድ የሙከራ መተግበሪያን እናሰማራ [istio-mastery] እና የሚከተለውን ትዕዛዝ ያሂዱ:

$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created

አገልግሎቶቹን ካሰማራ በኋላ፣ ትዕዛዙን በማስኬድ ፖድቹ ሁለት ኮንቴይነሮች (ከአገልግሎቱ ራሱ እና ከመኪናው ጋር) እንዳላቸው ያረጋግጡ። kubectl get pods እና በአምዱ ስር መሆኑን ማረጋገጥ READY እሴት ተገልጿል 2/2ሁለቱም ኮንቴይነሮች እየሰሩ መሆናቸውን በማሳየት፡-

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sa-feedback-55f5dc4d9c-c9wfv   2/2       Running   0          12m
sa-frontend-558f8986-hhkj9     2/2       Running   0          12m
sa-logic-568498cb4d-2sjwj      2/2       Running   0          12m
sa-logic-568498cb4d-p4f8c      2/2       Running   0          12m
sa-web-app-599cf47c7c-s7cvd    2/2       Running   0          12m

በእይታ ይህንን ይመስላል።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
የመልእክት ተኪ በአንደኛው ፖድ

አሁን አፕሊኬሽኑ ስራ ላይ ስለዋለ፣ ገቢ ትራፊክ ወደ አፕሊኬሽኑ እንዲገባ መፍቀድ አለብን።

ማስገቢያ ጌትዌይ

ይህንን ለማሳካት በጣም ጥሩው ልምምድ (በክላስተር ውስጥ ትራፊክ ፍቀድ) ነው። ማስገቢያ ጌትዌይ በኢስቲዮ ውስጥ፣ በክላስተር "ጫፍ" ላይ የሚገኘው እና የኢስቲዮ ባህሪያትን እንደ ማዘዋወር፣ ጭነት ማመጣጠን፣ ደህንነት እና የገቢ ትራፊክ መከታተልን እንዲያነቁ ያስችልዎታል።

የ Ingress Gateway አካል እና ወደ ውጭ የሚያስተላልፈው አገልግሎት በኢስቲዮ መጫኛ ጊዜ በክላስተር ላይ ተጭኗል። የአገልግሎቱን ውጫዊ አይፒ አድራሻ ለማወቅ፣ ያሂዱ፡-

$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP
istio-ingressgateway   LoadBalancer   10.0.132.127   13.93.30.120

ይህንን አይፒ በመጠቀም አፕሊኬሽኑን ማግኘት እንቀጥላለን (እኔ እንደ EXTERNAL-IP እጠቅሳለሁ) ፣ ስለዚህ ለመመቻቸት ፣ እሴቱን ወደ ተለዋዋጭ እንጽፋለን-

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

ይህን አይፒ አሁን በአሳሽ በኩል ለመጠቀም ከሞከርክ አገልግሎት የማይገኝ ስህተት ታገኛለህ፣ ምክንያቱም በነባሪ ኢስቲዮ ሁሉንም ገቢ ትራፊክ ያግዳል።ጌትዌይ እስኪገለጽ ድረስ.

የጌትዌይ ምንጭ

ጌትዌይ በኩበርኔትስ ውስጥ ያለ ሲአርዲ (ብጁ የመረጃ ፍቺ) ነው፣ Istio ን በክላስተር ውስጥ ከተጫነ በኋላ የሚገለፅ እና ገቢ ትራፊክን የምንፈቅድላቸው ወደቦች፣ ፕሮቶኮሎች እና አስተናጋጆች የመግለጽ ችሎታ ያስችለዋል።

በእኛ ሁኔታ የኤችቲቲፒ ትራፊክ ወደብ 80 ለሁሉም አስተናጋጆች መፍቀድ እንፈልጋለን። ችግሩ የሚታወቀው በሚከተለው ፍቺ ነው። (http-ጌትዌይ.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

ይህ ውቅር ከመራጩ በስተቀር ምንም ማብራሪያ አያስፈልገውም istio: ingressgateway. በዚህ መራጭ፣ አወቃቀሩን በየትኛው Ingress Gateway ላይ እንደሚተገበር መግለፅ እንችላለን። በእኛ ሁኔታ ይህ በኢስቲዮ ውስጥ በነባሪነት የተጫነው የ Ingress Gateway መቆጣጠሪያ ነው።

ውቅሩ የሚተገበረው በሚከተለው ትዕዛዝ በመደወል ነው።

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

የመግቢያ መንገዱ አሁን ወደብ 80 መዳረሻ ይፈቅዳል ነገር ግን ጥያቄዎቹን የት እንደሚያስተናግድ አያውቅም። ለዚህም ያስፈልግዎታል ምናባዊ አገልግሎቶች.

ምናባዊ አገልግሎት ምንጭ

ቨርቹዋል ሰርቪስ ለIngress Gateway በክላስተር ውስጥ የተፈቀዱ ጥያቄዎችን እንዴት እንደሚያስተናግድ ይነግረዋል።

በ http-gateway በኩል ወደ እኛ መተግበሪያ የሚመጡ ጥያቄዎች ወደ sa-frontend ፣ sa-web-app እና sa-feedback አገልግሎቶች መላክ አለባቸው።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
ከቨርቹዋል ሰርቪስ ጋር የሚዋቀሩ መንገዶች

ወደ SA-Frontend መላክ ያለባቸውን ጥያቄዎች ግምት ውስጥ ያስገቡ፡-

  • በመንገድ ላይ ትክክለኛ ግጥሚያ / index.html ለማግኘት ወደ SA-Frontend መላክ አለበት;
  • ቅድመ ቅጥያ ያላቸው መንገዶች /static/* በግንባሩ ውስጥ ጥቅም ላይ የሚውሉ የማይንቀሳቀሱ ፋይሎችን ለማግኘት ወደ SA-Frontend መላክ አለበት፣ ለምሳሌ CSS እና JavaScript;
  • ከመደበኛው አገላለጽ ጋር የሚዛመዱ መንገዶች '^.*.(ico|png|jpg)$', ወደ SA-Frontend መላክ አለበት, ምክንያቱም እነዚህ በገጹ ላይ የሚታዩ ምስሎች ናቸው.

አተገባበሩ የሚከናወነው በሚከተለው ውቅር ነው (sa-virtualservice-ውጫዊ.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)

Важные моменты:

  1. Этот VirtualService относится к запросам, приходящим через http-gateway;
  2. В destination определяется сервис, куда отправляются запросы.
Примечание: Конфигурация выше хранится в файле sa-virtualservice-external.yaml, который также содержит настройки для маршрутизации в SA-WebApp и SA-Feedback, но был сокращён здесь в статье для лаконичности. Применим VirtualService вызовом:
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

Примечание: Когда мы применяем ресурсы Istio, Kubernetes API Server создаёт событие, которое получает Istio Control Plane, и уже после этого новая конфигурация применяется к прокси-серверам Envoy каждого pod'а. А контроллер Ingress Gateway представляется очередным Envoy, сконфигурированным в Control Plane. Всё это на схеме выглядит так:

Назад к микросервисам вместе с Istio. Часть 1
Конфигурация Istio-IngressGateway для маршрутизации запросов

Приложение Sentiment Analysis стало доступным по http://{EXTERNAL-IP}/. Не переживайте, если вы получаете статус Not Found: иногда требуется чуть больше времени для того, чтобы конфигурация вступила в силу и кэши Envoy обновились.

Перед тем, как продолжить, поработайте немного с приложением, чтобы сгенерировать трафик (его наличие необходимо для наглядности в последующих действиях — прим. перев.).

Kiali : наблюдаемость

Чтобы попасть в административный интерфейс Kiali, выполните следующую команду:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

… и откройте http://localhost:20001/, залогинившись под admin/admin. Здесь вы найдете множество полезных возможностей, например, для проверки конфигурации компонентов Istio, визуализации сервисов по информации, собранной при перехвате сетевых запросов, получения ответов на вопросы «Кто к кому обращается?», «У какой версии сервиса возникают сбои?» и т.п. В общем, изучите возможности Kiali перед тем, как двигаться дальше — к визуализации метрик с Grafana.

Назад к микросервисам вместе с Istio. Часть 1

Grafana: визуализация метрик

Собранные в Istio метрики попадают в Prometheus и визуализируются с Grafana. Чтобы попасть в административный интерфейс Grafana, выполните команду ниже, после чего откройте http://localhost:3000/:

$ kubectl -n istio-system port-forward 
    $(kubectl -n istio-system get pod -l app=grafana 
    -o jsonpath={.items[0].metadata.name}) 3000

Кликнув на меню Home слева сверху и выбрав Istio Service Dashboard в левом верхнем углу, начните с сервиса sa-web-app, чтобы посмотреть на собранные метрики:

Назад к микросервисам вместе с Istio. Часть 1

Здесь нас ждёт пустое и совершенно скучное представление — руководство никогда такое не одобрит. Давайте же создадим небольшую нагрузку следующей командой:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Вот теперь у нас гораздо более симпатичные графики, а в дополнение к ним — замечательные инструменты Prometheus для мониторинга и Grafana для визуализации метрик, что позволят нам узнать о производительности, состоянии здоровья, улучшениях/деградации в работе сервисов на протяжении времени.

Наконец, посмотрим на трассировку запросов в сервисах.

Jaeger : трассировка

Трассировка нам потребуется, потому что чем больше у нас сервисов, тем сложнее добраться до причины сбоя. Посмотрим на простой случай из картинки ниже:

Назад к микросервисам вместе с Istio. Часть 1
Типовой пример случайного неудачного запроса

Запрос приходит, падает — в чём же причина? Первый сервис? Или второй? Исключения есть в обоих — давайте посмотрим на логи каждого. Как часто вы ловили себя за таким занятием? Наша работа больше похожа на детективов программного обеспечения, а не разработчиков…

Это широко распространённая проблема в микросервисах и решается она распределёнными системами трассировки, в которых сервисы передают друг другу уникальный заголовок, после чего эта информация перенаправляется в систему трассировки, где она сопоставляется с данными запроса. Вот иллюстрация:

Назад к микросервисам вместе с Istio. Часть 1
Для идентификации запроса используется TraceId

В Istio используется Jaeger Tracer, который реализует независимый от вендоров фреймворк OpenTracing API. Получить доступ к пользовательского интерфейсу Jaeger можно следующей командой:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Теперь зайдите на http://localhost:16686/ и выберите сервис sa-web-app. Если сервис не показан в выпадающем меню — проявите/сгенерируйте активность на странице и обновите интерфейс. После этого нажмите на кнопку Find Traces, которая покажет самые последние трейсы — выберите любой — покажется детализированная информация по всем трейсам:

Назад к микросервисам вместе с Istio. Часть 1

Этот трейс показывает:

  1. Запрос приходит в istio-ingressgateway (это первое взаимодействие с одним из сервисов, и для запроса генерируется Trace ID), после чего шлюз направляет запрос в сервис sa-web-app.
  2. В сервисе sa-web-app запрос подхватывается Envoy sidecar'ом, создаётся «ребёнок» в span'е (поэтому мы видим его в трейсах) и перенаправляется в контейнер sa-web-app. (Span — логическая единица работы в Jaeger, имеющая название, время начало операции и её продолжительность. Span'ы могут быть вложенными и упорядоченными. Ориентированный ациклический граф из span'ов образует trace. — прим. перев.)
  3. Здесь запрос обрабатывается методом sentimentAnalysis. Эти трейсы уже сгенерированы приложением, т.е. для них потребовались изменения в коде.
  4. С этого момента инициируется POST-запрос в sa-logic. Trace ID должен быть проброшен из sa-web-app.

Примечание: На 4 шаге приложение должно увидеть заголовки, сгенерированные Istio, и передать их в последующие запросы, как показано на изображении ниже:

Назад к микросервисам вместе с Istio. Часть 1
(A) За проброс заголовков отвечает Istio; (B) За заголовки отвечают сервисы

Istio делает основную работу, т.к. генерирует заголовки для входящих запросов, создаёт новые span'ы в каждом sidecare'е и пробрасывает их. Однако без работы с заголовками внутри сервисов полный путь трассировки запроса будет утерян.

Необходимо учитывать (пробрасывать) следующие заголовки:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Это несложная задача, однако для упрощения её реализации уже существует множество библиотек — например, в сервисе sa-web-app клиент RestTemplate пробрасывает эти заголовки, если просто добавить библиотеки Jaeger и OpenTracing в его зависимости.

Заметьте, что приложение Sentiment Analysis демонстрирует реализации на Flask, Spring и ASP.NET Core.

Теперь, когда стало ясно, что мы получаем из коробки (или почти «из коробки»), рассмотрим вопросы тонко настраиваемой маршрутизации, управления сетевым трафиком, безопасности и т.п.!

Прим. перев.: об этом читайте в следующей части материалов по Istio от Rinor Maloku, переводы которых последуют в нашем блоге в ближайшее время. UPDATE (14 марта): Вторая часть уже опубликована.

P.S. от переводчика

Читайте также в нашем блоге:

Источник: habr.com

route:
- destination:
host: sa-frontend # 2
port:
number: 80

አስፈላጊ ነጥቦች

  1. ይህ ምናባዊ አገልግሎት የሚመጡ ጥያቄዎችን ይመለከታል http-ጌትዌይ;
  2. В destination ጥያቄዎቹ የተላኩበትን አገልግሎት ይገልጻል።

አመለከተከላይ ያለው ውቅር በፋይል ውስጥ ተቀምጧል sa-virtualservice-external.yamlወደ SA-WebApp እና SA-Feedback ለማዘዋወር ቅንጅቶችን የያዘው ነገር ግን እዚህ በጽሁፉ አጭር ሆኖ ተቀምጧል።

በመደወል ቨርቹዋል ሰርቪስን ያመልክቱ፡-


አመለከተ: የኢስቲዮ ሀብቶችን ስንጠቀም የኩበርኔትስ ኤፒአይ አገልጋይ የኢስቲዮ መቆጣጠሪያ አውሮፕላን የሚቀበለውን ክስተት ያቃጥላል እና ከዚያ በኋላ አዲሱ ውቅር በእያንዳንዱ ፖድ ኤንጄይ ፕሮክሲ ላይ ይተገበራል። እና የ Ingress Gateway ተቆጣጣሪ በመቆጣጠሪያ አውሮፕላን ውስጥ የተዋቀረ ሌላ መልእክተኛ ይመስላል። ይህ ሁሉ በሥዕላዊ መግለጫው ላይ ይህን ይመስላል።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
የIstio-IngressGateway ውቅር ለጥያቄ ማዘዋወር

የስሜት ትንተና አሁን በ ላይ ይገኛል። http://{EXTERNAL-IP}/. ያልተገኘ ሁኔታ ካገኘህ አትጨነቅ፡- አንዳንድ ጊዜ አወቃቀሩ ተግባራዊ እስኪሆን እና የመልእክተኛው መሸጎጫዎች ለማዘመን ትንሽ ጊዜ ይወስዳል.

ከመቀጠልዎ በፊት ትራፊክ ለመፍጠር ከመተግበሪያው ጋር ትንሽ ይጫወቱ። (በቀጣዮቹ ድርጊቶች ግልጽነት እንዲኖረው የእሱ መገኘት አስፈላጊ ነው - በግምት. መተርጎም.).

ኪያሊ፡ ታዛቢነት

ወደ Kiali አስተዳዳሪ በይነገጽ ለመድረስ የሚከተለውን ትዕዛዝ ያሂዱ፡-


… እና ክፍት http://localhost:20001/እንደ አስተዳዳሪ/አስተዳዳሪ በመግባት። እዚህ ብዙ ጠቃሚ ባህሪዎችን ያገኛሉ ፣ ለምሳሌ ፣ የኢስቲዮ አካላትን ውቅር ለመፈተሽ ፣ የአውታረ መረብ ጥያቄዎችን በመጥለፍ ከተሰበሰቡ መረጃዎች ውስጥ አገልግሎቶችን በዓይነ ሕሊናህ ለመመልከት ፣ “ማን ማንን እያነጋገረ ነው?” ለሚሉት ጥያቄዎች መልስ ያግኙ ፣ “የትኛው የአገልግሎቱ ስሪት እያጋጠመው ነው ። አለመሳካቶች?” እናም ይቀጥላል. በአጠቃላይ ከግራፋና ጋር መለኪያዎችን ወደ መሳል ከመቀጠልዎ በፊት የኪያሊ አማራጮችን ያስሱ።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

ግራፋና፡ የመለኪያዎች እይታ

በኢስቲዮ ውስጥ የተሰበሰቡት መለኪያዎች በፕሮሜቴየስ ውስጥ ያበቃል እና በግራፋና ይታያሉ። ወደ ግራፋና አስተዳዳሪ በይነገጽ ለመድረስ ከዚህ በታች ያለውን ትዕዛዝ ያሂዱ እና ከዚያ ይክፈቱ http://localhost:3000/:


በምናሌው ላይ ጠቅ በማድረግ መግቢያ ገፅ ከላይ በግራ በኩል እና ይምረጡ የኢስቲዮ አገልግሎት ዳሽቦርድ በላይኛው ግራ ጥግ ላይ በአገልግሎት ይጀምሩ sa-web-appየተሰበሰቡትን መለኪያዎች ለማየት፡-

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

እዚህ ባዶ እና ሙሉ በሙሉ አሰልቺ አፈፃፀም እየጠበቅን ነው - አስተዳደሩ ይህንን በጭራሽ አያፀድቅም ። በሚከተለው ትዕዛዝ ትንሽ ጭነት እንፍጠር፡-


አሁን በጣም ቆንጆ ግራፎች አሉን ፣ እና ከነሱ በተጨማሪ ፣ ፕሮሜቴየስ ለክትትል እና ግራፋና ሜትሪክን ለማየት ፣ ይህም ከጊዜ በኋላ ስለ አፈፃፀም ፣ የጤና ሁኔታ ፣ ማሻሻያ / መበላሸት እንድንማር ያስችለናል ።

በመጨረሻም፣ በአገልግሎቶች ውስጥ ፍለጋን እንመልከተው።

ጄገር፡ መከታተል

ፍለጋ እንፈልጋለን፣ ምክንያቱም ብዙ አገልግሎቶች ባገኘን ቁጥር፣ ወደ ውድቀቱ መንስኤ ለመድረስ በጣም አስቸጋሪ ነው። ከሥዕሉ ላይ አንድ ቀላል ጉዳይ እንመልከት፡-

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
የዘፈቀደ ያልተሳካ ጥያቄ የተለመደ ምሳሌ

ጥያቄ ይመጣል ፣ ይወድቃል - ምክንያቱ ምንድን ነው? የመጀመሪያ አገልግሎት? ወይስ ሁለተኛ? በሁለቱም ውስጥ ልዩ ሁኔታዎች አሉ - የእያንዳንዱን ምዝግብ ማስታወሻዎች እንመልከታቸው. ይህን ሲያደርጉ ምን ያህል ጊዜ ያዙት? የእኛ ስራ ከገንቢዎች ይልቅ እንደ ሶፍትዌር መርማሪ ነው…

ይህ በማይክሮ ሰርቪስ ውስጥ የተንሰራፋ ችግር ነው እና በተከፋፈሉ የክትትል ስርዓቶች የሚፈታ ሲሆን አገልግሎቶቹ ልዩ የሆነ አርዕስት እርስ በእርስ ይተላለፋሉ ፣ ከዚያ በኋላ ይህ መረጃ ከጥያቄው መረጃ ጋር በማነፃፀር ወደ መፈለጊያ ስርዓቱ ይዛወራል ። አንድ ምሳሌ እነሆ፡-

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
TraceId ጥያቄውን ለመለየት ይጠቅማል

ኢስቲዮ ከሻጭ ነጻ የሆነ የOpenTracing API frameworkን የሚተገበረውን Jaeger Tracerን ይጠቀማል። በሚከተለው ትዕዛዝ የጃገርን የተጠቃሚ በይነገጽ መድረስ ይችላሉ፡


አሁን ወደ ሂድ http://localhost:16686/ እና አገልግሎት ይምረጡ sa-web-app. አገልግሎቱ በተቆልቋይ ሜኑ ውስጥ ካልታየ በገጹ ላይ እንቅስቃሴን አሳይ/አፍጠር እና በይነገጹን አዘምን። ከዚያ በኋላ አዝራሩን ጠቅ ያድርጉ ዱካ ያግኙ, ይህም በጣም የቅርብ ጊዜ ምልክቶችን ያሳያል - ማንኛውንም ይምረጡ - በሁሉም ምልክቶች ላይ ዝርዝር መረጃ ይታያል.

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1

ይህ ፈለግ የሚያሳየው፡-

  1. ጥያቄው ይመጣል istio-ingressgateway (ይህ ከአንዱ አገልግሎቶች ጋር የመጀመሪያው መስተጋብር ነው, እና ለጥያቄው የመከታተያ መታወቂያ ይፈጠራል), ከዚያ በኋላ መግቢያው ጥያቄውን ወደ አገልግሎት ይልካል. sa-web-app.
  2. በአገልግሎት ላይ sa-web-app ጥያቄው በመልእክተኛው የጎን መኪና ተወስዷል ፣ “ልጅ” በስፔን ውስጥ ተፈጠረ (ለዚያም ነው በዱካ ውስጥ የምናየው) እና ወደ መያዣው አቅጣጫ ይዛወራሉ። sa-web-app. (span - በጃገር ውስጥ አመክንዮአዊ የሥራ ክፍል ፣ ስም ያለው ፣ የቀዶ ጥገናው የመጀመሪያ ጊዜ እና የቆይታ ጊዜ። ስፓንች መክተት እና ማዘዝ ይቻላል. የተመራው አሲክሊክ የስፔን ግራፍ ዱካ ይፈጥራል። - በግምት. መተርጎም)
  3. እዚህ ጥያቄው በስልቱ ይከናወናል ስሜት ትንተና. እነዚህ ዱካዎች ቀድሞውኑ በመተግበሪያው የተፈጠሩ ናቸው, ማለትም. የኮድ ለውጦችን ጠይቀዋል.
  4. ከዚህ ቅጽበት ጀምሮ የPOST ጥያቄ ተጀምሯል። ሳ-ሎጂክ. የመከታተያ መታወቂያ ከ መተላለፍ አለበት። sa-web-app.
  5. ...

አመለከተ፦ በደረጃ 4 አፕሊኬሽኑ በኢስቲዮ የተፈጠሩትን ራስጌዎች አይቶ ለቀጣይ ጥያቄዎች ማስተላለፍ አለበት ከዚህ በታች በምስሉ ላይ እንደሚታየው።

ከኢስቲዮ ጋር ወደ ማይክሮ አገልግሎቶች ተመለስ። ክፍል 1
(ሀ) ራስጌ ማስተላለፍ የኢስቲዮ ኃላፊነት ነው; (ለ) አገልግሎቶች የራስጌዎች ኃላፊነት አለባቸው

ኢስቲዮ አብዛኛውን ስራውን የሚሰራው ምክንያቱም ለገቢ ጥያቄዎች ራስጌዎችን ያመነጫል፣ በእያንዳንዱ የጎን እንክብካቤ ውስጥ አዲስ ክፍተቶችን ይፈጥራል እና ያስተላልፋል። ነገር ግን፣ በአገልግሎቶች ውስጥ ካሉ ራስጌዎች ጋር ሳይሰሩ፣ ሙሉ የጥያቄው መከታተያ መንገድ ይጠፋል።

የሚከተሉት ራስጌዎች ግምት ውስጥ መግባት አለባቸው (የሚተላለፉ):


ይህ ቀላል ስራ ነው, ግን አተገባበሩን ለማቃለል, ቀድሞውኑ አለ ብዙ ቤተ መጻሕፍት - ለምሳሌ፣ በ sa-web-app አገልግሎት፣ የሬስትቴምፕሌት ደንበኛው በቀላሉ የጃገር እና ክፍት ትራሲንግ ቤተ-መጻሕፍትን ወደ ላይ ካከሉ እነዚህን ራስጌዎች ያስተላልፋል። የእሱ ጥገኛዎች.

የ Sentiment Analysis መተግበሪያ በ Flask፣ Spring እና ASP.NET Core ውስጥ ያሉ ትግበራዎችን እንደሚያሳይ ልብ ይበሉ።

አሁን ከሳጥኑ (ወይንም ከሳጥን ውጭ ማለት ይቻላል) ምን እያገኘን እንዳለ ግልጽ ሆኖ ሳለ፣ በጥሩ ሁኔታ ማስተካከልን፣ የኔትወርክ ትራፊክ አስተዳደርን፣ ደህንነትን እና ሌሎችንም እንይ!

ማስታወሻ. ትርጉምስለ እሱ በሚቀጥለው የቁሳቁስ ክፍል በኢስቲዮ ከ Rinor Maloku ላይ ያንብቡት ፣ ትርጉሞቹ በቅርብ ጊዜ ውስጥ በብሎጋችን ውስጥ ይከተላሉ ። አዘምን (መጋቢት 14)፡- ሁለተኛ ክፍል አስቀድሞ ታትሟል።

PS ከተርጓሚ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com