โ€œKubernetes๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ 10๋ฐฐ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹คโ€: ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์€ ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์œ ๋Ÿฝ ํšŒ์‚ฌ Adevinta์—์„œ ์ˆ˜์„ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด ์ง์ฑ…์„ ๋งก๊ณ  ์žˆ๋Š” Galo Navarro๊ฐ€ ์ž‘์„ฑํ•œ ์ด ๊ธฐ์‚ฌ๋Š” ์ธํ”„๋ผ ์šด์˜ ๋ถ„์•ผ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กญ๊ณ  ์œ ์ตํ•œ "์กฐ์‚ฌ"์ž…๋‹ˆ๋‹ค. ์ €์ž๊ฐ€ ๋งจ ์ฒ˜์Œ์— ์„ค๋ช…ํ•˜๋Š” ์ด์œ ๋กœ ์›๋ž˜ ์ œ๋ชฉ์€ ๋ฒˆ์—ญ์—์„œ ์•ฝ๊ฐ„ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โ€œKubernetes๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ 10๋ฐฐ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹คโ€: ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์€ ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €์ž์˜ ๋ฉ”๋ชจ: ์ด ๊ฒŒ์‹œ๋ฌผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ๋Œ๋ฆฐ ์˜ˆ์ƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง๋„ ๊ธฐ์‚ฌ ์ œ๋ชฉ์ด ์˜คํ•ด๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๊ณ  ์ผ๋ถ€ ๋…์ž๋“ค์ด ์•ˆํƒ€๊นŒ์›Œํ•˜๊ณ  ์žˆ๋‹ค๋Š” ํ™”๋‚œ ๋Œ“๊ธ€์„ ๋งŽ์ด ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ฏ€๋กœ ์ „์ฒด ์Œ๋ชจ๋ฅผ ๋ง์น  ์œ„ํ—˜์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ๊ธฐ์‚ฌ์˜ ๋‚ด์šฉ์„ ์ฆ‰์‹œ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํŒ€์ด Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ ์ œ๊ฐ€ ๋ณธ ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค(์˜ˆ: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€) ๊ฐ€์žฅ ๋จผ์ € ๋น„๋‚œ๋ฐ›๋Š” ๊ฒƒ์€ Kubernetes์ด์ง€๋งŒ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋Š” ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒ“ํ•˜๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด๋ฆ„์€ ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ์‚ฌ๋žŒ์˜ ๊ฐํƒ„์‚ฌ๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค(๋‚˜์ค‘์— Kubernetes๊ฐ€ ๊ทธ๊ฒƒ๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค). ์—ฌ๊ธฐ์—์„œ๋Š” Kubernetes์— ๋Œ€ํ•œ ๋†€๋ผ์šด ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ๊ตํ›ˆ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ์ฃผ ์ „์— ์šฐ๋ฆฌ ํŒ€์€ ๋‹จ์ผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ CI/CD, Kubernetes ๊ธฐ๋ฐ˜ ๋Ÿฐํƒ€์ž„, ๋ฉ”ํŠธ๋ฆญ ๋ฐ ๊ธฐํƒ€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ํ•ต์‹ฌ ํ”Œ๋žซํผ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์ „์€ ์‹œํ—˜์ ์ธ ์„ฑ๊ฒฉ์„ ๋ ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ฅํ›„ ๋ช‡ ๋‹ฌ ๋‚ด์— ์•ฝ 150๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ์ด์ „ํ•  ๊ณ„ํš์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค ๋ชจ๋‘๋Š” ์ŠคํŽ˜์ธ ์ตœ๋Œ€ ๊ทœ๋ชจ์˜ ์˜จ๋ผ์ธ ํ”Œ๋žซํผ(Infojobs, Fotocasa ๋“ฑ)์˜ ์šด์˜์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Kubernetes์— ๋ฐฐํฌํ•˜๊ณ  ์ผ๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•œ ํ›„ ๋†€๋ผ์šด ์ผ์ด ์šฐ๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ (์ˆจ์–ด ์žˆ์Œ) Kubernetes์˜ ์š”์ฒญ์€ EC10๋ณด๋‹ค 2๋ฐฐ ๋” ๋†’์•˜์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ฑฐ๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(๋ฐ ์ „์ฒด ํ”„๋กœ์ ํŠธ)์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํฌ๊ธฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

