β€žKubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ латСнтността с 10 ΠΏΡŠΡ‚ΠΈβ€œ: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡ€Π΅Π²ΠΎΠ΄: Π’Π°Π·ΠΈ статия, написана ΠΎΡ‚ Π“Π°Π»ΠΎ Наваро, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°Π΅ΠΌΠ° позицията Π³Π»Π°Π²Π΅Π½ софтуСрСн ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π² СвропСйската компания Adevinta, Π΅ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ β€žΡ€Π°Π·ΡΠ»Π΅Π΄Π²Π°Π½Π΅β€œ Π² областта Π½Π° инфраструктурнитС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡ‚ΠΎ ΠΌΡƒ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π΅ Π»Π΅ΠΊΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΎ Π² ΠΏΡ€Π΅Π²ΠΎΠ΄Π° ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, която Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ обяснява Π² самото Π½Π°Ρ‡Π°Π»ΠΎ.

β€žKubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ латСнтността с 10 ΠΏΡŠΡ‚ΠΈβ€œ: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

Π‘Π΅Π»Π΅ΠΆΠΊΠ° ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π°: ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π° Π½Π° Ρ‚Π°Π·ΠΈ публикация ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΡ‚ ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΎΡ‚ΠΎ. ВсС ΠΎΡ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌ Π³Π½Π΅Π²Π½ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ, Ρ‡Π΅ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° статията Π΅ ΠΏΠΎΠ΄Π²Π΅ΠΆΠ΄Π°Ρ‰ΠΎ ΠΈ Ρ‡Π΅ някои Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ са Π½Π°Ρ‚ΡŠΠΆΠ΅Π½ΠΈ. Π Π°Π·Π±ΠΈΡ€Π°ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° случващото сС, Π·Π°Ρ‚ΠΎΠ²Π°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ риска Π΄Π° разваля цялата ΠΈΠ½Ρ‚Ρ€ΠΈΠ³Π°, искам Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π²ΠΈ ΠΊΠ°ΠΆΠ° Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚Π°Π·ΠΈ статия. Π›ΡŽΠ±ΠΎΠΏΠΈΡ‚Π½ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ съм Π²ΠΈΠΆΠ΄Π°Π», Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΅ΠΊΠΈΠΏΠΈΡ‚Π΅ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Ρ‚ към Kubernetes, Π΅, Ρ‡Π΅ всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ възникнС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ (ΠΊΠ°Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ забавянС слСд миграция), ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС обвинява, Π΅ Kubernetes, Π½ΠΎ слСд Ρ‚ΠΎΠ²Π° сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΎΡ€ΠΊΠ΅ΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ трябва обвинявам. Π’Π°Π·ΠΈ статия Ρ€Π°Π·ΠΊΠ°Π·Π²Π° Π·Π° Π΅Π΄ΠΈΠ½ Ρ‚Π°ΠΊΡŠΠ² случай. Π˜ΠΌΠ΅Ρ‚ΠΎ ΠΌΡƒ повтаря Π²ΡŠΠ·ΠΊΠ»ΠΈΡ†Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ (ΠΏΠΎ-късно Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ Kubernetes няма Π½ΠΈΡ‰ΠΎ ΠΎΠ±Ρ‰ΠΎ с Π½Π΅Π³ΠΎ). Π’ΡƒΠΊ няма Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°Ρ‰ΠΈ разкрития Π·Π° Kubernetes, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚Π΅ няколко Π΄ΠΎΠ±Ρ€ΠΈ ΡƒΡ€ΠΎΠΊΠ° Π·Π° слоТни систСми.

