Konteenarada, adeegaha yar yar iyo meshes adeega

Internetka farabadan maqaalada ΠΎ mesh adeega (Mesh adeega), oo waa kan mid kale. Hooray! Laakiin waa maxay sababtu? Kadib, waxaan rabaa in aan sheego ra'yigayga in ay fiicnaan lahayd haddii meshes adeegyadu ay soo baxaan 10 sano ka hor, ka hor intaanay iman goobaha weelka sida Docker iyo Kubernetes. Ma dhahayo aragtidaydu way ka fiican tahay ama ka xun tahay kuwa kale, laakiin maadaama meshes adeegyadu ay yihiin xayawaan aad u adag, aragtiyo badan ayaa kaa caawin doona inaad si fiican u fahmaan.

Waxaan ka hadli doonaa goobta dotCloud, kaas oo lagu dhisay in ka badan boqol adeeg-yar oo taageeraya kumanaan codsiyada weel lagu shubay. Waxaan sharxi doonaa caqabadaha aan kala kulanay horumarinta iyo bilaabista, iyo sida meshes-ka adeeggu uu u caawin karo (ama u awoodi waayay).

Taariikhda dotCloud

Waxaan wax ka qoray taariikhda dotCloud iyo doorashooyinka naqshadaha ee goobtan, laakiin wax badan kama hadlin lakabka shabakadda. Haddi aanad rabin inaad wax akhrido maqaalkii ugu dambeeyay ku saabsan dotCloud, waa kan dulucda oo kooban: waa PaaS platform-as-a-adeeg taas oo u oggolaanaysa macaamiisha inay socodsiiyaan codsiyo kala duwan (Java, PHP, Python...), iyadoo la taageerayo xog badan oo kala duwan. adeegyada (MongoDB, MySQL, Redis...) iyo qulqulka shaqada sida Heroku: Waxaad koodka gelisaa goobta, waxay dhistaa sawirrada weelka oo geysaa.

Waxaan kuu sheegi doonaa sida gaadiidka loogu jiheeyay goobta dotCloud. Ma aha sababtoo ah waxay ahayd mid gaar ah oo qabow (inkasta oo nidaamku si fiican u shaqeeyay waqtigiisa!), Laakiin ugu horreyntii sababtoo ah qalabka casriga ah sida naqshadeynta ayaa si sahlan loo hirgelin karaa wakhti gaaban koox dhexdhexaad ah haddii ay u baahan yihiin hab ay ku maraan taraafikada inta u dhaxaysa farabadan. Adeegyo yar yar ama tiro codsiyo ah. Sidan, waxaad is barbar dhigi kartaa xulashooyinka: waxa dhacaya haddii aad wax walba horumariso ama aad isticmaasho mesh adeega jira. Xulashada caadiga ah waa inaad adigu sameysid ama iibso.

Jidka gaadiidka ee codsiyada la marti galiyay

Codsiyada ku yaal dotCloud waxay daaha ka qaadi karaan HTTP iyo TCP barta dhamaadka.

HTTP barta dhamaadka si firfircoon loogu daray habaynta kooxda dheelitirka culayska Hipache. Tani waxay la mid tahay waxa kheyraadku sameeyo maanta Ingress gudaha Kubernetes iyo dheelli-tirka culeyska sida Traefik.

Macaamiishu waxay ku xidhaan barta dhamaadka HTTP iyada oo loo marayo xayndaabyo ku haboon, waase haddii magaca domain tilmaamayo dheelliyaasha culayska dotCloud. Wax gaar ah ma jiraan.

Qodobbada ugu dambeeya ee TCP la xidhiidha nambarka dekedda, kaas oo loo gudbiyo dhammaan weelasha ku jira xidhmadaas iyada oo loo marayo doorsoomayaasha deegaanka.

Macaamiishu waxay ku xidhi karaan dhibcaha dhamaadka TCP iyagoo isticmaalaya magaca martida loo yahay ee ku habboon (wax sida gateway-X.dotcloud.com) iyo lambarka dekedda.

Magaca martida loo yahay wuxuu xalliyaa "nats" kutlada serverka (aan la xiriirin NATS), kaas oo u marin doona isku xirka TCP ee soo galaya weelka saxda ah (ama, xaalada adeegyada culeyska isku dheelitiran, weelasha saxda ah).

