[์นด๋‚˜๋ฆฌ ๋ฐฐํฌ blue, green ํ‘œํ˜„]

- blue ๋Š” ํ˜„์žฌ ํ”„๋กœ๋•์…˜์—์„œ ์„œ๋น„์Šค ์ค‘์ธ ์•ˆ์ •ํ™” ๋ฒ„์ „์„ ์˜๋ฏธ.

- green ์€ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ ๋Œ€๊ธฐ์ค‘์ธ ๋ฒ„์ „์„ ์˜๋ฏธ.

๊ฒฐ๊ณผ์ ์œผ๋กœ green -> blue ๋กœ ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  green ๋ฒ„์ „์ด ์•ˆ์ •ํ™”๋˜๋ฉด green ์ด ์ƒˆ๋กœ์šด blue ๋ฒ„์ „์ด ๋œ๋‹ค.

ํ‘œํ˜„์ด ์ค‘์š”ํ• ๊นŒ ์‹ถ๋‹ค๊ฐ€๋„ ๊ฒฐ๊ตญ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•  ๋•Œ, ์ž˜๋ชป๋œ ํ‘œํ˜„์˜ ์•Ž์œผ๋กœ ์ธํ•ด ์—‡๋น„์Šทํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋˜๋Š”๊ฑธ ํ”ผํ•œ๋‹ค.

 

[์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์ •]

- metadata/annotations/nginx.ingress.kubernetes.io/canary: "true"

์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์นด๋‚˜๋ฆฌ ์„ค์ •์œผ๋กœ ํ•˜๊ธฐ์œ„ํ•ด ์œ„ ๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค. ์—†์œผ๋ฉด ๋™์ผ ingress ์„ค์ •์ด 2๊ฐœ ์ด์ƒ ์กด์žฌํ•  ์‹œ, nginx ๋ผ์šฐํŒ…์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค. ๋™์ผ spec.rules.host: example.com ์œผ๋กœ 2๊ฐœ๊ฐ€ ์žกํ˜€์žˆ์„ ๋•Œ, canary: "true" ๋กœ ์ธํ•˜์—ฌ ๋ถ„๋ฐฐ ์š”์ฒญ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

- metadata/annotations/nginx.ingress.kubernetes.io/canary-weight: "10" 

100๊ฐœ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด 10๊ฐœ์˜ ์š”์ฒญ์€ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋กœ ๊ฐ€๋„๋ก ์„ค์ •ํ•œ๋‹ค. ํŠธ๋ž˜ํ”ฝ์˜ ๋ฐฑ๋ถ„์œจ์„ ํ‘œํ˜„ํ•œ๋‹ค. 

 

[์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์นด๋‚˜๋ฆฌ ์ฐธ๊ณ ]

https://kubernetes.github.io/ingress-nginx/examples/canary/

 

โ˜…โ˜…โ˜…

 

[nginx ํ•ด์‹œ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…]

ํด๋ผ์ด์–ธํŠธ์˜ ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์‹œ๊ธฐ๋ฐ˜์œผ๋กœ ์ž…๋ ฅ๋œ๋‹ค. ํŠน์ • ๋ฐ์ดํ„ฐ๋Š” IP, URI, cookie ๊ฐ’ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ, ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์ˆซ์ž๊ฐ€ ngixn ๋’ท ๋‹จ์˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์ด๋‹ค. "hash(client_ip) % number_of_backends" ๋ฅผ ๊ฐ€์ง€๊ณ  ํŠน์ • ์„œ๋ฒ„ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ฐ’์„ ํ†ตํ•˜์—ฌ ํŠน์ • client_ip ๋Š” ํŠน์ • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ๋งŒ ์š”์ฒญ์ด ๊ฐ€๊ฒŒ๋œ๋‹ค. ์žฅ์ ์œผ๋กœ๋Š” ์ผ๊ด€๋œ ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋ฉฐ, ๋กค๋ฐฑ ์‹œ์—๋„ ๊ธฐ์กด ๋ผ์šฐํŒ…์— ํฐ ๋ณ€ํ™”๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š๋Š”๋‹ค. ์ผ๊ด€๋œ ํ•ด์‹œ๋ผ๊ณ  ํ•œ๋‹ค.

 

โ˜…โ˜…โ˜…

 

[Charles Proxy, Enable SSL Proxy ์—  include *.* ๋ฅผ ํ•˜์ง€๋ง์ž]

*.* ์„ค์ •์€ ๋ชจ๋“  ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด์„œ SSL Proxing ์„ ํ™œ์„ฑํ™” ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. (mac ๊ธฐ์ค€ ๋‹จ์ถ•ํ‚ค : shift + cmd + L)
"*" ๋Š” ์™€์ผ๋“œ ์นด๋“œ. "*.*" ์€ example.com, api.myapp.com, localhost:8443 ์™€ ๊ฐ™์€ ๋ชจ๋“  ๋„๋ฉ”์ธ์„ ํฌํ•จํ•œ๋‹ค. ๊ฒฐ๊ตญ์— https ์š”์ฒญ/์‘๋‹ต์˜ ๋ณธ๋ฌธ, ํ—ค๋”, ์ฟ ํ‚ค, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์˜ ๋‚ด์šฉ์„ ๋ณตํ˜ธํ™”ํ•˜๋Š” ์‹œ๋„๋ฅผ ํ•œ๋‹ค. ์œ„ ๋‚ด์šฉ์œผ๋กœ ์ธํ•ด์„œ ํ…Œ์ŠคํŠธํฐ ๋””๋ฐ”์ด์Šค์—์„œ firebase ํ†ต์‹ ์ด ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๋ฅผ ํ™•์ธํ–ˆ๋‹ค. 

 

โ˜…โ˜…โ˜…

 

[ํ† ์Šค ์Šฌ๋ž˜์‹œ24 : ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๊ณ  ์‹ถ์€ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์†Œํ”„ํŠธ์Šคํ‚ฌ 5๊ฐ€์ง€] (๋งํฌ)

๋‚˜๋Š” ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋‹ค. ์–ด๋Š์ƒˆ ์—ฐ์ฐจ๊ฐ€ ์ฐจ๋ฒ„๋ ธ๋‹ค.. ํ•˜์ง€๋งŒ ์ง€๊ธˆ๋„ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ ..? ์˜์ƒ์‹œ์ฒญํ–ˆ๋‹ค.  ๋‚ด์šฉ์„ ๋ณด๋ฉด์„œ ๋Š๋‚€๊ฑฐ, ๋‚˜๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตํžŒ ๋ถ€๋ถ„๋“ค๋„ ์žˆ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์ฑ„์›Œ๋‚˜๊ฐ„ ๋ถ€๋ถ„๋“ค๋„ ์žˆ์–ด๋ณด์˜€๋‹ค.

(1) ๊ทธ๋ฆผ์œผ๋กœ ์†Œํ†ตํ•˜๊ธฐ

  • ๋ง, ๋ฌธ์žฅ, ํ…์ŠคํŠธ ๋ณด๋‹จ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ๊ทธ๋ฆผ์œผ๋กœ ์†Œํ†ตํ•œ๋‹ค.
  • ๋‚ด๊ฐ€ ์ฃผ๋กœ ํ•˜๋Š”๊ฑด ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ, ํ”Œ๋กœ์šฐ ์ฐจํŠธ, c4 modeling ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

(2) ๋‚˜๋งŒ์˜ TODO List ๋งŒ๋“ค๊ธฐ

  • ๋‚ด๊ฐ€ ์ค‘์‹ฌ์ธ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค. ํšŒ์‚ฌ์˜ ์—…๋ฌด ์ค‘์‹ฌ์ด ์•„๋‹Œ ๋‚ด ๊ฐœ์ธ์˜ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑ๋œ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ.
  • ์–ด๋””์„œ๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ‘๊ทผ์„ฑ์ด ์ข‹์•„์•ผ ํ•œ๋‹ค. ๊ณ„์† ์†์ด ๊ฐ€์•ผ ํ•œ๋‹ค. ๋‚˜์˜ ๋‡Œ์— ์žˆ๋Š” ๋‚ด์šฉ๊ณผ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ๋‚ด์šฉ์„ ๋™๊ธฐํ™”ํ•œ๋‹ค.

(3) ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ์•ˆ๋ชฉ ๊ธฐ๋ฅด๊ธฐ

(4) ์™œ? ๋ผ๊ณ  ๋ฌป๊ธฐ

  • ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒ๋Œ€๋ฐฉ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด "์™œ?" ๋ผ๋Š” ์งˆ๋ฌธ์„ ํ•ด๋ณธ๋‹ค. ๋งน๋ชฉ์ ์œผ๋กœ ํ•˜์ง€ ๋ง๊ธฐ.
  • ๋‚ด๊ฐ€ ์š”์ฒญํ•  ๋•Œ์—๋„ "์™œ?" ์š”์ฒญ์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์Šต๊ด€์„ ๋“ค์ด๋ฉด์„œ ์š”์ฒญ์„ ํ•œ๋‹ค.

(5) ๋‚˜๋งŒ์˜ ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฒ• ์ฐพ๊ธฐ

Posted by doubler
,