ΠŸΡ€Π΅Π΄ΠΈ няколко сСдмици моят Π΅ΠΊΠΈΠΏ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π° Π΅Π΄Π½Π° СдинствСна микроуслуга към основна ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, която Π²ΠΊΠ»ΡŽΡ‡Π²Π° CI/CD, срСда Π·Π° изпълнСниС, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Kubernetes, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Скстри. ΠŸΡ€Π΅ΠΌΠ΅ΡΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ бСшС ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π½ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€: ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ Π·Π° основа ΠΈ Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ ΠΎΡ‰Π΅ ΠΎΠΊΠΎΠ»ΠΎ 150 услуги ΠΏΡ€Π΅Π· слСдващитС мСсСци. Всички Ρ‚Π΅ отговарят Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° някои ΠΎΡ‚ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Π² Испания (Infojobs, Fotocasa ΠΈ Π΄Ρ€.).

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Kubernetes ΠΈ прСнасочихмС част ΠΎΡ‚ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° към Π½Π΅Π³ΠΎ, Π½ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π°ΡˆΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π°. Π—Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΠ΅ (латСнтност) заявкитС Π² Kubernetes бяха 10 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-високи, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² EC2. ΠšΠ°Ρ‚ΠΎ цяло бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ»ΠΈ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΈΠ»ΠΈ Π΄Π° сС ΠΎΡ‚ΠΊΠ°ΠΆΠ΅ ΠΎΡ‚ миграцията Π½Π° микроуслугата (ΠΈ, вСроятно, Π½Π° цСлия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚).

Π—Π°Ρ‰ΠΎ латСнтността Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-висока Π² Kubernetes, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² EC2?

Π—Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ тясното място, Π½ΠΈΠ΅ ΡΡŠΠ±Ρ€Π°Ρ…ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎ цСлия ΠΏΡŠΡ‚ Π½Π° заявката. ΠΠ°ΡˆΠ°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π΅ проста: API шлюз (Zuul) проксира заявки към СкзСмпляри Π½Π° микросСрвизи Π² EC2 ΠΈΠ»ΠΈ Kubernetes. Π’ Kubernetes ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ NGINX Ingress Controller, Π° Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠ²Π΅Ρ‚Π΅ са ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ внСдряванС с JVM ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Spring.

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ забавянС Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° (ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π°Ρ‚Π° област Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ "xx"). ΠŸΡ€ΠΈ EC2 ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ 20 ms. Π’ Kubernetes латСнтността сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ Π΄ΠΎ 100-200 ms.

Π‘ΡŠΡ€Π·ΠΎ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΠΈΡ…ΠΌΠ΅ вСроятнитС Π·Π°ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π½ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с промяната Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС. JVM вСрсията остава ΡΡŠΡ‰Π°Ρ‚Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с контСйнСризацията ΡΡŠΡ‰ΠΎ нямаха Π½ΠΈΡ‰ΠΎ ΠΎΠ±Ρ‰ΠΎ с Ρ‚ΠΎΠ²Π°: ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° EC2. Π—Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅? Но Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ…ΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈ закъснСния Π΄ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ 1 заявка Π² сСкунда. ΠŸΠ°ΡƒΠ·ΠΈΡ‚Π΅ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ° ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π½Π°Ρ‚ΠΈ.

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ администратори Π½Π° Kubernetes сС Ρ‡ΡƒΠ΄Π΅ΡˆΠ΅ Π΄Π°Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ° външни зависимости, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ DNS заявкитС са причинявали ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ΠΎ.

Π₯ΠΈΠΏΠΎΡ‚Π΅Π·Π° 1: Π Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡ Π½Π° DNS ΠΈΠΌΠ΅Π½Π°

Π—Π° всяка заявка Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ СкзСмпляр Π½Π° AWS Elasticsearch Π΅Π΄ΠΈΠ½ Π΄ΠΎ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ Π² Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΊΠ°Ρ‚ΠΎ elastic.spain.adevinta.com. Π’ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈΠΌΠ° Ρ‡Π΅Ρ€ΡƒΠΏΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ наистина ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

DNS заявки ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