EC2๋ณด๋‹ค Kubernetes์—์„œ ์ง€์—ฐ ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋” ๊ธด ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ „์ฒด ์š”์ฒญ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. API ๊ฒŒ์ดํŠธ์›จ์ด(Zuul)๋Š” ์š”์ฒญ์„ EC2 ๋˜๋Š” Kubernetes์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋กœ ํ”„๋ก์‹œํ•ฉ๋‹ˆ๋‹ค. Kubernetes์—์„œ๋Š” NGINX Ingress Controller๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฑ์—”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ „๊ฐœ Spring ํ”Œ๋žซํผ์—์„œ JVM ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ฌธ์ œ๋Š” ๋ฐฑ์—”๋“œ์˜ ์ดˆ๊ธฐ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๊ทธ๋ž˜ํ”„์—์„œ ๋ฌธ์ œ ์˜์—ญ์„ "xx"๋กœ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค). EC2์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‘๋‹ต์— ์•ฝ 20ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. Kubernetes์—์„œ๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด 100~200ms๋กœ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋Ÿฐํƒ€์ž„ ๋ณ€๊ฒฝ๊ณผ ๊ด€๋ จ๋œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์šฉ์˜์ž๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ธฐ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. JVM ๋ฒ„์ „์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆํ™” ๋ฌธ์ œ๋„ ์ด์™€ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋ฏธ EC2์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ ์ค‘์ด์‹ ๊ฐ€์š”? ๊ทธ๋Ÿฌ๋‚˜ ์ดˆ๋‹น 1๊ฐœ์˜ ์š”์ฒญ์—์„œ๋„ ๋†’์€ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ์œ„ํ•œ ์ผ์‹œ ์ค‘์ง€๋„ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๊ด€๋ฆฌ์ž ์ค‘ ํ•œ ๋ช…์€ ๊ณผ๊ฑฐ์— DNS ์ฟผ๋ฆฌ๋กœ ์ธํ•ด ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์„ค 1: DNS ์ด๋ฆ„ ํ™•์ธ

๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ์—์„œ AWS Elasticsearch ์ธ์Šคํ„ด์Šค์— 1~3ํšŒ ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. 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 ํ™•์ธ์ด ์‹ค์ œ๋กœ ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€์— ๊ธฐ์—ฌํ•˜๊ณ  ์žˆ์Œ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ด์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋†’์€ ์ง€์—ฐ ์‹œ๊ฐ„ ์—†์ด AWS ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์ˆ˜๋งŽ์€ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋“ , ๊ทธ๊ฒƒ์€ ํŠนํžˆ ์ด ์‚ฌ๊ฑด๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์šฐ๋ฆฌ๋Š” JVM์ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ด DNS ์บ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์—์„œ TTL ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. $JAVA_HOME/jre/lib/security/java.security 10์ดˆ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. networkaddress.cache.ttl = 10. ์ฆ‰, JVM์€ ๋ชจ๋“  DNS ์ฟผ๋ฆฌ๋ฅผ 10์ดˆ ๋™์•ˆ ์บ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฐ€์„ค์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž ์‹œ DNS ํ˜ธ์ถœ์„ ์ค‘๋‹จํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ์•„๋‹Œ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด Elasticsearch์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ๊ณผ ์ƒˆ๋กœ์šด ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ฐ„๋‹จํžˆ ๋„๋ฉ”์ธ์„ 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 ์ฟผ๋ฆฌ์—๋Š” ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ ์ด ํ•˜๋‚˜๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๋‚˜์ค‘์— ์„ค๋ช…ํ•  ํ•œ ๊ฐ€์ง€ ์ž‘์€ ์‚ฌํ•ญ์„ ์ œ์™ธํ•˜๊ณ ). ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ์„œ๋น„์Šค๊ฐ€ ๊ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ํŠน์ •ํ•œ ์ด์ƒํ•œ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‘๋‹ต์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์š”์ฒญ์ด ์ˆ˜๋ฝ๋˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์บก์ฒ˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.

