NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒ„์ „์„ ์„ ๋ณด์ด๊ฒŒ ๋˜์–ด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ (NSM)์€ NGINX Plus ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ํ™˜๊ฒฝ์—์„œ ์ปจํ…Œ์ด๋„ˆ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒˆ๋“คํ˜• ๊ฒฝ๋Ÿ‰ ์„œ๋น„์Šค ๋ฉ”์‹œ์ž…๋‹ˆ๋‹ค.

NSM์€ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค. ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ด ๋ณด์‹œ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋‹ค๋ฆฌ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. GitHub์—์„œ.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐฉ๋ฒ•๋ก ์˜ ๊ตฌํ˜„์€ ์ œ๊ณต ๊ทœ๋ชจ์™€ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์€ ๋”์šฑ ๋ณต์žกํ•ด์ง€๊ณ , ๋””๋ฒ„๊น… ๋ฌธ์ œ๋Š” ๋”์šฑ ์–ด๋ ค์›Œ์ง€๋ฉฐ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ ์  ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

NSM์€ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ, ์ด๋Š” ์ด์ œ ๊ทธ ์–ด๋Š ๋•Œ๋ณด๋‹ค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ์ถœ๋กœ ์ธํ•ด ํšŒ์‚ฌ๋Š” ๋งค์ถœ๊ณผ ํ‰ํŒ ์†์‹ค๋กœ ์ธํ•ด ์—ฐ๊ฐ„ ์ˆ˜๋ฐฑ๋งŒ ๋‹ฌ๋Ÿฌ์˜ ์†์‹ค์„ ์ž…์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NSM์€ ๋ชจ๋“  ์—ฐ๊ฒฐ์ด mTLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋˜๋„๋ก ๋ณด์žฅํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ•ด์ปค๊ฐ€ ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตํ†ต ๊ด€๋ฆฌ. ์ƒˆ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถœ์‹œํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NSM์˜ ์ง€๋Šฅํ˜• ์ปจํ…Œ์ด๋„ˆ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ƒˆ๋กœ์šด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ์ œํ•œ ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†๋„ ์ œํ•œ ๋ฐ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ์™€ ๊ฐ™์€ ๊ธฐํƒ€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ ํ๋ฆ„์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ˆˆ์— ๋ณด์ด๊ฒŒ ํ•จ. ์ˆ˜์ฒœ ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋””๋ฒ„๊น… ๋ฐ ์‹œ๊ฐํ™”์˜ ์•…๋ชฝ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NSM์€ NGINX Plus์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ‘œ์‹œํ•˜๋Š” ๋‚ด์žฅ Grafana ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ตฌํ˜„๋œ Open Tracing์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ž์„ธํžˆ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฐ์†ก, ๊ท€ํ•˜์˜ ํšŒ์‚ฌ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ํšŒ์‚ฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Kubernetes์—์„œ ์ „์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ. NSM์€ ๋ ˆ๊ฑฐ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฉ์น˜๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„๋œ NGINX Kubernetes Ingress Controller์˜ ๋„์›€์œผ๋กœ ๋ ˆ๊ฑฐ์‹œ ์„œ๋น„์Šค๋Š” ๋ฉ”์‹œ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

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

NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

NSM์€ ์ˆ˜ํ‰(์„œ๋น„์Šค ๊ฐ„) ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•œ ํ†ตํ•ฉ ๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ๊ณผ ๋‹จ์ผ ์ œ์–ด ํ”Œ๋ ˆ์ธ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์ˆ˜์ง ํŠธ๋ž˜ํ”ฝ์„ ์œ„ํ•œ ๋‚ด์žฅํ˜• NGINX Plus Ingress Controller๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ œ์–ด ํ‰๋ฉด์€ NGINX Plus ๋ฐ์ดํ„ฐ ํ‰๋ฉด์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„ ๋ฐ ์ตœ์ ํ™”๋˜์—ˆ์œผ๋ฉฐ NGINX Plus ์‚ฌ์ด๋“œ์นด์— ๋ถ„์‚ฐ๋œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

NSM์—์„œ๋Š” ๋ฉ”์‹œ์˜ ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋‹ค์Œ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜๊ณผ ์ธํ„ฐํŽ˜์ด์Šคํ•ฉ๋‹ˆ๋‹ค.

  • Prometheus ๋งค๊ฐœ๋ณ€์ˆ˜ ์‹œ๊ฐํ™”, ๋‚ด์žฅ NSM ํŒจ๋„์ธ Grafana๋Š” ์ž‘์—…์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์—์„œ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Kubernetes ์ˆ˜์‹  ์ปจํŠธ๋กค๋Ÿฌ
  • ๋ฉ”์‹œ์—์„œ ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌ, ๋ฐฐํฌ ๋ฐ ์—…๋ฐ์ดํŠธํ•˜๋Š” CA SPIRE;
  • ์ œ์–ด ํ”Œ๋ ˆ์ธ์—์„œ ์‚ฌ์ด๋“œ์นด๋กœ ๊ฒฝ๋กœ ์—…๋ฐ์ดํŠธ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์ธ NATS
  • ์˜คํ”ˆ ํŠธ๋ ˆ์ด์‹ฑ, ๋ถ„์‚ฐ ๋””๋ฒ„๊น…(Zipkin ๋ฐ Jaeger ์ง€์›)
  • Prometheus๋Š” ์š”์ฒญ ์ˆ˜, ์—ฐ๊ฒฐ ๋ฐ SSL ํ•ธ๋“œ์…ฐ์ดํฌ์™€ ๊ฐ™์€ NGINX Plus ์‚ฌ์ด๋“œ์นด์˜ ํŠน์„ฑ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ

๋ฐ์ดํ„ฐ ํ”Œ๋ ˆ์ธ์ธ NGINX Plus๋Š” ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ(์ˆ˜ํ‰ ํŠธ๋ž˜ํ”ฝ) ๋ฐ Ingress ์ปจํŠธ๋กค๋Ÿฌ(์ˆ˜์ง)๋ฅผ ๋‹ค๋ฃจ๋ฉฐ ์„œ๋น„์Šค ๊ฐ„์˜ ์ปจํ…Œ์ด๋„ˆ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์ƒํ˜ธ TLS(mTLS) ์ธ์ฆ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ;
  • ๊ฒฐํ•จ ํ—ˆ์šฉ;
  • ์†๋„ ์ œํ•œ;
  • ํšŒ๋กœ ์ฐจ๋‹จ;
  • ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐ ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ
  • ์•ก์„ธ์Šค ์ œ์–ด.

NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ ์ถœ์‹œ

NSM์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Kubernetes ํ™˜๊ฒฝ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. NGINX Service Mesh๋Š” Amazon Elastic Container Service for Kubernetes(EKS), Azure Kubernetes Service(AKS), Google Kubernetes Engine(GKE), VMware vSphere ๋ฐ ํ•˜๋“œ์›จ์–ด ์„œ๋ฒ„์— ๋ฐฐํฌ๋œ ์ผ๋ฐ˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ Kubernetes ํ”Œ๋žซํผ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
  • ์ˆ˜๋‹จ kubectl, NSM์ด ์„ค์น˜๋  ๋จธ์‹ ์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
  • NGINX Service Mesh ๋ฆด๋ฆฌ์Šค ํŒจํ‚ค์ง€์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ NSM ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. nginx-meshctl, NSM์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ NSM์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ์ค‘์— ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ NSM์ด ๋ณ„๋„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์‹คํ–‰ ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(๋จผ์ € ๋‹ค์šด๋กœ๋“œ ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋„ฃ์œผ๋ฉด ์•ฝ. ์—ญ์ž):

$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; 
 ./nginx-meshctl deploy  
  --nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" 
  --nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" 
  --nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" 
  --nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server...

Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.

๊ณ ๊ธ‰ ์„ค์ •์„ ํฌํ•จํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

$ nginx-meshctl deploy โ€“h

์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. nginx-๋ฉ”์‹œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl get pods โ€“n nginx-mesh
NAME                                 READY   STATUS    RESTARTS   AGE
grafana-6cc6958cd9-dccj6             1/1     Running   0          2d19h
mesh-api-6b95576c46-8npkb            1/1     Running   0          2d19h
nats-server-6d5c57f894-225qn         1/1     Running   0          2d19h
prometheus-server-65c95b788b-zkt95   1/1     Running   0          2d19h
smi-metrics-5986dfb8d5-q6gfj         1/1     Running   0          2d19h
spire-agent-5cf87                    1/1     Running   0          2d19h
spire-agent-rr2tt                    1/1     Running   0          2d19h
spire-agent-vwjbv                    1/1     Running   0          2d19h
spire-server-0                       2/2     Running   0          2d19h
zipkin-6f7cbf5467-ns6wc              1/1     Running   0          2d19h

์ˆ˜๋™ ๋˜๋Š” ์ž๋™ ์ฃผ์ž… ์ •์ฑ…์„ ์„ค์ •ํ•˜๋Š” ๋ฐฐํฌ ์„ค์ •์— ๋”ฐ๋ผ NGINX ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ถ”๊ฐ€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์—

์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ฉด ์ž  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋””ํดํŠธ ๊ฐ’๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ Pod๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ, ์ฆ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ž  ๊ด€๋ จ ์‚ฌ์ด๋“œ์นด:

$ kubectl apply โ€“f sleep.yaml
$ kubectl get pods โ€“n default
NAME                     READY   STATUS    RESTARTS   AGE
sleep-674f75ff4d-gxjf2   2/2     Running   0          5h23m

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž  NGINX Plus ํŒจ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์‚ฌ์ด๋“œ์นด์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

$ kubectl port-forward sleep-674f75ff4d-gxjf2 8080:8886

๊ทธ๋Ÿผ ๊ทธ๋ƒฅ ๋“ค์–ด๊ฐ€์ž ์—ฌ๊ธฐ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ. Prometheus์— ์—ฐ๊ฒฐํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž .

๊ฐœ๋ณ„ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ์ œ์–ด, ์†๋„ ์ œํ•œ, ํšŒ๋กœ ์ฐจ๋‹จ๊ณผ ๊ฐ™์€ ํŠธ๋ž˜ํ”ฝ ์ •์ฑ…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ

๊ฒฐ๋ก 

NGINX ์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ๋‹ค์Œ์—์„œ ๋ฌด๋ฃŒ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌํ„ธ F5. ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”. ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ์—๊ฒŒ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ์„ธ์š”.

NGINX Plus Ingress Controller๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋ ค๋ฉด ํ™œ์„ฑํ™”ํ•˜์„ธ์š”. ๋ฌด๋ฃŒ ํ‰๊ฐ€ํŒ ๊ธฐ๊ฐ„ 30์ผ ๋™์•ˆ ๋˜๋Š” ๋ฌธ์˜ํ•˜๊ธฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฒˆ์—ญ: ํšŒ์‚ฌ ์—”์ง€๋‹ˆ์–ด Pavel Demkovich ์‚ฌ์šฐ์Šค ๋ธŒ๋ฆฌ์ง€. ์›” RUB 15์˜ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ. ๊ทธ๋ฆฌ๊ณ  ๋ณ„๋„์˜ ๋ถ€์„œ๋กœ - ๊ต์œก ์„ผํ„ฐ ์Šฌ๋Ÿผ, ์—ฐ์Šตํ•˜๊ณ  ์—ฐ์Šต๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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