Haddii aad aqoon u leedahay Kubernetes, tani waxay u badan tahay inay ku xasuusin doonto Adeegyada NodePort.

Ma jirin adeegyo u dhigma goobta dotCloud Kooxda IP: Si fudud, adeegyada si isku mid ah ayaa looga heli jiray gudaha iyo dibadda goobta.

Wax walba si fudud ayaa loo habeeyey: hirgelinta bilowga ah ee shabakadaha HTTP iyo TCP waxay u badan tahay dhowr boqol oo xariiq oo Python ah midkiiba. Algorithms-fudud (waxaan dhihi karaa naive) kuwaas oo la safeeyey markii madalku koray iyo shuruudo dheeraad ah ayaa soo muuqday.

Dib u habeyn ballaaran oo kood jira looma baahnayn. Khaas ahaan, 12 arrimood apps waxay si toos ah u isticmaali kartaa ciwaanka laga helay doorsoomayaasha deegaanka.

Sidee tani uga duwan tahay mesh adeegga casriga ah?

Xaddidan muuqasho. Ma aanan haysanin wax cabbir ah mesh-ka-wareejinta TCP gabi ahaanba. Marka ay timaaddo marin-u-socodka HTTP, noocyada dambe waxay soo bandhigeen cabbirro HTTP faahfaahsan oo leh kood qalad iyo waqtiyo jawaab-celin ah, laakiin meshes adeegga casriga ah ayaa aad uga sii fogaaday, iyagoo siinaya is-dhexgalka nidaamyada ururinta cabbirka sida Prometheus, tusaale ahaan.

Muuqalku muhiim ma aha oo kaliya marka laga eego dhinaca shaqada (si loo caawiyo xalinta arrimaha), laakiin sidoo kale marka la sii daayo sifooyin cusub. Waxay ku saabsan tahay badbaado geynta buluug-cagaaran ΠΈ keenista kanary.

Hufnaanta habaynta sidoo kale waa xaddidan yahay. Mesh-ka-wareejinta dotCloud, dhammaan taraafikada waxay ahayd inay dhex maraan koox u go'an noodhadhka dariiqa. Tani waxay ka dhigan tahay in laga yaabo in laga gudbo xuduudo badan oo AZ ah (Aagga Helitaanka) oo si weyn u kordhinaysa daahitaanka. Waxaan xusuustaa koodka cilad-raadinta ee samaynayey in ka badan boqol su'aalood SQL boggiiba oo furayay xidhiidh cusub oo server-ka SQL weydiin kasta. Markaad gudaha u socoto, boggu si dhakhso ah ayuu u shubaa, laakiin dotCloud waxay ku qaadataa dhowr ilbiriqsi si loo raro sababtoo ah xiriir kasta oo TCP ah (iyo weydiinta SQL ee xigta) waxay qaadataa tobanaan ilbiriqsi. Xaaladdan gaarka ah, isku xirnaanta joogtada ah ayaa xallisay dhibaatada.

Meshes adeegga casriga ah ayaa ku fiican wax ka qabashada dhibaatooyinkan oo kale. Marka hore, waxay hubiyaan in isku xirka la leexiyay ee isha. Socodka macquulka ah waa isku mid: ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш β†’ сСрвис, laakiin hadda meshku wuxuu u shaqeeyaa gudaha gudaha oo aan ku jirin qanjidhada fog, markaa isku xirka ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ мСш waa deegaan aadna u dheereeya (microse seconds halkii millise seconds).

Meshes adeegga casriga ah waxa kale oo ay hirgeliyaan algorithms dheellitirnaanta culayska. Marka la kormeero caafimaadka dhabarka dambe, waxay u diri karaan taraafikada badan dhabarka dambe, taasoo keentay in waxqabadka guud la hagaajiyo.

