ááŸááºáá»ááºá áá¬áá¬ááŒááº: á¥áá±á¬ááá¯áá¹ááá® Adevinta ááœáẠPrincipal Software Engineer áá¬áá°ážááá¯áááŸááá¬ážáá° Galo Navarro ááŸáá±ážáá¬ážáá±á¬ á€áá±á¬ááºážáá«ážááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯ááºáá¬áá¯ááºáááºážáá»á¬ážááœáẠá áááºáááºá á¬ážááœááºáá±á¬ááºážáá±á¬ ááŸááºáá¬ážá áᬠâá á¯á¶á ááºážá á áºáá±ážááŒááºážâ ááŒá áºáááºá áá°áááºážáá±á«ááºážá ááºááᯠá á¬áá±ážáá°á á¡á ááŸá¬ ááŸááºážááŒáá¬ážáá²á· á¡ááŒá±á¬ááºážááŒáá»ááºáá²á· áá¬áá¬ááŒááºáá¬ááŸá¬ á¡áááºážááẠáá»á²á·áá¬ážáá«áááºá
á
á¬áá±ážáá°áá¶á០ááŸááºáá»ááº: áá®ááá¯á·á
áºáá²á·áá°áááºá
ááœááºáá²á·áá±á¬ áááºááá¹ááááºá¡áááºážáááºáá áá»áœááºá¯ááºáá¡ááœá²á·ááẠCI/CDá Kubernetes á¡ááŒá±ááŒá¯ runtimeá áááºááá
áºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážáá«áááºááá·áº core platform áá
áºáá¯ááá¯á· microservice áá
áºáá¯ááᯠááŒá±á¬ááºážááœáŸá±á·áá±áá«áááºá á¡ááŒá±á¬ááºážá¡ááœáŸá±á·ááẠá
ááºážáááºááŸá¯ááá±á¬á¡áááŒá
áºáááº- áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á¡ááŒá±áá¶á¡ááŒá
áºáá¶áá°ááŒá®áž áá¬ááá·áºááá»á¬ážááœáẠáá±á¬ááºáááºáááºáá±á¬ááºááŸá¯áá±á«ááºáž 150 ááá·áºááᯠááœáŸá²ááŒá±á¬ááºážááẠá
á®á
ááºáá¬ážáá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá
ááááºááŸá á¡ááŒá®ážáá¯á¶áž á¡áœááºááá¯ááºážááááºáá±á¬ááºážáá»á¬áž (Infojobsá Fotocasa á
áááºááá¯á·) á áááºáááºááŸá¯á¡ááœáẠáá¬áááºááŸááá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááᯠKubernetes ááá¯á· ááŒáá·áºáá»ááºááŒá®áž á¡ááœá¬ážá¡áá¬á¡áá»áá¯á·ááᯠáááºážáᶠááŒááºááœáŸááºážááŒá®ážáá±á¬ááºá ááááºááá·áºá¡á¶á·ááŒááœááºáá¬áá áºáá¯á áá»áœááºá¯ááºááá¯á·ááᯠá á±á¬áá·áºááŒáá¯áá±áá«áááºá ááŸá±á¬áá·áºááŸá±ážááŒááºážá (áá±áá»áááº) Kubernetes ááœáẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠEC10 ááẠ2 á ááá¯áá»á¬ážáááºá áá±áá°áá»á¡á¬ážááŒáá·áºá á€ááŒá¿áá¬á¡ááœáẠá¡ááŒá±ááá¯ááŸá¬ááœá±ááẠááá¯á·ááá¯áẠmicroservice á ááœáŸá±á·ááŒá±á¬ááºážááŒááºáž (ááá±á¬áá»ááºáá áºáá¯áá¯á¶áž) ááᯠá áœáá·áºááœáŸááºááẠááá¯á¡ááºáááºá
Kubernetes ááœáẠlatency ááẠEC2 ááẠá¡áááºááŒá±á¬áá·áº ááá¯ááá¯ááŒáá·áºáá¬ážááááºážá
ááááºááá¯á·ááŸá¯ááá¯ááŸá¬ááœá±áááºá áá±á¬ááºážááá¯ááŸá¯áááºážááŒá±á¬ááºážáá
áºáá¯áá¯á¶ážáá
áºáá»áŸá±á¬áẠáááºááá
áºáá»á¬ážááᯠá
á¯áá±á¬ááºážáá²á·áááºá áá»áœááºá¯ááºááá¯á·á áááá¯áá¬áááºáá¬ááẠááá¯ážááŸááºážáá«áááº- API ááááºáá±áž (Zuul) proxies ááẠEC2 ááá¯á·ááá¯áẠKubernetes ááŸá microservice instances áá»á¬ážááᯠáá±á¬ááºážááá¯áá«áááºá Kubernetes ááœáẠáá»áœááºá¯ááºááá¯á·ááẠNGINX Ingress Controller ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž áá±á¬ááºáá¶áá»á¬ážááẠáá¬áááºá¡áá¬ááá¹áá¯áá»á¬ážáá²á·ááá¯á·ááŒá
áºáááºá
EC2
+---------------+
| +---------+ |
| | | |
+-------> BACKEND | |
| | | | |
| | +---------+ |
| +---------------+
+------+ |
Public | | |
-------> ZUUL +--+
traffic | | | Kubernetes
+------+ | +-----------------------------+
| | +-------+ +---------+ |
| | | | xx | | |
+-------> NGINX +------> BACKEND | |
| | | xx | | |
| +-------+ +---------+ |
+-----------------------------+
ááŒá¿áá¬ááẠbackend ááŸá áááŠáž latency ááŸáá·áº áááºá ááºáá±áá¯á¶áááẠ(ááááºáá±á«áºááœáẠááŒá¿áá¬á§áááá¬ááᯠ"xx" á¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯áá¬ážáááº)á EC2 ááœááºá áá»áŸá±á¬ááºááœáŸá¬áá¯á¶á·ááŒááºááŸá¯ááẠ20ms ááá·áºááŒá¬áááºá Kubernetes ááœááºá latency ááẠ100-200 ms á¡ááááá¯ážáá¬áááºá
áá»áœááºá¯ááºááá¯á·ááẠruntime ááŒá±á¬ááºážáá²ááŸá¯ááŸáá·áºáááºáááºááá·áº ááŒá áºááá¯ááºááŒá±ááŸááá±á¬áá¶ááááŸááá°áá»á¬ážááᯠá¡ááŒááºáááºááŸá¬ážááá¯ááºáá«áááºá JVM áá¬ážááŸááºážá á¡áá°áá°áá«áá²á ááœááºááááºáá¬ááŒá¯áá¯ááºááŒááºážááá¯ááºáá¬ááŒá¿áá¬áá»á¬ážáááºáááºáž áááºážááŸáá·áºááááºááá¯ááºáá«- á¡ááá®áá±ážááŸááºážááẠEC2 ááŸá ááœááºááááºáá¬áá»á¬ážááœáẠá¡á±á¬ááºááŒááºá áœá¬áááºáááºáá±ááŒá®ááŒá áºáááºá áááºáá±áá¬ážá ááá¯á·áá±á¬áº áá áºá áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯áá»áẠ1 áá¯áááẠááŒáá·áºáá¬ážáá±á¬ latencies ááᯠáá»áœááºá¯ááºááá¯á· ááœá±á·ááŸááá²á·áááºá á¡ááŸáá¯ááºááááºážááŒááºážá¡ááœáẠáá±áá¹ááááºáá¬ážááŒááºážááá¯áááºáž áá áºáá»á°ááŸá¯áá¬ážááá¯ááºáááºá
áá»áœááºá¯ááºááá¯á·á 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
ááŸá¬ááœá±ááŸá¯ááẠ30ms ááá·áºááŒá¬áááºáᯠáá°ááá«á Elasticsearch ááá¯áááºáá±á¬ááºááá·áºá¡áá« DNS resolution ááẠlatency ááá¯ážáá¬á á±ááẠá¡ááŸááºáááẠá¡áá±á¬ááºá¡áá°ááŒá¯ááŒá±á¬ááºáž áááºááŸá¬ážáá¬áááºá
ááá¯á·áá±á¬áº á¡ááŒá±á¬ááºážááŒáá»áẠááŸá áºáá¯ááŒá±á¬áá·áº áá°ážáááºážááẠá
- áá»áœááºá¯ááºááá¯á·ááœáẠá¡áá»áááºááŒá¬ááŒáá·áºá áœá¬áá±áá»áááºááᯠááá¶á á¬ážááá² AWS á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááá·áº Kubernetes á¡ááá®áá±ážááŸááºážáá»á¬ážá áœá¬ááŸááááºá áá¬á¡ááŒá±á¬ááºážááŒá±á¬áá·áºáá²ááŒá áºááŒá áºá áá®ááá á¹á áá²á· áááºááá¯ááºáááºá
- JVM ááẠin-memory DNS caching ááŒá¯áá¯ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááá«áááºá áá»áœááºá¯ááºááá¯á·ááá¯á¶áá»á¬ážááœáẠTTL áááºááá¯ážááᯠáá±ážáá¬ážáááºá
$JAVA_HOME/jre/lib/security/java.security
10 á áá¹ááá·áº áááºááŸááºáá¬ážáááº-networkaddress.cache.ttl = 10
. áá áºáááºážááá¯ááá±á¬áº JVM ááẠDNS queries á¡á¬ážáá¯á¶ážááᯠ10 á áá¹ááá·áºááŒá¬ ááááºážáááºážáá¬ážááá·áºáááºá
ááá á¡áá°á¡áááᯠá¡áááºááŒá¯áááºá áá»áœááºá¯ááºááá¯á·ááẠDNS ááᯠáááᬠáá±á«áºááá¯ááŒááºážááᯠáááºááá¯ááºááŒá®áž ááŒá¿áᬠááŒá±áááºááœá¬ážááŒááºáž ááŸááááŸá ááŒáá·áºááẠáá¯á¶ážááŒááºáá²á·áááºá ááááŠážá
áœá¬á ááá¯ááááºážá¡áááºáá
áºáá¯ááŸááá¯ááºáá² Elasticsearch ááŸáá·áº ááá¯ááºááá¯ááºáááºááœááºááá¯ááºá
á±ááẠá¡ááá®áá±ážááŸááºážááᯠááŒááºáááºááŒááºáááºááẠáá¯á¶ážááŒááºáá²á·áááºá áááºážááẠáá¯ááºá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŸáá·áº á¡áá¯á¶ážáá»ááŸá¯á¡áá
Ạááá¯á¡ááºáááºááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠááá¯ááááºážááᯠáááºážá IP ááááºá
á¬ááœáẠááá¯ážááŸááºážá
áœá¬ áá¯á¶áá±á¬áºáá¬ážáááºá /etc/hosts
:
34.55.5.111 elastic.spain.adevinta.com
ááá¯ááœááºááááºáá¬ááẠIP ááá¯áá»ááºáá»ááºážáááºáá¶áááŸááá²á·áááºá áááºážááẠááá¯ážáááºááŸá¯á¡áá»áá¯á·ááᯠááŒá áºáá±á«áºá á±áá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·ááẠáá»áŸá±á¬áºááá·áºáá¬ážááá·áº latency á¡ááá·áºáá»á¬ážááẠá¡áááºážááẠááá¯áá®ážá ááºáá«áááºá DNS Resolution ááẠá¡áá»áááºá¡áá±á¬áºááŒá¬áá±á¬áºáááºážá á¡ááŒá±á¬ááºážá¡áááºážá¡ááŸááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááᯠááŸá±á¬ááºáááºáá±áá²ááŒá áºáááºá
ááœááºáááºááŸáá áºááá·áº áá±á¬áá«ááŸá¬ááœá±ááŒááºážá
á¡áá¯á¶ážááŒá¯ááŒá®áž ááœááºááááºáá¬á០áááºážááŒá±á¬ááºážáá»á¬ážááᯠááœá²ááŒááºážá
áááºááŒá¬ááẠáá¯á¶ážááŒááºáá²á·áááºá 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) ááẠááœááºááááºáᬠ(172.17.36.147) ááá¯á· TCP áá»áááºáááºááŸá¯ááᯠáááºááá¯á·áááºáá±á¬ááºááŒá±á¬ááºáž ááŒááááºá áááŠážáááºááœá²ááŸá¯ááºáááºááŒá®ážáá±á¬áẠ(ááá-ááá)á á¡áá¯áẠááá ááᯠáá°áá±á¬ááºáá¬áááºá HTTP GET /v1/..
- áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááá¯á· áááºáá¬áá±á¬ áá±á¬ááºážááá¯áá»ááºá áá¯ááºáááºážá
ááºáá
áºáá¯áá¯á¶ážááẠ1 ms ááŒá¬áááºá
áá®ážááá¯ážáá±á¬ááºá á®ážááŒá±á¬ááºáž (packet 339 ááŸ) áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááẠElasticsearch á á¶ááá°áá¬ááá¯á· HTTP áá±á¬ááºážááá¯áá»ááºáá áºáá¯áá±ážááá¯á·ááŒá±á¬ááºážááŒáááẠ(áááºááŸááá»áááºáááºááŸá¯ááá¯á¡áá¯á¶ážááŒá¯áá±áá±á¬ááŒá±á¬áá·áº TCP áááºááœá²ááŒááºážáá»áá¯ážáááŸááá«)á áááºážááẠ18ms ááŒá¬áááºá
ááá¯á¡áá»áááºá¡áá á¡áá¬á¡á¬ážáá¯á¶áž á¡áááºááŒá±áá±ááŒá®áž á¡áá»áááºáá»á¬ážááẠáá»áŸá±á¬áºááá·áºáá¬ážááá·áº ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááŸáá·áº ááá¯ááºáá®ááẠ(Client á០ááá¯ááºážáá¬áá±á¬á¡áá« 20-30 ms)á
ááá¯á·áá±á¬áº á¡ááŒá¬á¡ááá¯ááºážááẠ86ms ááŒá¬áááºá á¡á²áá®áá²ááŸá¬ áá¬ááœá±ááŒá
áºáá±áá¬áá²? áááºááẠ333 ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááẠHTTP GET áá±á¬ááºážááá¯áá»ááºááᯠáá±ážááá¯á·áá²á·áááºá /latest/meta-data/iam/security-credentials
ááŒá®ážááŒá®ážáá»ááºážá áá°áá®áá±á¬ TCP áá»áááºáááºááŸá¯ááœááºá áá±á¬ááºááẠGET áá±á¬ááºážááá¯áá»áẠ/latest/meta-data/iam/security-credentials/arn:..
.
áá²ááœááºá áá áºáá»áŸá±á¬ááºáá¯á¶áž áá±á¬ááºážááá¯ááŸá¯ááá¯ááºážááŸáá·áº áááºááá²áá² ááŒá áºáá±ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááœá±á·ááŸáááá«áááºá DNS Resolution ááẠáá»áœááºá¯ááºááá¯á·á ááœááºááááºáá¬áá»á¬ážááœáẠá¡áááºážááẠááŸá±ážááœá±ážáá±áá«ááẠ(á€ááŒá áºá ááºá¡ááœáẠááŸááºážáááºážáá»ááºááẠá¡ááœááºá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬áºáááºáž áá®ážááŒá¬ážáá±á¬ááºážáá«ážá¡ááœáẠááááºážáááºážáá¬ážáááºááŒá áºáá«áááº)á áá¬áááŒá¬ááŸááºááŸá±á¬áá·áºááŸá±ážáááŒááºážá¡ááŒá±á¬ááºážáááºážááŸá¬ áá±á¬ááºážááá¯áá»ááºáá áºáá¯á á®ááœáẠ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 áááá áºá¡ááœááºáž hardcode áá¯ááºáá¬ážáááºá - áááºááŸááºáá»á¬ážááᯠáááºáááºážááá¯ážááẠáá±á¬ááºáá¯á¶ážááŒáá¯ážáááºážááŸá¯ááẠá¡áá»áááºááá¯ááŒá¬áá¬áá²á·áááºá
REFRESH_THRESHOLD
áááá Ạ60 ááŒá¬ hardcode áá¯ááºáá¬ážáááºá
áá»áœááºá¯ááºááá¯á·áááŸáááá·áº áááºááŸááºáá»á¬ážá á¡ááŸááºáááẠáááºáááºážáá¯ááºáá¯á¶ážáááºááᯠááŒáá·áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áááºáá±á¬áºááŒáá« cURL ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááœááºááááºáá¬ááŸáá·áº EC2 á á¶ááá°áá¬ááŸá áºáá¯á áá¯á¶ážá០áá¯ááºáá±á¬ááºáá²á·áááºá ááœááºááááºáá¬ááŸáááŸáááá·áº áááºááŸááºáááá¬ážáááºáá¬áááẠá¡ááœááºááá¯áá±á¬ááºážáá¬áááº- 15 áááá áºááááá
á¡áá¯áá±á¬á· á¡á¬ážáá¯á¶ážááŸááºážááœá¬ážáá«ááŒá®- ááááá±á¬ááºážááá¯áá»ááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááẠáá¬áá®áááºáá±áá¶áááºááŸááºáá»á¬ážááᯠáááŸááá²á·áá«áááºá áááºážááá¯á·ááẠ15 áááá áºáááºááá¯á á¡áá»á¯á¶ážááááºáá±á¬ááŒá±á¬áá·áº AWS SDK ááẠáááºážááá¯á·ááᯠáá±á¬ááºáááºááœá² áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááœáẠá¡ááºááááºáá¯ááºááẠáá¯á¶ážááŒááºáááºááŒá áºáááºá áá±á¬ááºážááá¯ááŸá¯ááá¯ááºážáá²á· áá®ááá¯ááŒá áºáá²á·áááºá
áááºááŸááºáá»á¬ážá ááá¬ážáááºáááºáááºážááẠá¡áááºááŒá±á¬áá·áº ááá¯áá±á¬ááºážáá¬ááááºážá
AWS Instance Metadata ááᯠKubernetes ááá¯ááºáá² EC2 instance áá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá á¡ááŒá¬ážáá
áºáááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážáá»ááºááŸá¬ááŒááºááᯠáááŒá±á¬ááºážááá¯áá«á áá®á¡ááœáẠáá»áœááºáá±á¬áºááá¯á· áá¯á¶ážáááºá
KIAM á០áá¬áááᯠáááºááŸááºáá»á¬áž áá±á¬ááºáá¶á·áá±ážáááºá pod áá
áºáá¯á áá»ááºážáá»áŸáááºáááºážááẠEC2 instance áááºááá¯áááºáᯠááá·áºááœááºážá
ááºážá
á¬ážááŒááºážááẠá¡áááá¹áá«ááºááŸááá«áááºá áááºááŸááºáá»á¬ážá¡ááœáẠáá°áááºážááá¬ážáááºáá¬á
ááááºá¡áá±ááŒáá·áº áá áºáá¯ááŸáá·áºáá áºáá¯á¡áá±á«áºááœáẠáá¯á¶áá±áááºááá¯ážááŸá áºáá¯ááᯠáááºáááºáá«á ááŒá¿áá¬áá áºáᯠááŒá áºáá±á«áºáá¬áá«áááºá á¡ááá®áá±ážááŸááºážáá áºáá¯ááá¯á· áá±ážáá¬ážááá·áº áááºááŸááºáá áºáá¯á á®ááẠ15 áááá áºá¡ááŒá¬ááœáẠáááºáááºážáá¯ááºáá¯á¶ážáááºá ááá¯á·áá±á¬áºá AWS Java SDK ááẠáááºážááááºáááºážáá¯ááºáá¯á¶ážáááºáááá¯ááºáá® 15 áááá áºáááºáááºážáá±á¬ áááºááá·áºáááºááŸááºááá¯áááᯠáááºáááºážááá¯ážááẠááœááºážá¡á¬ážáá±ážáááºá
ááááºá¡áá±ááŒáá·áºá áá¬áá®áááºáá±áá¶áááºááŸááºá¡á¬áž áá±á¬ááºážááá¯áá»ááºáá
áºáá¯á
á®ááŒáá·áº áááºáááºážááá¯ážááẠááœááºážá¡á¬ážáá±ážááááºááŒá
áºááŒá®ážá áááºážááẠAWS API ááá¯á· áá±á«áºááá¯ááŸá¯á¡áá»áá¯á·áá«áááºááŒá®áž latency áááááá¬áá¬ááá¯ážáá¬á
á±áááºá AWS Java SDK ááœáẠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŸááá²á·áááºá
ááŒá±ááŸááºážáá»ááºá ááá¯ážááŸááºážáá«áááºá áááºáááºážááá¯ááŸááºáá±á¬ áááºááŸááºáá»á¬ážáá±á¬ááºážááá¯áááºá¡ááœáẠKIAM ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž ááŒááºáááºááŒááºáááºáá¬ážáá«áááºá ááá¯ááá¯á·ááŒá áºáá¬áááºááŸáá·áºáááŒáá¯ááºáááºá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááẠAWS Metadata áááºáá±á¬ááºááŸá¯ááœááºáá«áááºááŒááºážáááŸááá² á áááºá á®ážáááºážáá¬ááŒá®áž latency ááẠEC2 áááºááẠá¡ááá·áºáááá·áºáá»ááœá¬ážáá«áááºá
ááœá±á·ááŸááá»ááºáá»á¬áž
ááœáŸá±á·ááŒá±á¬ááºážááŒááºážááá¯ááºáᬠáá»áœááºá¯ááºááá¯á·á á¡ááœá±á·á¡ááŒá¯á¶á¡áá±á«áº á¡ááŒá±áá¶á ááŒá¿áá¬áá»á¬ážá á¡ááŒá áºá¡áá»á¬ážáá¯á¶áž á¡áááºážá¡ááŒá áºáá»á¬ážáá²á០áá áºáá¯ááẠKubernetes ááá¯á·ááá¯áẠááááºáá±á¬ááºážá á¡ááŒá¬ážááŒááºá ááºáá»á¬ážááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬áž ááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·áááºáá±á¬ááºáá±áá±á¬ ááá¯ááºáááá¯áááºáá±á¬ááºááŸá¯áá»á¬ážááœáẠá¡ááŒá±áá¶áá»áá¯á·ááœááºážáá»ááºáá»á¬ážááá¯áááºáž ááá¯ááºááœááºááŒá±ááŸááºážááŒááºážáááŒá¯áá«á ááá°áá®áá±á¬á¡áá»ááºáá»á¬áž áá±á«ááºážá ááºážáá¬ážááŒááºážááŒá±á¬áá·áº ááŒá¿áá¬áá»á¬áž áááŒá¬áá ááŒá áºááœá¬ážáááºáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠááááºá áá áºáŠážááŸáá·áºáá áºáŠáž ááááºáá¶áá°ážáá±á¬ ááŸá¯ááºááœá±ážáá±á¬ á áá áºáá»á¬ážááᯠá¡áá°ááᜠáá±á«ááºážá ááºáᬠáááºážááá¯á·ááẠáá áºáá¯áááºážáá±á¬á ááá¯ááá¯ááŒá®ážáá¬ážáá±á¬ á áá áºáá áºáá¯á¡ááŒá Ạá¡áá°ááᜠááŒá áºáá±á«áºáá¬áááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áá¶ááá±á¬ááºážá áœá¬áá²á ááŒááºá ááºáá»á¬ážáá»á¬ážáá±á á¡ááŸá¬ážáá»á¬ážá¡ááœááºáá±áá¬áá»á¬ážáá±á entropy ááá¯ááŒáá·áºáá±ááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá ááŒáá·áºáá¬ážáá±á¬ latency ááẠKubernetesá KIAMá AWS Java SDK ááá¯á·ááá¯áẠáá»áœááºá¯ááºááá¯á·á microservice ááŸá áá»áá¯á·ááœááºážáá»ááºáá»á¬áž ááá¯á·ááá¯áẠááá¯ážááœá¬ážáá±á¬áá¯á¶ážááŒááºáá»ááºáá»á¬ážááŒá±á¬áá·áº ááá¯ááºáá«á áááºážááẠáá®ážááŒá¬ážááœááºáááºáá±á¬ áá¯á¶áá±áááºáááºááŸá áºáá¯ááᯠáá±á«ááºážá ááºááŒááºážá ááááºááŒá áºáááº- KIAM ááœááºáá áºáá¯á áá±á¬ááºáá áºáá¯ááẠAWS Java SDK ááœááºááŒá áºáááºá áá®ážááŒá¬ážá á®á áá±á¬ááºááŸá áºáá¯á áá¯á¶ážááẠá¡áááá¹áá¬ááºááŸááá«áááº- AWS Java SDK ááŸá á¡áááºáááºáá±á¬ áááºáá±áá¶áááºááŸáẠáááºáááºážááá¯ážááŒááºážáá°áá«áááŸáá·áº KAIM ááŸá áááºááŸááºáá»á¬ážá áááºáááºážááá¯áá¬áá áá«áá±ááá·áº áá±á«ááºážááá¯ááºáá²á·á¡áá« ááááºááœá±á ááŸááºážáááá¯á· áááá«áá°ážá á¡ááŸá®á¡ááá¯áááºážááŒá®áž áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá±á¬ ááŒá±ááŸááºážáá»ááºááŸá áºáá¯ááᯠáá±á«ááºážá ááºááá¯ááºáá±á¬á¡áá« á¡áááá¹áá«ááºááŸáááẠáááá¯á¡ááºáá«á
PS áá¬áá¬ááŒááºááŸ
AWS IAM ááᯠKubernetes ááŸáá·áº áá±á«ááºážá
ááºážáááºá¡ááœáẠKIAM utility á áááºáá±á¬ááºáá¯á¶á¡ááŒá±á¬ááºáž ááá¯ááá¯áá±á·áá¬ááá¯ááºáá«áááºá
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
áá¯ááºáá¯ááºááŸá¯ááœáẠKubernetes áá»ááŸá¯á¶ážááŸá¯ áá¬ááºáááºáž 3 áá¯- áááºá ááºááŸá¯ ááá·áºáá»ááºááŸá¯á ááŸááá±á¬ ááááºáá áºááŸá¯á webhook "; - «
Kubernetes ááŸá pod áŠážá á¬ážáá±ážá¡áá¬áá»á¬ážááẠGrafana Labs ááœáẠá¡áá¯ááºááá¯ááºááá·áºáááºáž "; - «
Kubernetes áááºáááºááŸá¯ááœáẠáá»á±á¬áºááŒá±áá±ážá áá Ạáá»áá¯á·ááœááºážáá»áẠ6 áᯠ[ááŸáá·áº áááºážááá¯á·á ááŒá±ááŸááºážáá»ááº] "; - «
áá»áœááºá¯ááºááá¯á·á SRE áá±á·á ááºááá០áááºááœá±á·áá»áá±á¬ áá¯á¶ááŒáẠ6 áᯠ"á
source: www.habr.com