Β«Kubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ забавянСто 10 ΠΏΡŠΡ‚ΠΈΒ»: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

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

Β«Kubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ забавянСто 10 ΠΏΡŠΡ‚ΠΈΒ»: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

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

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

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

Π—Π°Ρ‰ΠΎ забавянСто Π² Kubernetes Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-високо, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² EC2?

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

                                  EC2
                            +---------------+
                            |  +---------+  |
                            |  |         |  |
                       +-------< BACKEND |  |
                       |    |  |         |  |
                       |    |  +---------+  |                   
                       |    +---------------+
             +------+  |
Public       |      |  |
      -------< ZUUL +--+
traffic      |      |  |              Kubernetes
             +------+  |    +-----------------------------+
                       |    |  +-------+      +---------+ |
                       |    |  |       |  xx  |         | |
                       +------- BACKEND | |
                            |  |       |  xx  |         | |
                            |  +-------+      +---------+ |
                            +-----------------------------+

ИзглСТда, Ρ‡Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ бСшС ΡΠ²ΡŠΡ€Π·Π°Π½ със закъснСниС Π² началния Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° (ΠΎΠ·Π½Π°Ρ‡ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π°Ρ‚Π° част Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ Β«Ρ…Ρ…Β»). Π’ EC2 ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ бСшС ΠΎΠΊΠΎΠ»ΠΎ 20 мс. Π’ Kubernetes Π·Π°ΠΊΡŠΡΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ нарасна Π΄ΠΎ 100β€”200 мс.

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

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

Π₯ΠΈΠΏΠΎΡ‚Π΅Π·Π° 1: Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅Π½Π° DNS

ΠŸΡ€ΠΈ всяко Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈ ΠΎΡ‚ Π΅Π΄Π½ΠΎ Π΄ΠΎ Ρ‚Ρ€ΠΈ запитвания към инстанция Π½Π° AWS Elasticsearch Π² Π΄ΠΎΠΌΠ΅ΠΉΠ½, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° elastic.spain.adevinta.com. Π’ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠΌΠ°ΠΌΠ΅ shell, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ дСйствитСлно Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

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 мс, стана ясно, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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

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

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

Β«Kubernetes ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ забавянСто 10 ΠΏΡŠΡ‚ΠΈΒ»: ΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°?

НомСрата Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ са посочСни Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π—Π° яснота съм ΠΎΡ†Π²Π΅Ρ‚ΠΈΠ» Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ TCP ΠΏΠΎΡ‚ΠΎΡ†ΠΈ.

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

Бивият ΠΏΠΎΡ‚ΠΎΠΊ (ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ 339) ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ сСрвис Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» HTTP заявка към инстанция Π½Π° Elasticsearch (TCP Ρ€ΡŠΠΊΠΎΡΡ‚ΠΈΡΠΊΠ°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ΡΡŠΡΡ‚Π²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π΅Ρ‡Π΅ установСна Π²Ρ€ΡŠΠ·ΠΊΠ°). Π’ΠΎΠ²Π° ΠΎΡ‚Π½Π΅ 18 мс.

Π—Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈΡ‚Π΅ забавяния (20-30 мс ΠΏΡ€ΠΈ измСрвания ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).

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

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

Π₯ΠΈΠΏΠΎΡ‚Π΅Π·Π° 2: излишни повиквания към AWS

И Π΄Π²Π°Ρ‚Π° Π΅Π½Π΄ΠΏΠΎΠΉΠ½Ρ‚Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π½Π° AWS Instance Metadata API. ΠΠ°ΡˆΠΈΡΡ‚ микросСрвис ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π·ΠΈ услуга ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с 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 Instance Metadata Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с EC2 инстанции, Π° Π½Π΅ с Kubernetes. ΠžΡ‚ Π΅Π΄Π½Π° страна, Π½Π΅ искахмС Π΄Π° промСнямС интСрфСйса Π½Π° прилоТСнията. Π—Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ KIAM β€” инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‡Ρ€Π΅Π· Π°Π³Π΅Π½Ρ‚ΠΈ Π½Π° всСки възСл Π² Kubernetes позволява Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ (ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΡ‚Π΅, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Ρ‰ΠΈ прилоТСния Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°) Π΄Π° присвояват IAM Ρ€ΠΎΠ»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² pod'ΠΎΠ²Π΅, Ρ‚Π°ΠΊΠ° сякаш Ρ‚Π΅ са инстанции EC2. KIAM улавя повиквания към AWS Instance Metadata сСрвиза ΠΈ Π³ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΎΡ‚ своя кСш, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΡ‚ AWS. ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ сС промСня.

KIAM доставя краткосрочни сСртификати Π½Π° pod'ΠΎΠ²Π΅. Π’ΠΎΠ²Π° Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ срСдната ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° pod'Π° Π΅ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΠΊΠ° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π½Π° 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. Но ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ стават нСпрСдсказуСми. Π”Π²Π° нСзависими ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠΌΠ°Ρ‚ смисъл ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅.

P.S. ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° KIAM Π·Π° интСграция Π½Π° AWS IAM с Kubernetes Π² Ρ‚Π°Π·ΠΈ статия ΠΎΡ‚ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ.

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster