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

Ogow. turjumiMaqaalkan, oo uu qoray Galo Navarro, Maamulaha Software Engineer ee shirkadda Yurub Adevinta, waa "baaritaan" soo jiidasho leh oo wax ku oolka ah oo ku saabsan hawlaha kaabayaasha. Ciwaanka asalka ah ayaa waxyar laga beddelay tarjumaadda sababta uu qoraagu u sharraxay bilowga hore.

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

Ogow qoraaga: Waxay u egtahay daabacaadan soo jiidatay Maqaalkani waxa uu helay dareen aad uga badan intii la filayay. Weli waxaan ka helaa faallooyin xanaaq badan oo ku saabsan cinwaanka marin-habaabinta iyo akhristayaasha qaarkood oo xanaaqsan. Waan fahmay sababaha tan, markaa khatarta ah in aan kharribo sheekada oo dhan, waxaan rabaa in aan sharaxo waxa maqaalkani ku saabsan yahay. Marka kooxuhu u haajiraan Kubernetes, waxaan eegayaa shay cajiib ah: mar kasta oo dhibaato soo baxdo (tusaale ahaan, daahitaanka korodhka ka dib socdaalka), waxa ugu horreeya ee ay ku eedeeyaan waa Kubernetes, laakiin waxay soo baxday in orchester-ka uusan dhab ahaantii eedayn. Maqaalkani waxa uu ku saabsan yahay hal kiis oo noocaas ah. Cinwaankeedu waxa uu ku nuuxnuuxsaday qaylo-dhaan ka timid mid ka mid ah horumariyeyaasheena (waxaad arki doontaa marka dambe in Kubernetes aanu waxba ku lahayn). Ma heli doontid wax muujinno la yaab leh oo ku saabsan Kubernetes, laakiin waxaad ku xisaabtami 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, deegaan wax-soo-saar ku salaysan Kubernetes, cabbirro, iyo astaamo kale oo faa'iido leh. Kani waxa uu ahaa mashruuc tijaabo ah: waxa aanu qorshaynay in aanu ku dhisno oo aanu u haajiro ku dhawaad ​​150 adeeg oo dheeraad ah bilaha soo socda. Dhammaan adeegyadan ayaa awood u leh qaar ka mid ah suuqyada internetka ee Spain ugu weyn (Infojobs, Fotocasa, iyo kuwa kale).

Ka dib markii aanu geynay codsiga Kubernetes oo aanu u wareejinay xoogaa taraafikada ah, waxa na soo food saartay yaab naxdin leh. Latency (Latency) Tirada codsiyada Kubernetes waxay 10 jeer ka badan tahay ta EC2. Ugu dambayntii, waxa lagama maarmaan noqotay in xal loo helo dhibaatadan ama la iska dhaafo socdaalka adeega-yar (iyo, suurtogal ahaan, mashruuca oo dhan).

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 oo nooca ah. Bixitaan oo leh codsi JVM ah oo ku yaal madal gu'ga.

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

Arrintu waxay u muuqatay inay la xiriirto daahitaanka marxaladda hore ee habaynta dhabarka (waxaan ku calaamadiyay meesha dhibka ee garaafka sida "xx"). EC2, jawaabta codsigu waxay qaadatay ilaa 20 ms. 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-gu wuxuu ahaan jiray sidii hore. Arrimaha weelasha sidoo kale lama xiriirin: arjiga mar hore ayuu si guul leh ugu socday weelasha EC2. Xambaarsan? Laakiin waxaan ku aragnay daahitaanno sare xitaa hal codsi ilbiriqsikii. Hakad qaadistii qashinka ayaa sidoo kale ahaa mid dayacan.

Mid ka mid ah maamulayaashayada Kubernetes ayaa waydiiyay haddii codsigu leeyahay wax ku tiirsanaanta dibadeed, maadaama weydiimaha DNS ay hore u keeneen arrimo la mid ah.

Qiyaasta 1: xallinta magaca DNS

Codsi kasta, codsigayagu wuxuu sameeyaa hal ilaa saddex wicitaan oo ku saabsan tusaale ahaan AWS Elasticsearch ee goob sida elastic.spain.adevinta.comGudaha weelasha ayaanu ku haynaa qolof baa jira, si aan u hubin karno haddii raadinta domainka ay runtii 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 socodsiinaya codsiga:

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

Marka la eego in eegiddu ay qaadato qiyaastii 30ms, waxay caddaatay in xallinta DNS markii la gelayay Elasticsearch ay runtii gacan ka geysatay daahitaanka sii kordhaya.

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

  1. Waxaan horey u haysanay barnaamijyo badan oo Kubernetes ah kuwaas oo la falgala ilaha AWS iyaga oo aan la kulmin daahitaan weyn. Sabab kasta ha ahaatee, waxay gaar u tahay kiiskan gaarka ah.
  2. Waxaan ognahay in JVM ay hirgeliso kaydinta xusuusta gudaha ee DNS. Sawiradayada, qiimaha TTL waa mid adag $JAVA_HOME/jre/lib/security/java.security oo dhigay ilaa 10 ilbiriqsi: networkaddress.cache.ttl = 10Si kale haddii loo dhigo, JVM waa inay kaydisaa dhammaan weydiimaha DNS 10 ilbiriqsi.

Si loo xaqiijiyo mala-awaalka ugu horreeya, waxaan go'aansannay inaan si ku-meel-gaar ah u joojino raadinta DNS oo aan aragno haddii dhibaatadu ay xallin doonto. Marka hore, waxaan tixgelinay dib u habeynta arjiga si aan ula xiriirno Elasticsearch si toos ah iyada oo loo sii marayo ciwaanka IP-ga halkii aan ka ahayn magac domain. Tani waxay u baahan lahayd 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

Weelku hadda wuxuu helay ciwaanka IP-ga isla markiiba. Tani waxa ay keentay xoogaa horumar ah, laakiin waxa aanu inyar ku soo dhawaynay heerka daahitaanka la filayo. In kasta oo xallinta DNS ay qaadatay waqti dheer, sababta dhabta ah ayaa wali naga gaabisay.

Baarista shabakada

Waxaan go'aansanay inaan baarno gaadiidka ka imaanaya weelka anagoo adeegsanayna tcpdumpsi loola socdo waxa dhabta ah ee ka dhacaya shabakada:

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

Kadib codsiyo 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 faahfaahin yar oo aan gadaal ka hadli doono). Si kastaba ha ahaatee, waxa jiray waxoogaa khariidad ah sida adeegayagu u habeeyey codsi kasta. Hoos waxaa ah sawir qaade oo 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 iftiimiyay durdurrada TCP ee kala duwan ee midabka.

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). Gacan qaadkii hore ka dib (328-330), baakidh 331 ayaa keenay HTTP GET /v1/.. - codsi soo gelaya adeegayaga. Geedi socodka oo dhan wuxuu qaatay 1 ms.

Qulqulka cawlan (laga bilaabo xirmada 339) waxay tusinaysaa in adeegayagu u diray codsi HTTP tusaale ahaan Elasticsearch (ma jiro gacan qaad TCP sababtoo ah waxay isticmaashaa xidhiidh jira). Tani waxay qaadatay 18 ms.

Ilaa hadda wax walba way fiican yihiin, waqtiyaduna waxay ku dhow yihiin inay la socdaan dib u dhacyada la filayo (20-30 ms marka laga cabbiro macmiilka).

Si kastaba ha ahaatee, qaybta buluuga ah waxay qaadataa 86 ms. Maxaa halkaas ka socda? Baakadda 333, adeeggaygu wuxuu u diray codsi HTTP GET ah /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 waafaqsan tahay codsi kasta inta lagu jiro raadraaca. Xallinta DNS runtii waxyar bay ka yara gaabisay weelashayada (sharaxaadda dhacdadani waa mid aad u xiiso badan, laakiin waxaan u kaydin doonaa maqaal gaar ah). Waxaa soo baxday in daahitaannada waaweyn ay sababeen wicitaannada adeegga Metadata ee AWS ee codsi kasta.

Qiyaasta 2: Wicitaannada xad dhaafka ah ee AWS

Labada geesoodba waa iska leh AWS Tusaalaha Metadata APIAdeegeena yar-yar ayaa adeegsada adeeggan marka ay la shaqaynayso Elasticsearch. Labada wicitaanba waa qayb ka mid ah nidaamka oggolaanshaha aasaasiga ah. Meesha ugu dambeysa ee la galo inta lagu guda jiro codsiga hore waxay soo saartaa doorka IAM ee la xidhiidha tusaalaha.

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

Codsiga labaad wuxuu la xidhiidhaa barta labaad ee oggolaanshaha 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 shahaadooyin cusub (ilaa ay ka dhacayaan). 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 dhawr daqiiqadood si ay u dhaafaan 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 markaan ka raadinay arrimaha GitHub, waxaan la kulannay dhibaato #1921Waxay naga caawisay inaan go'aan ka gaarno jihada aan u sii qodeyno.

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

  • Taariikhda dhicitaankoodaExpiration) galo EXPIRATION_THRESHOLD, adag-coded ilaa 15 daqiiqo.
  • Waxay ahayd wakhti ka badan tan iyo isku daygii ugu dambeeyay ee cusboonaysiinta shahaadooyinka REFRESH_THRESHOLD, hardcoded 60 daqiiqo.