Amniga sidoo kale ka fiican. Mesh-ka marinka dotCloud ayaa gabi ahaanba ku orday EC2 Classic mana sirrin taraafikada (iyadoo lagu saleynayo mala-awaalka ah in haddii qof uu ku guulaysto inuu wax uriyo taraafikada shabakadda EC2, waxaad horeyba u haysatay dhibaato weyn). Meshes adeegga casriga ah ayaa si hufan u ilaalinaya dhammaan taraafikadayada, tusaale ahaan, hubinta TLS ee labada dhinac ah iyo sir ku xigta.

Jideynta taraafikada adeegyada boosteejada

Hagaag, waxaan ka wada hadalnay taraafikada u dhexeeya codsiyada, laakiin ka waran dotCloud platform laftiisa?

Madal lafteedu waxay ka koobnayd ilaa boqol microservices oo ka masuula hawlo kala duwan. Qaarkood waxay aqbaleen codsiyada kuwa kale, qaarna waxay ahaayeen shaqaale asal ah oo ku xidhan adeegyada kale laakiin aan aqbalin isku xidhka laftooda. Si kastaba ha noqotee, adeeg kastaa waa inuu yaqaanaa dhamaadka ciwaannada uu u baahan yahay inuu ku xidho.

Adeegyo badan oo heer sare ah ayaa laga yaabaa inay isticmaalaan mesh-ka-wareejinta ee kor lagu sheegay. Dhab ahaantii, qaar badan oo ka mid ah dotCloud in ka badan boqol microservices ayaa la geeyay codsiyo joogto ah goobta dotCloud lafteeda. Laakiin tiro yar oo adeegyo heer hoose ah (gaar ahaan kuwa hirgeliya mesh-ka-wareejinta) waxay u baahdeen wax ka fudud, oo leh ku-tiirsanaan yar (maaddaama ay ku tiirsanaan waayeen naftooda si ay u shaqeeyaan - digaag hore iyo dhibaatada ukunta).

Adeegyadan heerka hoose ah, ee muhiimka ah waxaa la geeyey weelal si toos ah ugu socda dhowr dalool oo muhiim ah. Xaaladdan oo kale, adeegyada madal caadiga ah lama isticmaalin: xiriiriye, jadwal iyo orodyahan. Haddii aad rabto in aad is barbardhigto aaladaha weel ee casriga ah, waxa ay la mid tahay in aad diyaarada kontoroolka kula socoto docker run si toos ah on noodes, halkii ay u igman hawsha Kubernetes. Waxay si qurux badan ula mid tahay fikradda qaybo taagan (pods), oo ay isticmaasho kubeadm ama bootkube marka la furayo koox kaligeed ah.

Adeegyadan waxaa loo soo bandhigay si fudud oo aan qarsoodi ahayn: faylka YAML ayaa ku taxay magacyadooda iyo cinwaanadooda; oo macmiil kastaa wuxuu ku qasbanaaday inuu koobi ka qaato faylkan YAML si loo geeyo.

Dhanka kale, waa mid aad la isku halleyn karo sababtoo ah uma baahna taageerada dukaanka furaha/qiimaha dibadda sida Zookeeper (xusuusnow, iwm. ama Qunsulka ma jirin xilligaas). Dhanka kale, way adkeyd in la raro adeegyada. Mar kasta oo la dhaqaaqo, dhammaan macaamiishu waxay heli doonaan faylka YAML oo la cusboonaysiiyay (oo ay suurtogal tahay in dib loo bilaabo). Aad uma raaxaysan!

Ka dib, waxaan bilownay inaan hirgelino nidaam cusub, halkaasoo macmiil kasta uu ku xiran yahay server-ka wakiil ee degaanka. Halkii ciwaanka iyo dekeddu ka ahaan lahayd, waxay u baahan tahay oo keliya inay ogaato lambarka dekedda ee adeegga, oo ay ku xidho iyada oo loo marayo localhost. Wakiilka degaanka ayaa gacanta ku haya xidhiidhkan oo u sii gudbiya serverka dhabta ah. Hadda, markaad u guurto dhabarka dambe ee mashiin kale ama miisaan, halkii aad cusboonaysiin lahayd dhammaan macaamiisha, waxaad u baahan tahay oo kaliya inaad cusboonaysiiso dhammaan wakiilladan maxalliga ah; iyo reboot mar dambe looma baahna.

