ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΏΡΠ΅Π²ΠΎΠ΄: Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΎΡ ΠΠ°Π»ΠΎ ΠΠ°Π²Π°ΡΠΎ, ΠΊΠΎΠΉΡΠΎ Π·Π°Π΅ΠΌΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡΡΠ° Π³Π»Π°Π²Π΅Π½ ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π² Π΅Π²ΡΠΎΠΏΠ΅ΠΉΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Adevinta, Π΅ ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠΈΡΠ΅Π»Π½ΠΎ βΡΠ°Π·ΡΠ»Π΅Π΄Π²Π°Π½Π΅β Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΠΌΡ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π΅ Π»Π΅ΠΊΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎ Π² ΠΏΡΠ΅Π²ΠΎΠ΄Π° ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΊΠΎΡΡΠΎ Π°Π²ΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠ²Π° Π² ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ.
ΠΠ΅Π»Π΅ΠΆΠΊΠ° ΠΎΡ Π°Π²ΡΠΎΡΠ°: ΠΡΠΈΠ»ΠΈΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ
ΠΡΠ΅Π΄ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄ΠΌΠΈΡΠΈ ΠΌΠΎΡΡ Π΅ΠΊΠΈΠΏ ΠΌΠΈΠ³ΡΠΈΡΠ° Π΅Π΄Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π° ΠΊΡΠΌ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° CI/CD, ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° Kubernetes, ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ Π΅ΠΊΡΡΡΠΈ. ΠΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π±Π΅ΡΠ΅ ΠΎΡ ΠΏΡΠΎΠ±Π΅Π½ Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ: ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ
ΠΌΠ΅ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ Π·Π° ΠΎΡΠ½ΠΎΠ²Π° ΠΈ Π΄Π° ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΠΈΠΌ ΠΎΡΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 150 ΡΡΠ»ΡΠ³ΠΈ ΠΏΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΠΌΠ΅ΡΠ΅ΡΠΈ. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π½ΡΠΊΠΎΠΈ ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π² ΠΡΠΏΠ°Π½ΠΈΡ (Infojobs, Fotocasa ΠΈ Π΄Ρ.).
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π²Π½Π΅Π΄ΡΠΈΡ ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Kubernetes ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈΡ ΠΌΠ΅ ΡΠ°ΡΡ ΠΎΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΊΡΠΌ Π½Π΅Π³ΠΎ, Π½ΠΈ ΠΎΡΠ°ΠΊΠ²Π°ΡΠ΅ ΡΡΠ΅Π²ΠΎΠΆΠ½Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π°. ΠΠ°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ (Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ) Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² Kubernetes Π±ΡΡ Π° 10 ΠΏΡΡΠΈ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² EC2. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠ΅ ΠΎΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π°ΡΠ° (ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π° ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ).
ΠΠ°ΡΠΎ Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° Π² Kubernetes, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² EC2?
ΠΠ° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΡΡΡΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ, Π½ΠΈΠ΅ ΡΡΠ±ΡΠ°Ρ
ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΠΎ ΡΠ΅Π»ΠΈΡ ΠΏΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠ°ΡΠ°ΡΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΅ ΠΏΡΠΎΡΡΠ°: API ΡΠ»ΡΠ· (Zuul) ΠΏΡΠΎΠΊΡΠΈΡΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈ Π² EC2 ΠΈΠ»ΠΈ Kubernetes. Π Kubernetes ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ NGINX Ingress Controller, Π° Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ
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 Π½Π°ΠΈΡΡΠΈΠ½Π° Π΄ΠΎΠΏΡΠΈΠ½Π°ΡΡ Π·Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ°.
Π’ΠΎΠ²Π° ΠΎΠ±Π°ΡΠ΅ Π±Π΅ΡΠ΅ ΡΡΡΠ°Π½Π½ΠΎ ΠΏΠΎ Π΄Π²Π΅ ΠΏΡΠΈΡΠΈΠ½ΠΈ:
- ΠΠ΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Kubernetes, ΠΊΠΎΠΈΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ Ρ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° AWS, Π±Π΅Π· Π΄Π° ΡΡΡΠ°Π΄Π°Ρ ΠΎΡ Π²ΠΈΡΠΎΠΊΠ° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ. ΠΠ°ΠΊΠ²Π°ΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ°, ΡΡ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π·Π° ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ.
- ΠΠ½Π°Π΅ΠΌ, ΡΠ΅ 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
) Π·Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π²
ΠΡΠΌΠ°ΡΠ΅ Π½ΠΈΡΠΎ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»Π½ΠΎ Π² DNS Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ (Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ Π½Π΅ΡΠΎ, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ). ΠΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΡΡΡΠ°Π½Π½ΠΎΡΡΠΈ Π² Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Π½Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ΅ Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ°. ΠΠΎ-Π΄ΠΎΠ»Ρ Π΅ Π΅ΠΊΡΠ°Π½Π½Π° ΡΠ½ΠΈΠΌΠΊΠ° Π½Π° Π·Π°ΡΠ½Π΅ΠΌΠ°Π½Π΅ΡΠΎ, ΠΏΠΎΠΊΠ°Π·Π²Π°ΡΠ°, ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΅ ΠΏΡΠΈΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ:
ΠΠΎΠΌΠ΅ΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π² ΠΏΡΡΠ²Π°ΡΠ° ΠΊΠΎΠ»ΠΎΠ½Π°. ΠΠ° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠ½ΠΎΡΠ° ΠΊΠΎΠ΄ΠΈΡΠ°Ρ
ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ 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
Π Π΄Π²Π΅ΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΎΡΠΊΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Π½Π°
/ # 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 ΡΠ΅ Π½Π°ΡΡΠΊΠ½Π°Ρ
ΠΌΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ
AWS SDK Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π΅Π΄Π½ΠΎ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ:
- Π‘ΡΠΎΠΊ Π½Π° Π³ΠΎΠ΄Π½ΠΎΡΡ (
Expiration
) ΠΠΎΠΏΠ°Π΄Π½Π΅ΡΠ΅ Π²EXPIRATION_THRESHOLD
, ΡΠ²ΡΡΠ΄ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ Π΄ΠΎ 15 ΠΌΠΈΠ½ΡΡΠΈ. - ΠΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΎΠΏΠΈΡ Π·Π° ΠΏΠΎΠ΄Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π΅ ΠΌΠΈΠ½Π°Π»ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΎΡ
REFRESH_THRESHOLD
, ΡΠ²ΡΡΠ΄ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ Π·Π° 60 ΠΌΠΈΠ½ΡΡΠΈ.
ΠΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½Π°ΡΠ° Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅, ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡ ΠΌΠ΅ Π³ΠΎΡΠ½ΠΈΡΠ΅ cURL ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°ΠΊΡΠΎ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ°ΠΊΠ° ΠΈ ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π½Π° EC2. Π‘ΡΠΎΠΊΡΡ Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ΅ ΠΎΠΊΠ°Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΊΡΠ°ΡΡΠΊ: ΡΠΎΡΠ½ΠΎ 15 ΠΌΠΈΠ½ΡΡΠΈ.
Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΎ ΡΡΠ°Π½Π° ΡΡΠ½ΠΎ: Π·Π° ΠΏΡΡΠ²Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π½Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° ΠΏΠΎΠ»ΡΡΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π½ΠΈ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 15 ΠΌΠΈΠ½ΡΡΠΈ, AWS SDK ΡΠ΅ ΡΠ΅ΡΠΈ Π΄Π° Π³ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°. Π ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π°ΡΠ΅ ΠΏΡΠΈ Π²ΡΡΠΊΠ° ΠΌΠΎΠ»Π±Π°.
ΠΠ°ΡΠΎ ΡΡΠΎΠΊΡΡ Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΡΠΊΡΡΠΈ?
ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° AWS ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ EC2, Π° Π½Π΅ Ρ Kubernetes. ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π½Π΅ ΠΈΡΠΊΠ°Ρ
ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅
ΠΠΠΠ Π΄ΠΎΡΡΠ°Π²Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΠΈ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ΄Ρ. Π’ΠΎΠ²Π° ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ», ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΡΡΠ΅Π΄Π½Π°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΠΏΠΎΠ΄ Π΅ ΠΏΠΎ-ΠΊΡΠ°ΡΠΊΠ° ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ EC2. Π‘ΡΠΎΠΊ Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π½Π°ΡΠ»Π°Π³Π²Π°ΡΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅Π΄Π½Π° Π²ΡΡΡ Ρ Π΄ΡΡΠ³Π°, Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΡΠΈΡΠ° ΡΠ»Π΅Π΄ 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 Π½Π°
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- Β«
3 ΠΈΡΡΠΎΡΠΈΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° Kubernetes Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ: Π°Π½ΡΠΈ-Π°ΡΠΈΠ½ΠΈΡΠ΅Ρ, Π³ΡΠ°ΡΠΈΠΎΠ·Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½Π΅, webhook Β»; - Β«
ΠΠ°ΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΈΡΠ΅ Π½Π° pod Π² Kubernetes ΠΏΡΠΈΡΠΈΠ½ΠΈΡ Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π² Grafana Labs Β»; - Β«
6 Π·Π°Π±Π°Π²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Kubernetes [ΠΈ ΡΡΡ Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅] Β»; - Β«
6 ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΡΠΎΡΠΈΠΈ ΠΎΡ Π½Π°ΡΠ΅ΡΠΎ SRE Π΅ΠΆΠ΅Π΄Π½Π΅Π²ΠΈΠ΅ ".
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com