ΠΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².: ΠΡΠ° ΡΡΠ°ΡΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Galo Navarro, ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡΡ Principal Software Engineer Π² Π΅Π²ΡΠΎΠΏΠ΅ΠΉΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Adevinta, β ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Β«ΡΠ°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. ΠΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ Π°Π²ΡΠΎΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎΡ Π°Π²ΡΠΎΡΠ°: ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ
ΠΠ°ΡΡ Π½Π΅Π΄Π΅Π»Ρ Π½Π°Π·Π°Π΄ ΠΌΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π½ΠΈΠΌΠ°Π»Π°ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ CI/CD, ΡΠ°Π±ΠΎΡΡΡ ΡΡΠ΅Π΄Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Kubernetes, ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ. ΠΠ΅ΡΠ΅Π΅Π·Π΄ Π½ΠΎΡΠΈΠ» ΠΏΡΠΎΠ±Π½ΡΠΉ Ρ
Π°ΡΠ°ΠΊΡΠ΅Ρ: ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»ΠΈ Π²Π·ΡΡΡ Π΅Π³ΠΎ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 150 ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ ΠΌΠ΅ΡΡΡΡ. ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΈΠ· ΠΊΡΡΠΏΠ½Π΅ΠΉΡΠΈΡ
ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠ»ΠΎΡΠ°Π΄ΠΎΠΊ ΠΡΠΏΠ°Π½ΠΈΠΈ (Infojobs, Fotocasa ΠΈ Π΄Ρ.).
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Kubernetes ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π½Π° Π½Π΅Π³ΠΎ ΡΠ°ΡΡΡ ΡΡΠ°ΡΠΈΠΊΠ°, Π½Π°Ρ ΠΏΠΎΠ΄ΠΆΠΈΠ΄Π°Π» ΡΡΠ΅Π²ΠΎΠΆΠ½ΡΠΉ ΡΡΡΠΏΡΠΈΠ·. ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° (latency) Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Kubernetes Π±ΡΠ»Π° Π² 10 ΡΠ°Π· Π²ΡΡΠ΅, ΡΠ΅ΠΌ Π² EC2. Π ΠΎΠ±ΡΠ΅ΠΌ, Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π»ΠΈΠ±ΠΎ ΠΎΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΎΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°).
ΠΠΎΡΠ΅ΠΌΡ Π² Kubernetes Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Π² EC2?
Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠ·ΠΊΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΌΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π° Π²ΡΠ΅ΠΌ ΠΏΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ°ΡΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΎΡΡΠ°: API-ΡΠ»ΡΠ· (Zuul) ΠΏΡΠΎΠΊΡΠΈΡΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Π² EC2 ΠΈΠ»ΠΈ Kubernetes. Π Kubernetes ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ NGINX Ingress Π‘ontroller, Π° Π±ΡΠΊΠ΅Π½Π΄Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ°
EC2
+---------------+
| +---------+ |
| | | |
+-------> BACKEND | |
| | | | |
| | +---------+ |
| +---------------+
+------+ |
Public | | |
-------> ZUUL +--+
traffic | | | Kubernetes
+------+ | +-----------------------------+
| | +-------+ +---------+ |
| | | | xx | | |
+-------> NGINX +------> BACKEND | |
| | | xx | | |
| +-------+ +---------+ |
+-----------------------------+
ΠΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²ΡΠ·Π°Π½Π° Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π±ΠΎΡΡ Π² Π±ΡΠΊΠ΅Π½Π΄Π΅ (Ρ ΠΏΠΎΠΌΠ΅ΡΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ΅ ΠΊΠ°ΠΊ Β«Ρ Ρ Β»). Π EC2 ΠΎΡΠ²Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π» ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΌΡ. Π Kubernetes Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π»Π° Π΄ΠΎ 100β200 ΠΌΡ.
ΠΡ Π±ΡΡΡΡΠΎ ΠΎΡΠ±ΡΠΎΡΠΈΠ»ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΡΡ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Π΅ΠΌΡΡ , ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΎ ΡΠΌΠ΅Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΅ΡΡΠΈΡ 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 ΠΌΡ, ΡΡΠ°Π»ΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ DNS ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Elasticsearch Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ Π²ΠΊΠ»Π°Π΄ Π² Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½Π½ΠΎ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
- Π£ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΌΠ°ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Kubernetes, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ AWS, Π½ΠΎ Π½Π΅ ΡΡΡΠ°Π΄Π°ΡΡ ΠΎΡ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ. ΠΠ°ΠΊΠΎΠΉ Π±Ρ Π½ΠΈ Π±ΡΠ»Π° ΠΏΡΠΈΡΠΈΠ½Π°, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΊ ΡΡΠΎΠΌΡ ΡΠ»ΡΡΠ°Ρ.
- ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ JVM ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ in-memory-ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ 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
) Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π²
Π DNS-Π·Π°ΠΏΡΠΎΡΠ°Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ (ΠΊΡΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Π»ΠΎΡΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΠΎΠ·ΠΆΠ΅). ΠΠΎ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠ°Π½Π½ΠΎΡΡΠΈ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π» ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΊΡΠΈΠ½ΡΠΎΡ capture’Π°, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΠΎΡΠ²Π΅ΡΠ°:
ΠΠΎΠΌΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ΅. ΠΠ»Ρ ΡΡΠ½ΠΎΡΡΠΈ Ρ Π²ΡΠ΄Π΅Π»ΠΈΠ» ΡΠ²Π΅ΡΠΎΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ 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
ΠΠ±Π° endpoint’Π° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
arn:aws:iam::<account_id>:role/some_role
ΠΡΠΎΡΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ endpoint’Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΡΠΌΠΈ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°:
/ # 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 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π° ΡΠ΅Π±Ρ Π²Π·ΡΡΡ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΡΠΎΠ²Π΅Π΄Ρ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ issues Π½Π° GitHub, ΠΌΡ Π½Π°ΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
AWS SDK ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
- Π‘ΡΠΎΠΊ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (
Expiration
) ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π²EXPIRATION_THRESHOLD
, ΠΆΠ΅ΡΡΠΊΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΠΊΠΎΠ΄Π΅ Π½Π° 15 ΠΌΠΈΠ½ΡΡ. - Π‘ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ
REFRESH_THRESHOLD
, Π·Π°’hardcode’Π΅Π½Π½ΡΠΉ Π½Π° 60 ΠΌΠΈΠ½ΡΡ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΎΠΊ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΡ Π½Π°ΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ², ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ cURL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° EC2. ΠΡΠ΅ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΊΠΎΡΠΎΡΠ΅: ΡΠΎΠ²Π½ΠΎ 15 ΠΌΠΈΠ½ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ ΡΡΠ°Π»ΠΎ ΡΡΠ½ΠΎ: Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π» Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΠΊ ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π» 15 ΠΌΠΈΠ½ΡΡ, ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ AWS SDK ΡΠ΅ΡΠ°Π» ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ . Π ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² ΡΡΠ°Π» ΠΊΠΎΡΠΎΡΠ΅?
Π‘Π΅ΡΠ²ΠΈΡ AWS Instance Metadata ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ EC2, Π° Π½Π΅ Kubernetes. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π½Π°ΠΌ Π½Π΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ
KIAM ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ pod’Π°ΠΌ. ΠΡΠΎ ΡΠ°Π·ΡΠΌΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠ΅Π΄Π½ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ pod’Π° ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° EC2. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ²
Π ΠΈΡΠΎΠ³Π΅, Π΅ΡΠ»ΠΈ Π½Π°Π»ΠΎΠΆΠΈΡΡ ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΡΠ΅ΠΊΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· 15 ΠΌΠΈΠ½ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ AWS Java SDK ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, Π΄ΠΎ ΡΡΠΎΠΊΠ° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΌΠ΅Π½Π΅Π΅ 15 ΠΌΠΈΠ½ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ, ΡΡΠΎ Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΏΠ°ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ API AWS ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ. Π 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 ΠΌΠΎΠΆΠ½ΠΎ Π²
Π Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΡΠ°ΠΉΡΠ΅:
- Β«
3 ΠΈΡΡΠΎΡΠΈΠΈ ΡΠ±ΠΎΠ΅Π² Kubernetes Π² production: anti-affinity, graceful shutdown, webhook Β»; - Β«
ΠΠ°ΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ pod’ΠΎΠ² Π² Kubernetes ΡΡΠ°Π»ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΡ Π² Grafana Labs Β»; - Β«
6 Π·Π°Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π±Π°Π³ΠΎΠ² ΠΏΡΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Kubernetes [ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅] Β»; - Β«
6 ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΡΡΠΎΡΠΈΠΉ ΠΈΠ· Π½Π°ΡΠΈΡ SRE-Π±ΡΠ΄Π½Π΅ΠΉ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com