"Kubernetes wuxuu kordhiyey daahitaanka 10 jeer": yaa leh eedda tan?

Ogow. turjumiMaqaalkan, oo uu qoray Galo Navarro, oo haya jagada Maamulaha Software Engineer ee shirkadda Yurub ee Adevinta, waa "baaritaan" soo jiidasho leh oo wax ku ool ah oo ku saabsan hawlaha kaabayaasha. Ciwaanka asalka ah ayaa xoogaa la balaariyay tarjumaadda sabab uu qoruhu sharraxaad ka bixiyay bilowgiiba.

"Kubernetes wuxuu kordhiyey daahitaanka 10 jeer": yaa leh eedda tan?

Ogow qoraaga: Waxay u egtahay qoraalkan soo jiidatay Fiiro gaar ah oo ka badan intii la filayay. Weli waxaan ka xanaaqay faallooyin sheegaya in ciwaanka maqaalku yahay mid marin habaabin ah oo akhristayaasha qaar ay ka xumaadeen. Waan fahamsanahay sababaha waxa dhacaya, sidaas darteed, inkastoo khatarta ah in la burburiyo dhammaan khiyaanada, waxaan rabaa inaan isla markiiba kuu sheego waxa maqaalkani ku saabsan yahay. Waxyaabaha cajiibka ah ee aan arkay markii ay kooxuhu u haajiraan Kubernetes waa in mar kasta oo ay dhibaato timaado (sida korodhka daahitaanka ka dib socdaalka), waxa ugu horreeya ee lagu eedeeyo waa Kubernetes, laakiin markaa waxay soo baxday in orchester-ka uusan runtii ahayn eedda. Maqaalkani waxa uu ka warramayaa hal kiis oo noocaas ah. Magaceedu wuxuu ku celceliyaa qaylada mid ka mid ah horumarintayada (kadib waxaad arki doontaa in Kubernetes uusan wax shaqo ah ku lahayn). Halkan kama heli doontid wax muujinno la yaab leh oo ku saabsan Kubernetes, laakiin waxaad filan kartaa dhowr cashar oo wanaagsan oo ku saabsan nidaamyada adag.

Dhawr toddobaad ka hor, kooxdaydu waxay u haajireen hal adeeg-yar oo keliya si ay u galaan goob aasaasi ah oo ay ku jiraan CI/CD, Runtime-kubernetes-ku-saleysan, cabbiro, iyo waxyaabo kale oo wanaagsan. Talaabadan waxa ay ahayd mid tijaabo ah: waxa aanu qorshaynay in aanu u qaadano saldhig ahaan oo aanu wareejino ku dhawaad ​​150 adeegyo dheeraad ah bilaha soo socda. Dhammaantood waxay mas'uul ka yihiin hawlgalka qaar ka mid ah goobaha internetka ee ugu weyn Spain (Infojobs, Fotocasa, iwm.).

Ka dib markii aanu geynay codsiga Kubernetes oo aanu u wareejinay xoogaa taraafikada ah, yaab naxdin leh ayaa na sugayay. Dib u dhac (Latency) Codsiyada Kubernetes ayaa 10 jeer ka sarreeya kuwii EC2. Guud ahaan, waxay ahayd lagama maarmaan in xal loo helo dhibaatadan, ama laga tago socdaalka adeegga yar-yar (iyo, laga yaabo, dhammaan mashruuca).

Waa maxay sababta daahitaanku aad uga sarreeyo Kubernetes marka loo eego EC2?

Si aan u helno ciribtirka, waxaan ku soo aruurinay qiyaasaha dhammaan dariiqa codsiga. Qaab dhismeedkayadu waa sahlan yahay: API gateway (Zuul) wakiiladiisu waxay codsanayaan tusaalooyinka adeeg-yaraha ee EC2 ama Kubernetes. Kubernetes waxaan isticmaalnaa NGINX Ingress Controller, iyo dhabarka dambe waa shay caadi ah sida Bixitaan oo leh codsi JVM ah oo ku yaal madal gu'ga.

                                  EC2
                            +---------------+
                            |  +---------+  |
                            |  |         |  |
                       +-------> BACKEND |  |
                       |    |  |         |  |
                       |    |  +---------+  |                   
                       |    +---------------+
             +------+  |