(Waxaa sidoo kale la qorsheeyay in lagu soo koobo taraafikada isku xirka TLS oo lagu dhejiyo server kale oo wakiil ka ah dhinaca helitaanka, iyo sidoo kale in la xaqiijiyo shahaadooyinka TLS iyada oo aan ka qaybqaadaneynin adeegga helitaanka, kaas oo loo qaabeeyey inuu aqbalo isku xirka kaliya localhost. Wax badan oo arrintan ku saabsan gadaal).

Tani waxay aad ugu egtahay SmartStack Laga soo bilaabo Airbnb, laakiin farqiga weyn ayaa ah in SmartStack la hirgeliyay oo la geeyay wax soo saarka, halka nidaamka dariiqa gudaha ee dotCloud la xayiray markii dotCloud noqday Docker.

Anigu shakhsi ahaan waxaan u arkaa SmartStack inuu noqdo mid ka mid ah kuwii ka horreeyay nidaamyada sida Istio, Linkerd iyo Consul Connect sababtoo ah dhammaantood waxay raacaan qaab isku mid ah:

  • Ku samee nood kasta wakiil wakiil.
  • Macaamiishu waxay ku xidhan yihiin wakiilka
  • Diyaaradda gacanta ku haysa waxay cusboonaysiisaa qaabaynta wakiilnimada marka dhabarka dambe la beddelo.
  • ... Faa'iido!

Hirgelinta casriga ah ee mesh adeegga

Haddii aan u baahannahay inaan maanta hirgelinno shabakad isku mid ah, waxaan isticmaali karnaa mabaadi'o la mid ah. Tusaale ahaan, ku habbee aagaga DNS gudaha adiga oo ku sawiraya magacyada adeegga cinwaannada meesha bannaan 127.0.0.0/8. Ka dib ku socodsii HAProxy node kasta oo kutlada, aqbala isku xirka ciwaan kasta oo adeeg (ku jira subnet-kaas 127.0.0.0/8) iyo u jiheynta/dheellitirka culeyska xagga dambe ee ku habboon. Qaabeynta HAProxy waa la xakameyn karaa confd, oo kuu ogolaanaysa inaad ku kaydiso macluumaadka dhabarka ee etcd ama Qunsulka oo si toos ah ugu riixdo qaabeynta la cusbooneysiiyay HAProxy marka loo baahdo.

Tani waa wax aad u qurux badan sida Istio u shaqeeyo! Laakiin iyadoo ay jiraan qaar ka duwan:

  • Adeegsada Ergeyga Wakiil halkii HAProxy.
  • Waxay ku kaydisaa qaabaynta dhabarka dambe iyada oo loo sii marayo Kubernetes API beddelka etcd ama Qunsulka.
  • Adeegyada waxa loo qoondeeyay ciwaanada subnetka gudaha (Cubernetes ClusterIP addresses) halkii laga isticmaali lahaa 127.0.0.0/8.
  • Leh qayb dheeri ah (Citadel) si loogu daro xaqiijinta TLS ee labada macmiil iyo adeegayaasha.
  • Waxay taageertaa sifooyin cusub sida wareegga wareegga, baafinta la qaybiyey, geynta kanariyada, iwm.

Aynu si degdeg ah u eegno qaar ka mid ah khilaafaadka.

Ergeyga Wakiil

Ergayga Proxy waxaa qoray Lyft [Uber ee ku tartamaya suuqa tagsiga - qiyaastii. waddo]. Waxay siyaalo badan ula mid tahay wakiillada kale (tusaale HAProxy, Nginx, Traefik...), laakiin Lyft waxay qortay tooda sababtoo ah waxay u baahdeen sifooyin ay wakiillada kale ka maqan yihiin, waxayna u muuqatay mid caqli badan in la sameeyo mid cusub halkii la kordhin lahaa midka jira.

Ergeyga waa la isticmaali karaa kaligiis. Haddii aan haysto adeeg gaar ah oo u baahan in lagu xiro adeegyada kale, waxaan u habeyn karaa si aan ugu xirto Ergeyga, ka dibna si firfircoon u habeeyo oo dib u habeeyo Ergeyga oo leh goobta adeegyada kale, iyada oo la helayo hawlo badan oo dheeraad ah, sida muuqaalka. Halkii laga heli lahaa maktabad macmiil oo caado u ah ama aan ku duri lahayn raadadka wicitaanka koodka, waxaan u dirnaa taraafikada Ergayga, waxayna noo ururisaa cabbirro.

