"Kubernetes ื”ื’ื“ื™ืœื” ืืช ื”ื”ืฉื”ื™ื” ืคื™ 10": ืžื™ ืืฉื ื‘ื›ืš?

ื”ืขืจื”. ืชืจื’ื•ื: ืžืืžืจ ื–ื”, ืฉื ื›ืชื‘ ืขืœ ื™ื“ื™ Galo Navarro, ื”ืžื›ื”ืŸ ื‘ืชืคืงื™ื“ ืžื”ื ื“ืก ืชื•ื›ื ื” ืจืืฉื™ ื‘ื—ื‘ืจืช 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, ื•ื”ืงื ื“ื™ื ื”ืื—ื•ืจื™ื™ื ื”ื ืื•ื‘ื™ื™ืงื˜ื™ื ืจื’ื™ืœื™ื ื›ืžื• ืคึผึฐืจึดื™ืกึธื” ืขื ืืคืœื™ืงืฆื™ื™ืช JVM ื‘ืคืœื˜ืคื•ืจืžืช Spring.

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

ื ืจืื” ืฉื”ื‘ืขื™ื” ืงืฉื•ืจื” ืœื”ืฉื”ื™ื” ื”ืจืืฉื•ื ื™ืช ื‘-backend (ืกื™ืžื ืชื™ ืืช ืื–ื•ืจ ื”ื‘ืขื™ื” ื‘ื’ืจืฃ ื‘ืชื•ืจ "xx"). ื‘-EC2, ืชื’ื•ื‘ืช ื”ืืคืœื™ืงืฆื™ื” ืืจื›ื” ื›-20 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”. ื‘-Kubernetes, ื”ื”ืฉื”ื™ื” ื’ื“ืœื” ืœ-100-200 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”.

ืคื˜ืจื ื• ื‘ืžื”ื™ืจื•ืช ืืช ื”ื—ืฉื•ื“ื™ื ื”ืกื‘ื™ืจื™ื ื”ืงืฉื•ืจื™ื ืœืฉื™ื ื•ื™ ื‘ื–ืžืŸ ื”ืจื™ืฆื”. ื’ืจืกืช JVM ื ืฉืืจืช ื–ื”ื”. ื’ื ื‘ืขื™ื•ืช ืงื•ื ื˜ื™ื™ื ืจื™ื–ืฆื™ื” ืœื ื”ื™ื• ืงืฉื•ืจื•ืช ืœื–ื”: ื”ืืคืœื™ืงืฆื™ื” ื›ื‘ืจ ืจืฆื” ื‘ื”ืฆืœื—ื” ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ื‘-EC2. ื˜ื•ืขืŸ? ืื‘ืœ ืฆืคื™ื ื• ื‘ื”ืฉื”ื™ื•ืช ื’ื‘ื•ื”ื•ืช ืืคื™ืœื• ื‘ื‘ืงืฉื” ืื—ืช ืœืฉื ื™ื™ื”. ืืคืฉืจ ื’ื ืœื”ื–ื ื™ื— ื”ืคืกืงื•ืช ืœืื™ืกื•ืฃ ืืฉืคื”.

ืื—ื“ ืžืžื ื”ืœื™ 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 ืื›ืŸ ืชืจืžื” ืœืขืœื™ื™ื” ื‘ื”ืฉื”ื™ื”.

ืขื ื–ืืช, ื–ื” ื”ื™ื” ืžื•ื–ืจ ืžืฉืชื™ ืกื™ื‘ื•ืช:

  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 ืืœืคื™ืช ื”ืฉื ื™ื™ื”.

ื”ื–ืจื ื”ืืคื•ืจ (ืžืชื•ืš ื—ื‘ื™ืœื” 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 ื™ื—ืœื™ื˜ ืœืขื“ื›ืŸ ืื•ืชื ื‘ื‘ืงืฉื” ืฉืœืื—ืจ ืžื›ืŸ. ื•ื–ื” ืงืจื” ืขื ื›ืœ ื‘ืงืฉื”.

ืžื“ื•ืข ืชืงื•ืคืช ื”ืชื•ืงืฃ ืฉืœ ื”ืชืขื•ื“ื•ืช ื”ืชืงืฆืจื”?

Metadata ืฉืœ ืžื•ืคืข AWS ืชื•ื›ื ืŸ ืœืขื‘ื•ื“ ืขื ืžื•ืคืขื™ EC2, ืœื ืขื Kubernetes. ืžืฆื“ ืฉื ื™, ืœื ืจืฆื™ื ื• ืœืฉื ื•ืช ืืช ืžืžืฉืง ื”ืืคืœื™ืงืฆื™ื”. ื‘ืฉื‘ื™ืœ ื–ื” ื”ืฉืชืžืฉื ื• ืงื™ืื - ื›ืœื™ ืฉื‘ืืžืฆืขื•ืช ืกื•ื›ื ื™ื ื‘ื›ืœ ืฆื•ืžืช Kubernetes, ืžืืคืฉืจ ืœืžืฉืชืžืฉื™ื (ืžื”ื ื“ืกื™ื ื”ืคื•ืจืกื™ื ื™ื™ืฉื•ืžื™ื ืœืืฉื›ื•ืœ) ืœื”ืงืฆื•ืช ืชืคืงื™ื“ื™ IAM ืœืงื•ื ื˜ื™ื™ื ืจื™ื ื‘-pods ื›ืื™ืœื• ื”ื™ื• ืžื•ืคืขื™ EC2. KIAM ืžื™ื™ืจื˜ ืฉื™ื—ื•ืช ืœืฉื™ืจื•ืช Metadata ืฉืœ ืžื•ืคืข AWS ื•ืžืขื‘ื“ ืื•ืชืŸ ืžื”ืžื˜ืžื•ืŸ ืฉืœื•, ืœืื—ืจ ืฉืงื™ื‘ืœ ืื•ืชืŸ ื‘ืขื‘ืจ ืž-AWS. ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ื”ื™ื™ืฉื•ื, ืฉื•ื ื“ื‘ืจ ืœื ืžืฉืชื ื”.

KIAM ืžืกืคืงืช ืชืขื•ื“ื•ืช ืœื˜ื•ื•ื— ืงืฆืจ ืœืชืจืžื™ืœื™ื. ื–ื” ื”ื’ื™ื•ื ื™ ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉืื•ืจืš ื”ื—ื™ื™ื ื”ืžืžื•ืฆืข ืฉืœ ืชืจืžื™ืœ ืงืฆืจ ื™ื•ืชืจ ืžื–ื” ืฉืœ ืžื•ืคืข EC2. ืชืงื•ืคืช ืชื•ืงืฃ ื‘ืจื™ืจืช ืžื—ื“ืœ ืœืื™ืฉื•ืจื™ื ืฉื•ื•ื” ืœืื•ืชืŸ 15 ื“ืงื•ืช.

ื›ืชื•ืฆืื” ืžื›ืš, ืื ืืชื” ืžื›ืกื” ืืช ืฉื ื™ ืขืจื›ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื–ื” ืขืœ ื’ื‘ื™ ื–ื”, ืžืชืขื•ืจืจืช ื‘ืขื™ื”. ื›ืœ ืื™ืฉื•ืจ ืฉื ื™ืชืŸ ืœื‘ืงืฉื” ื™ืคื•ื’ ืœืื—ืจ 15 ื“ืงื•ืช. ืขื ื–ืืช, AWS Java SDK ืžืืœืฅ ื—ื™ื“ื•ืฉ ืฉืœ ื›ืœ ืื™ืฉื•ืจ ืฉื ื•ืชืจื• ืœื• ืคื—ื•ืช ืž-15 ื“ืงื•ืช ืœืคื ื™ ืชืืจื™ืš ื”ืชืคื•ื’ื” ืฉืœื•.

ื›ืชื•ืฆืื” ืžื›ืš, ื”ืื™ืฉื•ืจ ื”ื–ืžื ื™ ื ืืœืฅ ืœื”ืชื—ื“ืฉ ืขื ื›ืœ ื‘ืงืฉื”, ื“ื‘ืจ ื”ื›ืจื•ืš ื‘ื›ืžื” ืฉื™ื—ื•ืช ืœ-API ืฉืœ AWS ื•ื’ื•ืจื ืœืขืœื™ื™ื” ืžืฉืžืขื•ืชื™ืช ื‘ื”ืฉื”ื™ื”. ื‘-AWS Java SDK ืžืฆืื ื• ื‘ืงืฉืช ืชื›ื•ื ื”, ืืฉืจ ืžื–ื›ื™ืจ ื‘ืขื™ื” ื“ื•ืžื”.

ื”ืคืชืจื•ืŸ ื”ืชื‘ืจืจ ื›ืคืฉื•ื˜. ืคืฉื•ื˜ ื”ื’ื“ืจื ื• ืžื—ื“ืฉ ืืช KIAM ืœื‘ืงืฉ ืื™ืฉื•ืจื™ื ืขื ืชืงื•ืคืช ืชื•ืงืฃ ืืจื•ื›ื” ื™ื•ืชืจ. ื‘ืจื’ืข ืฉื–ื” ืงืจื”, ื”ื—ืœื• ืœื–ืจื•ื ื‘ืงืฉื•ืช ืœืœื ื”ืฉืชืชืคื•ืช ืฉืœ ืฉื™ืจื•ืช Metadata ืฉืœ AWS, ื•ื”ืฉื”ื™ื™ื” ื™ืจื“ื” ืœืจืžื•ืช ื ืžื•ื›ื•ืช ืขื•ื“ ื™ื•ืชืจ ืžืืฉืจ ื‘-EC2.

ืžืžืฆืื™ื

ื‘ื”ืชื‘ืกืก ืขืœ ื”ื ื™ืกื™ื•ืŸ ืฉืœื ื• ืขื ื”ืขื‘ืจื•ืช, ืื—ื“ ื”ืžืงื•ืจื•ืช ื”ื ืคื•ืฆื™ื ื‘ื™ื•ืชืจ ืœื‘ืขื™ื•ืช ื”ื•ื ืœื ื‘ืื’ื™ื ื‘-Kubernetes ืื• ื‘ืืœืžื ื˜ื™ื ืื—ืจื™ื ืฉืœ ื”ืคืœื˜ืคื•ืจืžื”. ื–ื” ื’ื ืœื ืžื˜ืคืœ ื‘ืคื’ืžื™ื ืžื”ื•ืชื™ื™ื ื‘ืฉื™ืจื•ืชื™ ื”ืžื™ืงืจื• ืฉืื ื• ืžืขื‘ื™ืจื™ื. ื‘ืขื™ื•ืช ืžืชืขื•ืจืจื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืคืฉื•ื˜ ื›ื™ ืื ื—ื ื• ืžื—ื‘ืจื™ื ืืœืžื ื˜ื™ื ืฉื•ื ื™ื ื™ื—ื“.

ืื ื• ืžืขืจื‘ื‘ื™ื ื™ื—ื“ ืžืขืจื›ื•ืช ืžื•ืจื›ื‘ื•ืช ืฉืžืขื•ืœื ืœื ืงื™ื™ืžื• ืื™ื ื˜ืจืืงืฆื™ื” ื–ื• ืขื ื–ื• ื‘ืขื‘ืจ, ื‘ืฆื™ืคื™ื™ื” ืฉื™ื—ื“ ื”ืŸ ื™ื”ื•ื• ืžืขืจื›ืช ืื—ืช ื•ื’ื“ื•ืœื” ื™ื•ืชืจ. ืœืžืจื‘ื” ื”ืฆืขืจ, ื›ื›ืœ ืฉื™ื•ืชืจ ืืœืžื ื˜ื™ื, ื™ื•ืชืจ ืžืงื•ื ืœื˜ืขื•ื™ื•ืช, ื”ืื ื˜ืจื•ืคื™ื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ.

ื‘ืžืงืจื” ืฉืœื ื•, ื”ืื—ื–ื•ืจ ื”ื’ื‘ื•ื” ืœื ื”ื™ื” ืชื•ืฆืื” ืฉืœ ื‘ืื’ื™ื ืื• ื”ื—ืœื˜ื•ืช ืฉื’ื•ื™ื•ืช ื‘-Kubernetes, KIAM, AWS Java SDK ืื• ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช ืฉืœื ื•. ื–ื” ื”ื™ื” ืชื•ืฆืื” ืฉืœ ืฉื™ืœื•ื‘ ืฉืœ ืฉืชื™ ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืขืฆืžืื™ื•ืช: ืื—ืช ื‘-KIAM, ื”ืฉื ื™ื™ื” ื‘-AWS Java SDK. ื‘ื”ืชื—ืฉื‘ ื‘ื ืคืจื“, ืฉื ื™ ื”ืคืจืžื˜ืจื™ื ื”ื’ื™ื•ื ื™ื™ื: ืžื“ื™ื ื™ื•ืช ื—ื™ื“ื•ืฉ ื”ืื™ืฉื•ืจื™ื ื”ืคืขื™ืœื” ื‘-AWS Java SDK, ื•ืชืงื•ืคืช ื”ืชื•ืงืฃ ื”ืงืฆืจื” ืฉืœ ื”ืื™ืฉื•ืจื™ื ื‘-KAIM. ืื‘ืœ ื›ืืฉืจ ืืชื” ืžื—ื‘ืจ ืื•ืชื ื™ื—ื“, ื”ืชื•ืฆืื•ืช ื”ื•ืคื›ื•ืช ื‘ืœืชื™ ืฆืคื•ื™ื•ืช. ืฉื ื™ ืคืชืจื•ื ื•ืช ืขืฆืžืื™ื™ื ื•ื”ื’ื™ื•ื ื™ื™ื ืื™ื ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื”ื’ื™ื•ื ื™ื™ื ื‘ืฉื™ืœื•ื‘ื.

ื .ื‘ ืžื”ืžืชืจื’ื

ืชื•ื›ืœ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ ื›ืœื™ ื”ืฉื™ืจื•ืช KIAM ืœืฉื™ืœื•ื‘ AWS IAM ืขื Kubernetes ื‘ื›ืชื•ื‘ืช ืžืืžืจ ื–ื” ืžื™ื•ืฆืจื™ื•.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”