[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

Подобни заявки ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ СкзСмпляритС Π½Π° EC2, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС изпълнява ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

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

ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ 30 ms, стана ясно, Ρ‡Π΅ Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° Π½Π° DNS ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Elasticsearch наистина допринася Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° латСнтността.

Π’ΠΎΠ²Π° ΠΎΠ±Π°Ρ‡Π΅ бСшС странно ΠΏΠΎ Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ:

  1. Π’Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ прилоТСния Π½Π° Kubernetes, ΠΊΠΎΠΈΡ‚ΠΎ взаимодСйстват с рСсурситС Π½Π° AWS, Π±Π΅Π· Π΄Π° страдат ΠΎΡ‚ висока латСнтност. ΠšΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π°, тя сС отнася ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π·Π° Ρ‚ΠΎΠ·ΠΈ случай.
  2. Π—Π½Π°Π΅ΠΌ, Ρ‡Π΅ JVM ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° DNS ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π’ Π½Π°ΡˆΠΈΡ‚Π΅ изобраТСния TTL стойността Π΅ записана $JAVA_HOME/jre/lib/security/java.security ΠΈ настройтС Π½Π° 10 сСкунди: networkaddress.cache.ttl = 10. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, JVM трябва Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π° всички DNS заявки Π·Π° 10 сСкунди.

Π—Π° Π΄Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΠΌ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ…ΠΈΠΏΠΎΡ‚Π΅Π·Π°, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° спрСм ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° DNS Π·Π° извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ ΠΈΠ·Ρ‡Π΅Π·Π½Π°Π». ΠŸΡŠΡ€Π²ΠΎ, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠΈΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ с Elasticsearch Ρ‡Ρ€Π΅Π· IP адрСс, Π° Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½. Π’ΠΎΠ²Π° Ρ‰Π΅ изисква ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° ΠΈ Π½ΠΎΠ²ΠΎ внСдряванС, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½ΠΈΠ΅ просто ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΠΈΡ…ΠΌΠ΅ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° с нСговия IP адрСс /etc/hosts:

34.55.5.111 elastic.spain.adevinta.com

Π‘Π΅Π³Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ IP ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½ΠΎ. Π’ΠΎΠ²Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ извСстно ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈΠ΅, Π½ΠΎ бяхмС само ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈΡ‚Π΅ Π½ΠΈΠ²Π° Π½Π° латСнтност. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° DNS ΠΎΡ‚Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, истинската ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° всС ΠΎΡ‰Π΅ Π½ΠΈ ΡƒΠ±ΡΠ³Π²Π°ΡˆΠ΅.

Диагностика ΠΏΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°

Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ tcpdumpΠ·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ сС случва Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°:

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ…ΠΌΠ΅ няколко заявки ΠΈ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ…ΠΌΠ΅ тСхния запис (kubectl cp my-service:/capture.pcap capture.pcap) Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π² Wireshark.

НямашС Π½ΠΈΡ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π² DNS заявкитС (с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π½Π΅Ρ‰ΠΎ, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ говоря ΠΏΠΎ-късно). Но имашС някои странности Π² Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° услуга ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΡˆΠ΅ всяка заявка. По-Π΄ΠΎΠ»Ρƒ Π΅ Π΅ΠΊΡ€Π°Π½Π½Π° снимка Π½Π° заснСманСто, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‰Π°, Ρ‡Π΅ заявката Π΅ ΠΏΡ€ΠΈΠ΅Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚:

β€žKubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ латСнтността с 10 ΠΏΡŠΡ‚ΠΈβ€œ: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

НомСрата Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ са ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π—Π° ΠΏΠΎ-голяма яснота ΠΊΠΎΠ΄ΠΈΡ€Π°Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ TCP ΠΏΠΎΡ‚ΠΎΡ†ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²Π΅.

ЗСлСният ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ с ΠΏΠ°ΠΊΠ΅Ρ‚ 328, ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ (172.17.22.150) Π΅ установил TCP Π²Ρ€ΡŠΠ·ΠΊΠ° към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (172.17.36.147). Π‘Π»Π΅Π΄ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎΡ‚ΠΎ Ρ€ΡŠΠΊΠΎΡΡ‚ΠΈΡΠΊΠ°Π½Π΅ (328-330), ΠΏΠ°ΠΊΠ΅Ρ‚ 331 бСшС донСсСн HTTP GET /v1/.. β€” входяща заявка към Π½Π°ΡˆΠ°Ρ‚Π° услуга. ЦСлият процСс ΠΎΡ‚Π½Π΅ 1 ms.

Бивият ΠΏΠΎΡ‚ΠΎΠΊ (ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ 339) ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π½Π°ΡˆΠ°Ρ‚Π° услуга Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ»Π° HTTP заявка Π΄ΠΎ СкзСмпляра Π½Π° Elasticsearch (няма TCP Ρ€ΡŠΠΊΠΎΡΡ‚ΠΈΡΠΊΠ°Π½Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° Π²Ρ€ΡŠΠ·ΠΊΠ°). Π’ΠΎΠ²Π° ΠΎΡ‚Π½Π΅ 18ms.

ЗасСга всичко Π΅ Π½Π°Ρ€Π΅Π΄ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π°Ρ‚Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ отговарят Π½Π° ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈΡ‚Π΅ закъснСния (20-30 ms ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).

Бинята сСкция ΠΎΠ±Π°Ρ‡Π΅ ΠΎΡ‚Π½Π΅ΠΌΠ° 86ms. Какво сС случва Π² Π½Π΅Π³ΠΎ? Π‘ ΠΏΠ°ΠΊΠ΅Ρ‚ 333 Π½Π°ΡˆΠ°Ρ‚Π° услуга ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ HTTP GET заявка Π΄ΠΎ /latest/meta-data/iam/security-credentialsΠΈ Π²Π΅Π΄Π½Π°Π³Π° слСд Π½Π΅Π³ΠΎ, ΠΏΡ€Π΅Π· ΡΡŠΡ‰Π°Ρ‚Π° TCP Π²Ρ€ΡŠΠ·ΠΊΠ°, Π΄Ρ€ΡƒΠ³Π° GET заявка към /latest/meta-data/iam/security-credentials/arn:...

УстановихмС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° сС повтаря с всяка заявка ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° прослСдяванСто. DNS Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΡΡ‚Π° наистина Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±Π°Π²Π½Π° Π² Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (обяснСниСто Π·Π° Ρ‚ΠΎΠ²Π° явлСниС Π΅ доста интСрСсно, Π½ΠΎ Ρ‰Π΅ Π³ΠΎ запазя Π·Π° ΠΎΡ‚Π΄Π΅Π»Π½Π° статия). Оказа сС, Ρ‡Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° Π΄ΡŠΠ»Π³ΠΈΡ‚Π΅ закъснСния са обаТдания към услугата AWS Instance Metadata ΠΏΡ€ΠΈ всяка заявка.

Π₯ΠΈΠΏΠΎΡ‚Π΅Π·Π° 2: Π½Π΅Π½ΡƒΠΆΠ½ΠΈ извиквания към AWS

И Π΄Π²Π΅Ρ‚Π΅ ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½Π° API Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° СкзСмпляр Π½Π° AWS. ΠΠ°ΡˆΠ°Ρ‚Π° микроуслуга ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ услуга, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ изпълнява Elasticsearch. И Π΄Π²Π΅Ρ‚Π΅ обаТдания са част ΠΎΡ‚ основния процСс Π½Π° оторизация. ΠšΡ€Π°ΠΉΠ½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ°, Π΄ΠΎ която сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π° заявка, ΠΈΠ·Π΄Π°Π²Π° IAM ролята, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с СкзСмпляра.

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

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° заявка ΠΏΠΈΡ‚Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Ρ‚ΠΎΠ·ΠΈ СкзСмпляр:

/ # 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"
}

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ трябва ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π½ΠΎΠ²ΠΈ сСртификати (ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Expiration). ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Π΅ прост: AWS Ρ€ΠΎΡ‚ΠΈΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ чСсто ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π·Π° сигурност, Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π³ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚ Π·Π° няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π·Π° Π΄Π° компСнсират нСустойката Π² производитСлността, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ сСртификати.

AWS Java SDK трябва Π΄Π° ΠΏΠΎΠ΅ΠΌΠ΅ отговорността Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ процСс, Π½ΠΎ ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚ΠΎΠ²Π° Π½Π΅ сС случва.

Π‘Π»Π΅Π΄ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² GitHub сС Π½Π°Ρ‚ΡŠΠΊΠ½Π°Ρ…ΠΌΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ #1921. Вя Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ посоката, Π² която Π΄Π° β€žΠΊΠΎΠΏΠ°Π΅ΠΌβ€ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

AWS SDK Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° сСртификати, ΠΊΠΎΠ³Π°Ρ‚ΠΎ възникнС Π΅Π΄Π½ΠΎ ΠΎΡ‚ слСднитС условия:

  • Π‘Ρ€ΠΎΠΊ Π½Π° годност (Expiration) ΠŸΠΎΠΏΠ°Π΄Π½Π΅Ρ‚Π΅ Π² EXPIRATION_THRESHOLD, Ρ‚Π²ΡŠΡ€Π΄ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ Π΄ΠΎ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.
  • ΠžΡ‚ послСдния ΠΎΠΏΠΈΡ‚ Π·Π° подновяванС Π½Π° сСртификати Π΅ ΠΌΠΈΠ½Π°Π»ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚ REFRESH_THRESHOLD, Ρ‚Π²ΡŠΡ€Π΄ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ Π·Π° 60 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.

Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ дСйствитСлната Π΄Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° сСртификатитС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅, ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ cURL ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊΠ° ΠΈ ΠΎΡ‚ СкзСмпляра Π½Π° EC2. Π‘Ρ€ΠΎΠΊΡŠΡ‚ Π½Π° валидност Π½Π° сСртификата, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, сС ΠΎΠΊΠ°Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ: Ρ‚ΠΎΡ‡Π½ΠΎ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.