Public       |      |  |
      -------> ZUUL +--+
traffic      |      |  |              Kubernetes
             +------+  |    +-----------------------------+
                       |    |  +-------+      +---------+ |
                       |    |  |       |  xx  |         | |
                       +-------> NGINX +------> BACKEND | |
                            |  |       |  xx  |         | |
                            |  +-------+      +---------+ |
                            +-----------------------------+

Dhibaatadu waxay u muuqatay inay la xidhiidho daahitaanka bilawga ah ee dhabarka (waxaan ku calaamadiyay meesha dhibka ee garaafka sida "xx"). EC2, jawaabta codsigu waxay qaadatay qiyaastii 20ms. Kubernetes gudaheeda, daahitaanka ayaa kordhay 100-200 ms.

Waxaan si degdeg ah meesha uga saarnay tuhmanayaasha suurtagalka ah ee la xiriira isbeddelka runtime. Nooca JVM waa sidiisii. Dhibaatooyinka weel dhigista sidoo kale waxba kuma laha: arjiga ayaa mar hore si guul leh ugu socday weelasha EC2. Soodejinaya? Laakiin waxaan aragnay daahitaanno sare xitaa codsi 1 ilbiriqsi kasta. Hakadka qaadista qashinka sidoo kale waa la dayacmi karaa.

Mid ka mid ah maamulayaashayada Kubernetes ayaa la yaabay haddii codsigu leeyahay ku tiirsanaansho dibadeed sababtoo ah weydiimaha DNS ayaa sababay arrimo la mid ah waqti hore.

Qiyaasta 1: xallinta magaca DNS

Codsi kasta, codsigayagu waxa uu gelayaa tusaale ahaan AWS Elasticsearch hal ilaa saddex jeer goob sida elastic.spain.adevinta.com. Gudaha weelashayada qolof baa jira, si aan u hubin karno in raadinta domain dhab ahaantii ay qaadato waqti dheer.

Weydiinta DNS ee weelka:

[root@be-851c76f696-alf8z /]# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 22 msec
;; Query time: 22 msec
;; Query time: 29 msec
;; Query time: 21 msec
;; Query time: 28 msec
;; Query time: 43 msec
;; Query time: 39 msec

Codsiyo la mid ah mid ka mid ah xaaladaha EC2 ee uu codsigu socdo:

bash-4.4# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 77 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec

Iyadoo la tixgelinayo in raadintu ay qaadatay qiyaastii 30ms, waxaa caddaatay in xallinta DNS markii la gelayay Elasticsearch ay runtii gacan ka geysatay kororka daahitaanka.

Si kastaba ha ahaatee, tani waxay ahayd mid la yaab leh laba sababood awgood:

  1. Waxaan horeyba u haysanay codsiyo badan oo Kubernetes ah kuwaas oo la falgala ilaha AWS iyaga oo aan la ildaran daahsoon sare. Sabab kasta ha ahaatee, waxay si gaar ah ula xiriirtaa kiiskan.
  2. Waxaan ognahay in JVM uu sameeyo kaydinta xusuusta gudaha ee DNS. Sawiradayada, qiimaha TTL ayaa ku qoran $JAVA_HOME/jre/lib/security/java.security oo dhigay ilaa 10 ilbiriqsi: networkaddress.cache.ttl = 10. Si kale haddii loo dhigo, JVM waa inay kaydisaa dhammaan weydiimaha DNS 10 ilbiriqsi.