Laakin Ergeyga wuxuu kaloo awood u leeyahay inuu u shaqeeyo diyaaradda xogta (diyaaradda xogta) ee mesh adeegga. Tani waxay ka dhigan tahay in Ergeyga hadda loo habeeyey mesh adeeggan diyaarada xakamaynta (diyaaradda xakamaynta).

Diyaaradda xakamaynta

Diyaaradda xakamaynta, Istio waxay ku tiirsan tahay Kubernetes API. Tani aad ugama duwana isticmaalka confd, kaas oo ku tiirsan etcd ama Qunsulka si uu u eego furayaasha kaydka xogta. Istio waxay isticmaashaa Kubernetes API si ay u aragto agabyada Kubernetes.

Inta u dhaxaysa tan iyo ka dib: Anigu shakhsi ahaan waxan u arkay mid waxtar leh Kubernetes API sharaxaadtaasoo u dhigan:

Kubernetes API Server waa "server doqon" oo bixiya kaydinta, nuqulka, ansixinta, cusboonaysiinta, iyo semantics ilaha API.

Istio waxaa loogu talagalay inuu la shaqeeyo Kubernetes; iyo haddii aad rabto inaad u isticmaasho meel ka baxsan Kubernetes, markaa waxaad u baahan tahay inaad socodsiiso tusaale ahaan server-ka Kubernetes API (iyo adeegga cawinta iwm).

Cinwaanada adeega

Istio waxay ku tiirsan tahay ciwaannada ClusterIP ee Kubernetes u qoondeeyo, marka adeegyada Istio waxay helaan ciwaan gudaha ah (ma aha inta u dhaxaysa 127.0.0.0/8).

Taraafikada ciwaanka ClusterIP ee adeeg gaar ah oo ku jira kutlada Kubernetes oo aan lahayn Istio waxa dhexda kube-wakiil oo loo diraa dhabarka dambe ee wakiilkaas. Haddii aad xiisaynayso tafaasiisha farsamada, kube-proxy waxa uu dejiyaa xeerarka iptables (ama IPVS load balancers, iyadoo ku xidhan sida loo habeeyey) si dib loogu qoro ciwaanada IP-ga meesha loo socdo ee xidhiidhada tagaya ciwaanka ClusterIP.

Marka Istio lagu rakibo kutlada Kubernetes, waxba isma beddelayo ilaa si cad loogu oggolaado macaamilka la bixiyay, ama xitaa dhammaan magaca magaca, iyadoo la soo bandhigayo weel sidecar galay gabo caadadii. Koonteenarkani waxa uu isu rogi doonaa tusaale Ergeyga ah waxana uu dejin doonaa xeerar iptables ah si loo joojiyo gaadiidka u socda adeegyada kale iyo in taraafikadaas loo wareejiyo Ergeyga.

Marka lagu daro Kubernetes DNS, tani waxay la macno tahay in koodkayaga uu ku xidhi karo magaca adeegga wax walbana "kaliya shaqeeyaan." Si kale haddii loo dhigo, koodkayaga wuxuu soo saaraa weydiimaha sida http://api/v1/users/4242markaa api xallin codsiga 10.97.105.48, Xeerarka iptables waxay ka joojin doonaan isku xirka 10.97.105.48 waxayna u gudbin doonaan wakiilka Ergeyga maxalliga ah, iyo wakiilka maxalliga ah ayaa u gudbin doona codsiga API backend dhabta ah. Phow!

Fuuqbaxyo dheeri ah

Istio sidoo kale waxay bixisaa sirta dhamaadka-ilaa-dhamaadka iyo xaqiijinta iyada oo loo marayo mTLS (TLS) Qayb la yiraahdo khan.

Waxa kale oo jira qayb Mashiinka, kaas oo Ergaygu codsan karo mid kasta Codsiga in la sameeyo go'aan gaar ah oo ku saabsan codsigaas iyada oo ku xidhan arrimo kala duwan sida madax, culayska dhabarka, iwm... fiican sida wakiil) .