Π‘Π΅Π³Π° всичко стана ясно: Π·Π° ΠΏΡŠΡ€Π²Π°Ρ‚Π° заявка Π½Π°ΡˆΠ°Ρ‚Π° услуга ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ сСртификати. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π½Π΅ са Π±ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΈ Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, AWS SDK Ρ‰Π΅ Ρ€Π΅ΡˆΠΈ Π΄Π° Π³ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΡ€ΠΈ послСдваща заявка. И Ρ‚ΠΎΠ²Π° сС ΡΠ»ΡƒΡ‡Π²Π°ΡˆΠ΅ ΠΏΡ€ΠΈ всяка ΠΌΠΎΠ»Π±Π°.

Π—Π°Ρ‰ΠΎ ΡΡ€ΠΎΠΊΡŠΡ‚ Π½Π° валидност Π½Π° сСртификатитС сС скъси?

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° СкзСмпляри Π½Π° AWS са ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΈ Π΄Π° работят с СкзСмпляри EC2, Π° Π½Π΅ с Kubernetes. ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Π½Π΅ искахмС Π΄Π° промСнямС интСрфСйса Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π—Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ КИАМ - инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π°Π³Π΅Π½Ρ‚ΠΈ Π½Π° всСки Kubernetes възСл, позволява Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ (ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ, внСдряващи прилоТСния Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€) Π΄Π° присвояват IAM Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² pods, сякаш са EC2 инстанции. KIAM ΠΏΡ€ΠΈΡ…Π²Π°Ρ‰Π° обаТданията към услугата AWS Instance Metadata ΠΈ Π³ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΎΡ‚ своя кСш, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π³ΠΈ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΡ‚ AWS. ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ сС промСня.