Si loo xaqiijiyo mala-awaalka ugu horreeya, waxaan go'aansanay inaan joojino wacitaanka DNS in muddo ah oo aan aragno haddii dhibaatadu ay tagtay. Marka hore, waxaan go'aansanay inaan dib u habeyn ku sameyno arjiga si ay si toos ah ula xiriirto Elasticsearch ciwaanka IP-ga, halkii ay ka ahaan lahayd magac domain. Tani waxay u baahan doontaa isbeddel kood ah iyo hawlgelin cusub, marka waxaan si fudud u sawirnay domainka ciwaanka IP-ga ee gudaha /etc/hosts:

34.55.5.111 elastic.spain.adevinta.com

Hadda weelku wuxuu helay IP ku dhawaad ​​isla markiiba. Tani waxa ay keentay xoogaa horumar ah, laakiin waxa aanu inyar ku soo dhawaynay heerarka daahitaanka ee la filayo. Inkasta oo xallinta DNS ay qaadatay wakhti dheer, sababta dhabta ah ayaa wali naga baxsan.

Cilad-sheegid iyada oo loo marayo shabakad

Waxaan go'aansanay inaan ku baarno gaadiidka ka imaanaya weelka anagoo adeegsanayna tcpdumpsi aad u aragto waxa dhabta ah ee ka dhacaya shabakada:

[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap

Dabadeed dhawr codsi ayaanu dirnay oo aanu soo dejinay qabashadooda (kubectl cp my-service:/capture.pcap capture.pcap) si loo falanqeeyo Wireshark.

Ma jirin wax laga shakiyo oo ku saabsan weydiimaha DNS (marka laga reebo hal shay oo yar oo aan gadaal ka hadli doono). Laakin waxa jiray khariidado gaar ah sida adeegayagu u maareeyay codsi kasta. Hoos waxaa ku yaal sawir qaade muujinaya codsiga la aqbalay ka hor inta aysan jawaabtu bilaaban:

"Kubernetes wuxuu kordhiyey daahitaanka 10 jeer": yaa leh eedda tan?

Nambarada xirmada waxaa lagu muujiyey tiirka koowaad. Si loo caddeeyo, waxaan midabeeyay socodka TCP ee kala duwan.

Qulqulka cagaaran ee ka bilaabmaya baakidhka 328 wuxuu muujinayaa sida macmiilku (172.17.22.150) u sameeyay xidhiidhka TCP ee weelka (172.17.36.147). Gacanqaadkii hore ka dib (328-330), xirmo 331 ayaa keenay HTTP GET /v1/.. - codsi soo gelaya adeegayaga. Geedi socodka oo dhan wuxuu qaatay 1 ms.

Qulqulka cawliga ah (oo ka yimid xirmada 339) waxay tusinaysaa in adeeggayagu uu codsi HTTP u diray tusaalaha Elasticsearch (ma jiro gacan qaad TCP ah sababtoo ah waxay adeegsanaysaa xidhiidh jira). Tani waxay qaadatay 18ms.

Ilaa hadda wax walba way fiican yihiin, waqtiyaduna waxay u dhigmaan qiyaas ahaan dib u dhacyada la filayo (20-30 ms marka laga cabbiro macmiilka).

Si kastaba ha ahaatee, qaybta buluuga ah waxay qaadataa 86ms. Maxaa ka dhex jira? Baakadda 333, adeeggayaga ayaa codsi HTTP GET u diray /latest/meta-data/iam/security-credentials, oo isla markiiba ka dib, isla isku xidhka TCP, codsi kale oo GET ah /latest/meta-data/iam/security-credentials/arn:...

Waxaan ogaanay in tani ay ku soo noqnoqonayso codsi kasta inta lagu jiro raadraaca. Xallinta DNS runtii wax yar ayay ka gaabinaysaa weelashayada (Sharaxaad ku saabsan dhacdadani waa mid aad u xiiso badan, laakiin waxaan u kaydin doonaa maqaal gaar ah). Waxaa soo baxday in sababta dib u dhigista dheer ay tahay wicitaanka adeegga Metadata ee AWS ee codsi kasta.

Qiyaasta 2: wicitaanada aan loo baahnayn ee AWS

Labada bar-dhammaadka ayaa iska leh AWS Tusaalaha Metadata API. Adeegeena yar-yar ayaa adeegsada adeeggan marka ay wadaan Elasticsearch. Labada wicitaanba waa qayb ka mid ah nidaamka oggolaanshaha aasaasiga ah. Meesha ugu dambeysa ee laga galo codsiga koowaad waxay soo saartaa doorka IAM ee la xidhiidha tusaale ahaan.

/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
arn:aws:iam::<account_id>:role/some_role

Codsiga labaad wuxuu waydiinayaa barta dhamaadka labaad ogolaanshaha ku meel gaadhka ah tusaale ahaan:

/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/arn:aws:iam::<account_id>:role/some_role`
{
    "Code" : "Success",
    "LastUpdated" : "2012-04-26T16:39:16Z",
    "Type" : "AWS-HMAC",
    "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "Token" : "token",
    "Expiration" : "2017-05-17T15:09:54Z"
}

Macmiilku waxa uu u isticmaali karaa wakhti gaaban waana in uu si xilliyo ah u helo shahaado cusub (ka hor intaysan helin Expiration). Qaabku waa sahlan yahay: AWS waxay si joogta ah u beddeshaa furayaasha ku meel gaadhka ah sababo ammaan dartood, laakiin macaamiishu waxay kaydin karaan dhowr daqiiqo si ay u magdhabaan ciqaabta waxqabadka ee la xidhiidha helitaanka shahaadooyin cusub.

AWS Java SDK waa in ay la wareegto mas'uuliyadda abaabulka geeddi-socodkan, laakiin sabab qaar ka mid ah tani ma dhacayso.

Ka dib raadinta arrimaha GitHub, waxaan la kulannay dhibaato #1921. Waxay naga caawisay inaan go'aan ka gaarno jihada loo sii "qodi lahayn"

AWS SDK waxay cusbooneysiisaa shahaadooyinka marka mid ka mid ah xaaladaha soo socda ay dhacdo:

  • Taariikhda uu dhacayo (Expiration) Ku dhac EXPIRATION_THRESHOLD, hardcoded ilaa 15 daqiiqo.
  • Waqti ka badan ayaa soo maray tan iyo isku daygii ugu dambeeyay ee cusboonaysiinta shahaadooyinka REFRESH_THRESHOLD, hardcoded 60 daqiiqo.

Si aan u aragno taariikhda dhicitaanka dhabta ah ee shahaadooyinka aan helno, waxaan ka wadnay amarada sare ee CURL ee weelka iyo tusaale ahaan EC2. Muddada ansaxnimada ee shahaadada laga helay weelka ayaa noqotay mid aad uga gaaban: 15 daqiiqo oo sax ah.

Hadda wax walba way caddaayeen: codsigii ugu horreeyay, adeeggayaga ayaa helay shahaadooyin ku meel gaar ah. Maadaama ayan ansax ahayn in ka badan 15 daqiiqo, AWS SDK waxay go'aansan doontaa inay cusboonaysiiso codsi dambe. Taasina waxay ku dhacday codsi kasta.

Waa maxay sababta ay muddada ansaxinta shahaadooyinku u noqdeen kuwo gaaban?

AWS Tusaalaha Metadata waxaa loogu talagalay inay la shaqeyso xaaladaha EC2, ma aha Kubernetes. Dhanka kale, ma aanan dooneynin inaan bedelno interface interface. Taas ayaan u isticmaalnay KIAM - qalab, iyadoo la isticmaalayo wakiilada kubernetes kasta, u ogolaanaya isticmaalayaasha (injineerada u diraya codsiyada koox) inay ku meeleeyaan doorarka IAM weelasha ku jira sanduuqyada sida inay yihiin tusaaleyaal EC2. KIAM waxay ka hortagtaa wicitaanada adeega AWS Tusmada Metadata waxayna ka baartaa khasnadeeda, iyagoo hore uga helay AWS. Marka laga eego dhinaca codsiga, waxba isma beddelaan.

KIAM waxa ay siisaa shahaado-gaaban oo ay ku shubto. Tani waxay macno samaynaysaa iyadoo la tixgelinayo in celceliska cimriga boodhka uu ka gaaban yahay tusaale ahaan EC2. Muddada ansaxnimada asalka ah ee shahaadooyinka oo la mid ah isla 15 daqiiqo.

Natiijo ahaan, haddii aad labada qiyamka caadiga ah isku dulsaartaan, dhibaato ayaa soo baxaysa. Shahaado kasta oo la siiyo arjiga waxa ay dhacaysaa 15 daqiiqo ka dib. Si kastaba ha ahaatee, AWS Java SDK waxa ay ku qasbantahay cusboonaysiinta shahaado kasta oo ka hadhay 15 daqiiqo ka hor taariikhda uu dhacayo.

Natiijo ahaan, shahaadada ku meel gaadhka ah ayaa lagu qasbay in lagu cusboonaysiiyo codsi kasta, taas oo ku lug leh dhowr wicitaan oo loo diro API AWS oo sababa koror weyn oo daahsoon. Gudaha AWS Java SDK waxaan ka helnay codsi muuqaal ah, taas oo sheegaysa dhibaato la mid ah.

Xalku wuxuu noqday mid fudud. Waxa aanu si fudud dib u habayn ku samaynay KIAM si aanu u codsano shahaadooyin leh muddo ansax ah oo dheer. Mar ay tani dhacday, codsiyadu waxay bilaabeen inay qulqulaan iyada oo aan laga qaybgelin adeegga Metadata AWS, daahitaankuna wuxuu hoos ugu dhacay xitaa heerar ka hooseeya kan EC2.

natiijooyinka

Iyada oo ku saleysan waayo-aragnimadayada socdaalka, mid ka mid ah ilaha ugu badan ee dhibaatooyinka maaha kutaannada Kubernetes ama qaybaha kale ee madal. Sidoo kale kama hadlayso wax cillado aasaasi ah oo ku jira adeegaha yar-yar ee aanu wareejinayno. Dhibaatooyinku inta badan waxay soo baxaan sababtoo ah waxaynu isku dhejinnaa walxo kala duwan.

Waxaan isku darnaa nidaamyo qalafsan oo aan waligood is falgelin, anagoo fileyna in si wadajir ah ay u sameysan doonaan hal nidaam oo ka weyn. Alas, inta badan canaasiirta, qolka badan ee khaladaadka, sare entropy.

Xaaladeena, daahitaanka sare ma ahayn natiijada dhiqlaha ama go'aamada xun ee Kubernetes, KIAM, AWS Java SDK, ama adeegyadeena yar yar. Waxay ahayd natiijadii isku-darka laba goobood oo madax-bannaan oo madaxbannaan: mid ku yaal KIAM, kan kalena AWS Java SDK. Si gooni gooni ah loo soo qaatay, labaduba waxay macno samaynayaan: siyaasada cusboonaysiinta shahaadada firfircoon ee AWS Java SDK, iyo muddada gaaban ee ansaxnimada shahaadooyinka ee KAIM. Laakiin marka la isku daro, natiijadu waxay noqotaa mid aan la saadaalin karin. Laba xal oo madaxbannaan oo macquul ah maaha inay macno sameeyaan marka la isku daro.

PS ka turjumaan

Waxaad wax badan ka baran kartaa qaab dhismeedka KIAM utility ee isku dhafka AWS IAM iyo Kubernetes at maqaalkani ka abuurradeeda.

Sidoo kale ka akhri boggayaga:

Source: www.habr.com

Add a comment