โ€œKubernetes๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ 10๋ฐฐ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹คโ€: ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์€ ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŒจํ‚ค์ง€ ๋ฒˆํ˜ธ๋Š” ์ฒซ ๋ฒˆ์งธ ์—ด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ TCP ํ๋ฆ„์„ ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ท 328๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋…น์ƒ‰ ์ŠคํŠธ๋ฆผ์€ ํด๋ผ์ด์–ธํŠธ(172.17.22.150)๊ฐ€ ์ปจํ…Œ์ด๋„ˆ(172.17.36.147)์— ๋Œ€ํ•œ TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ํ•ธ๋“œ์…ฐ์ดํฌ(328-330) ํ›„ ํŒจํ‚ค์ง€ 331์ด ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. HTTP GET /v1/.. โ€” ๋‹น์‚ฌ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ˆ˜์‹  ์š”์ฒญ. ์ „์ฒด ํ”„๋กœ์„ธ์Šค์—๋Š” 1ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

ํšŒ์ƒ‰ ์ŠคํŠธ๋ฆผ(ํŒจํ‚ท 339)์€ ์šฐ๋ฆฌ ์„œ๋น„์Šค๊ฐ€ Elasticsearch ์ธ์Šคํ„ด์Šค์— HTTP ์š”์ฒญ์„ ๋ณด๋ƒˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค(๊ธฐ์กด ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— TCP ํ•ธ๋“œ์…ฐ์ดํฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). 18ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์œผ๋ฉฐ ์‹œ๊ฐ„์€ ๋Œ€๋žต ์˜ˆ์ƒ๋˜๋Š” ์ง€์—ฐ(ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธก์ •ํ•  ๋•Œ 20-30ms)๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํŒŒ๋ž€์ƒ‰ ์„น์…˜์—๋Š” 86ms๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ์š”? ํŒจํ‚ท 333์„ ํ†ตํ•ด ์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ๋‹ค์Œ์—๊ฒŒ HTTP GET ์š”์ฒญ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. /latest/meta-data/iam/security-credentials, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์งํ›„์— ๋™์ผํ•œ TCP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋˜ ๋‹ค๋ฅธ GET ์š”์ฒญ์ด /latest/meta-data/iam/security-credentials/arn:...

์šฐ๋ฆฌ๋Š” ์ถ”์  ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ชจ๋“  ์š”์ฒญ์—์„œ ์ด๊ฒƒ์ด ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” DNS ํ™•์ธ์ด ์•ฝ๊ฐ„ ๋Š๋ฆฝ๋‹ˆ๋‹ค(์ด ํ˜„์ƒ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ์ง€๋งŒ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ๋ฅผ ์œ„ํ•ด ์ €์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค). ๊ธด ์ง€์—ฐ์˜ ์›์ธ์€ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•œ AWS ์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค ํ˜ธ์ถœ ๋•Œ๋ฌธ์ธ ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

๊ฐ€์„ค 2: AWS์— ๋Œ€ํ•œ ๋ถˆํ•„์š”ํ•œ ํ˜ธ์ถœ

๋‘ ๋์  ๋ชจ๋‘์— ์†ํ•จ AWS ์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ 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๋ถ„ ๋™์•ˆ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ฐ›์€ ์ธ์ฆ์„œ์˜ ์‹ค์ œ ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์™€ EC2 ์ธ์Šคํ„ด์Šค ๋ชจ๋‘์—์„œ ์œ„์˜ cURL ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ธ์ฆ์„œ์˜ ์œ ํšจ ๊ธฐ๊ฐ„์€ ์ •ํ™•ํžˆ 15๋ถ„์œผ๋กœ ํ›จ์”ฌ ์งง์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ์ž„์‹œ ์ธ์ฆ์„œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. 15๋ถ„ ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— AWS SDK๋Š” ํ›„์† ์š”์ฒญ ์‹œ ์ด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋ชจ๋“  ์š”์ฒญ์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ์„œ ์œ ํšจ๊ธฐ๊ฐ„์ด ์งง์•„์ง„ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

AWS ์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” Kubernetes๊ฐ€ ์•„๋‹Œ EC2 ์ธ์Šคํ„ด์Šค์™€ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํ‚ค์•” - ๊ฐ Kubernetes ๋…ธ๋“œ์˜ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž(ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด)๊ฐ€ ๋งˆ์น˜ EC2 ์ธ์Šคํ„ด์Šค์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํฌ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ์— IAM ์—ญํ• ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. KIAM์€ AWS ์ธ์Šคํ„ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ ์ด์ „์— AWS๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ํ•œ ์บ์‹œ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ด€์ ์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