КИАМ доставя краткосрочни удостовСрСния Π½Π° подс. Π’ΠΎΠ²Π° ΠΈΠΌΠ° смисъл, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ срСдната ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° ΠΏΠΎΠ΄ Π΅ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΠΊΠ° ΠΎΡ‚ СкзСмпляр EC2. Π‘Ρ€ΠΎΠΊ Π½Π° валидност ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° сСртификати Ρ€Π°Π²Π½ΠΎ Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ наслагватС ΠΈ Π΄Π²Π΅Ρ‚Π΅ стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅Π΄Π½Π° Π²ΡŠΡ€Ρ…Ρƒ Π΄Ρ€ΡƒΠ³Π°, възниква ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ВсСки сСртификат, прСдоставСн Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·Ρ‚ΠΈΡ‡Π° слСд 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° AWS Java SDK ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° подновяванС Π½Π° всСки сСртификат, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ остават ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 15 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° врСмСнният сСртификат Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ Π΄Π° сС подновява с всяка заявка, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ няколко извиквания към AWS API ΠΈ причинява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° латСнтността. Π’ AWS Java SDK ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅ заявка Π·Π° функция, ΠΊΠΎΠΉΡ‚ΠΎ спомСнава ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΎΠΊΠ°Π·Π° просто. НиС просто ΠΏΡ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ KIAM Π΄Π° изисква сСртификати с ΠΏΠΎ-дълъг ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° валидност. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° сС случи, заявкитС Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…Π° Π΄Π° Ρ‚Π΅ΠΊΠ°Ρ‚ Π±Π΅Π· участиСто Π½Π° услугата AWS Metadata ΠΈ латСнтността спадна Π΄ΠΎ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ-ниски Π½ΠΈΠ²Π°, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² EC2.

Π”Π°Π½Π½ΠΈ

Π’ΡŠΠ· основа Π½Π° нашия ΠΎΠΏΠΈΡ‚ с ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-чСститС ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π΅ са Π³Ρ€Π΅ΡˆΠΊΠΈ Π² Kubernetes ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π’ΠΎΠΉ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ адрСсира Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ основни Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π² микроуслугитС, ΠΊΠΎΠΈΡ‚ΠΎ прСнасямС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ чСсто Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ просто Π·Π°Ρ‰ΠΎΡ‚ΠΎ сглобявамС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ.

БмСсвамС Π·Π°Π΅Π΄Π½ΠΎ слоТни систСми, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° ΠΏΡ€Π΅Π΄ΠΈ Π½Π΅ са взаимодСйствали ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΉΠΊΠΈ, Ρ‡Π΅ Π·Π°Π΅Π΄Π½ΠΎ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π΅Π΄Π½Π° ΠΏΠΎ-голяма систСма. Π£Π²ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ място Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-висока Π΅ Снтропията.

Π’ нашия случай високото забавянС Π½Π΅ Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠ»ΠΈ лоши Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² Kubernetes, KIAM, AWS Java SDK ΠΈΠ»ΠΈ Π½Π°ΡˆΠ°Ρ‚Π° микроуслуга. Π’ΠΎΠ²Π° бСшС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π²Π΅ нСзависими настройки ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: Π΅Π΄Π½Π°Ρ‚Π° Π² KIAM, Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° Π² AWS Java SDK. Π’Π·Π΅Ρ‚ΠΈ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, ΠΈ Π΄Π²Π°Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° ΠΈΠΌΠ°Ρ‚ смисъл: Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° подновяванС Π½Π° сСртификати Π² AWS Java SDK ΠΈ краткият ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π° валидност Π½Π° сСртификатитС Π² KAIM. Но ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΈ ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ стават Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΈ. Π”Π²Π΅ нСзависими ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ смисъл, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚.

PS ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° KIAM Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° AWS IAM с Kubernetes Π½Π° Ρ‚Π°Π·ΠΈ статия ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€