Iyo, dabcan, waxaan soo sheegnay muuqalka: Ergaygu wuxuu ururiyaa xaddi aad u badan oo cabbirro ah isagoo bixinaya baafinta qaybsan. Qaab dhismeedka microservices, haddii hal codsi API ay tahay inuu dhex maro adeegaha yar yar ee A, B, C, iyo D, ka dib marka la soo galo, baafinta la qaybiyay waxay ku dari doontaa aqoonsi gaar ah codsiga waxayna ku kaydin doontaa tilmaantan iyada oo loo marayo codsiyo hoosaadyo dhammaan adeegyadan yar yar, taas oo u oggolaanaysa dhammaan wicitaanada la xiriira in la qabto. dib u dhac, iwm.

Samee ama iibso

Istio waxay caan ku tahay inuu yahay mid adag. Taas beddelkeeda, dhisidda mesh-ka-wareejinta ee aan ku sharraxay bilawga qoraalkan waa mid fudud iyadoo la adeegsanayo aaladaha jira. Markaa, macno miyay samaynaysaa inaad abuurto mesh adeegaaga beddelka?

Haddii aan haysano baahiyo dhexdhexaad ah (uma baahnid muuqaal, jebiye wareeg ah iyo waxyaabo kale oo qarsoodi ah), ka dibna fikradaha ayaa u yimaada horumarinta qalabkeena. Laakiin haddii aan isticmaalno Kubernetes, waxaa laga yaabaa inaan xitaa loo baahnayn sababtoo ah Kubernetes waxay horeyba u siisaa qalab aasaasi ah oo loogu talagalay helitaanka adeegga iyo isu dheelitirka culeyska.

Laakiin haddii aan haysano shuruudo horumarsan, markaa "iibsashada" mesh adeeg waxay u muuqataa inay tahay ikhtiyaar aad u wanaagsan. (Tani had iyo jeer ma aha "iibsasho" sababtoo ah Istio waa il furan, laakiin waxaan wali u baahanahay inaan maalgelino wakhtiga injineernimada si aan u fahamno, u dirno, oo u maamulno.)

Miyaan doortaa Istio, Linkerd ama Consul Connect?

Ilaa hadda waxaan ka hadalnay kaliya Istio, laakiin tani maaha mesh adeega kaliya. Beddelka caanka ah - Linkerd, iyo wax ka badan Xiriirinta Qunsulka.

Maxaa la dooranayaa?

Run ahaantii, ma garanayo. Waqtigan xaadirka ah uma maleynayo nafteyda inaan karti ku filan uga jawaabo su'aashan. Waxaa jira dhowr xiiso leh maqaalada iyada oo la barbardhigo qalabkan iyo xitaa bartilmaameedyada.

Mid ka mid ah hab rajo leh ayaa ah in la isticmaalo qalab sida SuperGloo. Waxay fulisaa lakabka abstraction-ka si loo fududeeyo oo loo mideeyo API-yada ay soo bandhigeen meshes adeegga. Halkii laga baran lahaa API-yada gaarka ah (iyo, ra'yigeyga, xoogaa kakan) API-yada meshes adeegyada kala duwan, waxaan isticmaali karnaa dhismooyinka fudud ee SuperGloo - si fududna midba midka kale uga beddelo, sida haddii aan haysanno qaab qaabeyn dhexdhexaad ah oo qeexaya is-dhexgalka HTTP iyo dhabarka dambe ee awood u leh. Soo saarista qaabeynta dhabta ah ee Nginx, HAProxy, Traefik, Apache...

Waxaan wax yar ku dhejiyay Istio iyo SuperGloo, maqaalka soo socdana waxaan rabaa inaan ku tuso sida loogu daro Istio ama Linkerd koox jirta iyadoo la adeegsanayo SuperGloo, iyo sida kan dambe uu u helo shaqada, yacni, wuxuu kuu ogolaanayaa inaad ka bedesho. hal mesh adeega mid kale iyada oo aan dib loo qorin qaabaynta.

Source: www.habr.com

Add a comment