Si loo arko taariikhda dhicitaanka dhabta ah ee shahaadooyinka aanu qaadanaynay, waxaanu amarrada sare ee cURL ka wadnay weelka iyo tusaalaha EC2 labadaba. Shahaadada laga helay weelka waxay lahayd taariikh dhicis aad uga gaaban: 15 daqiiqo oo sax ah.

Hadda wax walbaa way caddaayeen: codsigii ugu horreeyay, adeeggayagu wuxuu helayay shahaadooyin ku meel gaar ah. Maadaama taariikhda uu dhacayo ay ku koobnayd 15 daqiiqo, AWS SDK waxay dib u cusbooneysiin doontaa codsiyada xiga. Taasina waxay ku dhacday codsi kasta.

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

Adeegga Tusaha Metadata ee AWS waxaa loogu talagalay inuu la shaqeeyo tusaaleyaasha EC2, ma aha Kubernetes. Dhanka kale, ma aanan dooneynin inaan bedelno interface interface. Si taas loo gaaro, waxaan isticmaalnay KIAM - qalab, iyadoo la isticmaalayo wakiilada kubernetes kasta, u ogolaanaya isticmaalayaasha (injineerada u diraya codsiyada kooxda) 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 loo eego arjiga, waxba isma beddelayo.

KIAM waxa ay siisaa shahaado-gaaban oo ay ku shubto. Tani waxay macno samaynaysaa marka la eego in celceliska cimriga boodhka uu ka gaaban yahay ta tusaale ahaan EC2. Sida caadiga ah, shahaadooyinku way dhacayaan waxay la mid tahay 15 daqiiqo.

Ugu dambeyntii, isku-darka labadan cillad ayaa abuureysa dhibaato. Shahaado kasta oo la siiyo arjiga waxa ay dhacaysaa 15 daqiiqo ka dib. AWS Java SDK waxay xooga saaraysaa cusboonaysiinta shahaado kasta oo ay ka hadhsan tahay in ka yar 15 daqiiqo ilaa ay dhacayso.

Natiijo ahaan, shahaadada ku meel gaadhka ah ayaa lagu qasbay inay dib u cusboonaysiiso codsi kasta, taas oo keenaysa wicitaano dhowr ah oo loo diro AWS API oo si weyn u kordhiya daahitaanka. Waxaan tan ku ogaanay AWS Java SDK. 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 wakhtiyo ansax ah oo dheer. Marka tani dhacdo, codsiyadu waxay bilaabeen inay sii socdaan la'aanteed adeegga AWS Metadata, iyo daahitaanku wuxuu hoos ugu dhacay heerar xitaa ka hooseeya 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 lama xidhiidho cilladaha aasaasiga ah ee adeegyada yar yar ee aynu u haajirayno. Dhibaatooyinku inta badan waxay soo baxaan sababtoo ah waxaynu isku dhejinnaa walxo kala duwan.

Waxaan isku darnaa habab adag oo aan waligood is falgelin, anagoo fileyno inay sameeyaan hal nidaam oo ka weyn. Nasiib darro, inta badan curiyeyaasha, way weyn tahay suurtagalnimada qaladka iyo sare u kaca entropy.

Xaaladeena, daahitaanka sare ma ahayn natiijada dhiqlaha ama go'aamada liita ee Kubernetes, KIAM, AWS Java SDK, ama adeegyadeena yar yar. Waxay ahayd natiijada laba goobood oo madax-bannaan oo madax-bannaan: mid KIAM ah iyo mid AWS Java SDK ah. Shakhsi ahaan, labada gooboodba macno ayay samaynayaan: siyaasadda cusboonaysiinta shahaadada firfircoon ee AWS Java SDK iyo wakhtiga shahaado gaaban ee wakhtiga dhicitaanka ee KAIM. Laakiin marka la isku daro, natiijadu waxay noqotaa mid aan la saadaalin karin. Laba xal oo madax-bannaan oo macquul ah qasab maaha inay macno samaynayaan marka la isku daro.

PS ka turjumaan

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

Iyo blog-keena, waxaad sidoo kale ka akhrisan kartaa:

Source: www.habr.com

U soo iibso martigelin lagu kalsoonaan karo oo loogu talagalay bogagga leh ilaalinta DDoS, VPS VDS servers 🔥 Iibso martigelin degel oo lagu kalsoonaan karo oo leh ilaalinta DDoS, VPS VDS servers | ProHoster