KIAM์€ ํฌ๋“œ์— ๋‹จ๊ธฐ ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ์˜ ํ‰๊ท  ์ˆ˜๋ช…์ด EC2 ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ์งง๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ์˜ ๊ธฐ๋ณธ ์œ ํšจ ๊ธฐ๊ฐ„ ๊ฐ™์€ 15๋ถ„.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‘ ๊ธฐ๋ณธ๊ฐ’์„ ์„œ๋กœ ๊ฒน์ณ ๋†“์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ œ๊ณต๋œ ๊ฐ ์ธ์ฆ์„œ๋Š” 15๋ถ„ ํ›„์— ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AWS Java SDK๋Š” ๋งŒ๋ฃŒ ๋‚ ์งœ๊นŒ์ง€ 15๋ถ„ ๋ฏธ๋งŒ ๋‚จ์€ ์ธ์ฆ์„œ๋ฅผ ๊ฐ•์ œ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž„์‹œ ์ธ์ฆ์„œ๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๊ฐ•์ œ๋กœ ๊ฐฑ์‹ ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด AWS API์— ๋Œ€ํ•œ ๋ช‡ ๋ฒˆ์˜ ํ˜ธ์ถœ์ด ์ˆ˜๋ฐ˜๋˜๊ณ  ์ง€์—ฐ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. AWS Java SDK์—์„œ ์šฐ๋ฆฌ๋Š” ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์š”์ฒญ, ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์œ ํšจ ๊ธฐ๊ฐ„์ด ๋” ๊ธด ์ธ์ฆ์„œ๋ฅผ ์š”์ฒญํ•˜๋„๋ก KIAM์„ ์žฌ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ž AWS ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค์˜ ์ฐธ์—ฌ ์—†์ด ์š”์ฒญ์ด ํ๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ง€์—ฐ ์‹œ๊ฐ„์€ EC2๋ณด๋‹ค ํ›จ์”ฌ ๋‚ฎ์€ ์ˆ˜์ค€์œผ๋กœ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ๋ฌธ์ œ์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์›์ธ ์ค‘ ํ•˜๋‚˜๋Š” Kubernetes๋‚˜ ํ”Œ๋žซํผ์˜ ๋‹ค๋ฅธ ์š”์†Œ์˜ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๊ฐ€ ์ด์‹ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ทผ๋ณธ์ ์ธ ๊ฒฐํ•จ์„ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์„œ๋กœ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ํ•ฉ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด์ „์— ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•œ ์ ์ด ์—†๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ํ˜ผํ•ฉํ•˜์—ฌ ๋” ํฐ ๋‹จ์ผ ์‹œ์Šคํ…œ์„ ํ˜•์„ฑํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์•„์•„, ์š”์†Œ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์˜ค๋ฅ˜์˜ ์—ฌ์ง€๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์—”ํŠธ๋กœํ”ผ๋„ ๋†’์•„์ง‘๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ธด ์ง€์—ฐ ์‹œ๊ฐ„์€ Kubernetes, KIAM, AWS Java SDK ๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ฒ„๊ทธ๋‚˜ ์ž˜๋ชป๋œ ๊ฒฐ์ •์œผ๋กœ ์ธํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” KIAM๊ณผ AWS Java SDK์˜ ๋‘ ๊ฐ€์ง€ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋ณธ ์„ค์ •์„ ๊ฒฐํ•ฉํ•œ ๊ฒฐ๊ณผ์˜€์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„์ ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ฆ‰ AWS Java SDK์˜ ํ™œ์„ฑ ์ธ์ฆ์„œ ๊ฐฑ์‹  ์ •์ฑ…๊ณผ KAIM์˜ ์งง์€ ์ธ์ฆ์„œ ์œ ํšจ ๊ธฐ๊ฐ„์ด ๋ชจ๋‘ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ฉ์น˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ด๊ณ  ๋…ผ๋ฆฌ์ ์ธ ์†”๋ฃจ์…˜์„ ๊ฒฐํ•ฉํ•  ๋•Œ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

AWS IAM์„ Kubernetes์™€ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ KIAM ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ ์ œ์ž‘์ž๋กœ๋ถ€ํ„ฐ.

์šฐ๋ฆฌ ๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”:

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€