๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

์ด์ „ ๊ธ€์ธ [ํŠธ๋Ÿฌ๋ธ” ๋นต์•ผ] 6๊ฐœ์›” ๋™์•ˆ ์ฆ๊ฑฐ์› ๋‹ค.. ์ž˜๊ฐ€๊ณ  ๋‹ค์‹  ๋ณด์ง€ ๋ง์ž! - 504 Gateway Timeout (์ด์Šˆ ํŽธ) ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค!

 

๊ณฐ๊ณฐ์ด ์ƒ๊ฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 504 Gateway Timeout ... ๊ฒฐ๊ตญ ์–ด๋””์„ ๊ฐ€ Response ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ ๋ฐ›์ง€ ๋ชปํ•ด์„œ ์ƒ๊ธฐ๋Š” ์ด์Šˆ ์ž…๋‹ˆ๋‹ค.

์–ด๋”œ๊นŒ?

 

์–ด๋””์„œ Response ์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์„๊นŒ์š”? ์œ„ ์•„ํ‚คํ…์ฒ˜๋งŒ ๋ดค์„๋•, ๋” ์ด์ƒ ๋„์ €ํžˆ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ์œ„ ์ด๋ฏธ์ง€๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ฒดํ™”์‹œ์ผœ๋ดค์Šต๋‹ˆ๋‹ค.

์ข€ ๋” ๊ตฌ์ฒดํ™”๋œ ์•„ํ‚คํ…์ฒ˜

 

AWS ALB ๋Š” Target Group ์— ๋“ฑ๋ก๋œ ๋…ธ๋“œ์—๊ฒŒ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ํ•ด์ฃผ๋Š”๋ฐ, Karpenter ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋…ธ๋“œ๋“ค์€ ๋ชจ๋‘ ๋™์ผํ•œ Target Group ์— ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

 

(๋Œ€์ˆ˜๋กญ์ง€ ์•Š๊ฒŒ ๋™์ผํ•œ Target Group ์— ๋“ฑ๋ก๋˜๊ฒŒ๋” ๊ตฌ์„ฑํ–ˆ์ฃ )

 

์—ฌ๊ธฐ์„œ ์˜๋ฌธ์  ํ•˜๋‚˜๊ฐ€ ๋“ญ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Istio Gateway Pod ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ์— ๋ผ์šฐํŒ… ๋˜๋ฉด ํŠธ๋ž˜ํ”ฝ์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์•„์‹ ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์ •๋‹ต์„ ์•Œ์•„์ฐจ๋ฆฌ์‹ค ๊ฒ๋‹ˆ๋‹ค.

 

iptables ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ๋ฐ๋ชฌ์…‹์œผ๋กœ ์กด์žฌํ•˜๋Š” kube-proxy ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” iptables ์— ์˜ํ•ด Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋กœ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ผ์šฐํŒ…ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ™‰(hop)์ด ํ•˜๋‚˜ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜์ฃ .

Hop += 1

 

ํ•˜๋‚˜์˜ ํ™‰(hop) ์ด ์ฆ๊ฐ€ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํฐ ๋ฌธ์ œ๋Š” ๋˜์ง€ ์•Š๊ฒ ์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—๋Š” ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ™‰(hop) ์ผ์ง€๋ผ๋„ ์Œ“์ด๋ฉด ์–ด๋งˆ์–ด๋งˆํ•œ ์–‘์ด ๋˜๊ณ , ๊ฒฐ์ฝ” ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

์•„ํ•˜? ์›์ธ์„ ์ถฉ๋ถ„ํžˆ ์•Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.!

 

๊ฒฐ๊ตญ ์ฆ๊ฐ€ํ•œ ํ™‰(hop) ์— ์˜ํ•ด Latency ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ์ด์˜€๊ณ , ์ด๋กœ ์ธํ•ด 504 Gateway Timeout ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Karpenter ์— ์˜ํ•ด ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ƒ์„ฑ๋˜๋Š” ๋…ธ๋“œ๋Š” ๊ตฌ๋ถ„์—†์ด AWS Target Group ์— ๋“ฑ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ, ๋…ธ๋“œ๋„ ์ฆ๊ฐ€ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์— ํ•œ๋ฒˆ์— HIT ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค.

๋งŒ์•ฝ 20๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๊ณ , 2๊ฐœ์— ๋…ธ๋“œ์—๋งŒ Istio Gateway Pod ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ AWS ALB ๋ผ์šด๋“œ ๋กœ๋นˆ์— ์˜ํ•ด 2/20 ํ™•๋ฅ ๋กœ๋งŒ ์ถ”๊ฐ€ ํ™‰(hop) ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š” ๊ฑฐ์ฃ . ๊ทธ ๋ง์€ ๋ฐ˜๋Œ€๋กœ 18/20 ํ™•๋ฅ ๋กœ ํ™‰(hop) ์ด ๊ณ„์† ์ฆ๊ฐ€๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ถˆํ•„์š”ํ•œ ํ™‰(hop) ์„ ์ค„์—ฌ์ค„ ํ•„์š”๊ฐ€ ์žˆ๊ณ , ์œ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฐธ๊ณ ํ–ˆ์„ ๋•Œ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํŠธ๋ž˜ํ”ฝ์ด ์ผ๋ฐ˜ ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—๋งŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ,

 

์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ Target Group ์— Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฒƒ์ด๊ณ ,

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ExternalTrafficPolicy: Local ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

 

 

์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ• 


 

์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ Target Group ์— Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค.

Target Group ์— Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ ๋“ฑ๋ก

 

์ข€ ๊ธฐ์ˆ ์ ?์œผ๋กœ ์–˜๊ธฐํ•ด๋ณด์ž๋ฉด,

 

Istio ์ „์šฉ Kapenter ์˜ kind: NodePool ๋ฅผ ๋งŒ๋“ค๊ณ , Istio ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋“ค์€ ๋ชจ๋‘ ํ•ด๋‹น NodePool ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง ๋˜๊ฒŒ๋” ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์ œ NodePool.yaml ์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š”  Label ๊ณผ Taint&Toleration ์„ ์ด์šฉํ•ด์„œ Istio ๋ฆฌ์†Œ์Šค๋ฅผ ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ NodePool

 

๊ทธ๋ฆฌ๊ณ  AWS LB Controller ์˜ kind: Ingress ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์คŒ์œผ๋กœ์จ, Istio ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ Target Group ์— ๋“ฑ๋ก์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ Ingress

 

์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ Istio Gateway Pod ๋งŒ ์žˆ๋Š” ๋…ธ๋“œ๋งŒ Target Group ์— ๋“ฑ๋กํ•˜๋‹ˆ 6๊ฐœ์›” ๋™์•ˆ ์ง€์†๋๋˜ 504 Gateway Time ์ด ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค..

 

 

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•


 

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ Service ์˜ ExternalTrafficPolicy ๋ฅผ Local ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

default ๋Š” Cluster

externalTrafficPolicy: Local

 

ExternalTrafficPolicy: Local ๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ExternalTrafficPolicy

 

AWS ABL ๊ฐ€ ๊ณจ๊ณ ๋ฃจ ๋ผ์šฐํŒ…(๊ธฐ๋ณธ ๋ผ์šด๋“œ๋กœ๋นˆ)ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ Istio Gateway Pod ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ๋ผ๋ฉด ๋ธ”๋ž™ํ™€์— ๋น ์ง€๊ฒŒ ๋˜๊ณ , ์žˆ๋Š” ๋…ธ๋“œ๋ผ๋ฉด ๋งˆ์ € ๋’ท๋‹จ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ExternalTrafficPolicy: Cluster ๋ผ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Hop += 1

 

ExternalTrafficPolicy: Local ์˜ ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ํ™‰(hop) ์„ ์ถ”๊ฐ€์‹œํ‚ค์ง€ ์•Š์•„ Latency ๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , SNAT ์ด ์ง„ํ–‰๋˜์ง€ ์•Š์•„ Client IP ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํŠธ๋ž˜ํ”ฝ์ด ๊ณจ๊ณ ๋ฃจ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ผ์šฐํŒ…์ด ๊ณจ๊ณ ๋ฃจ ๋˜์ง€ ์•Š์Œ (๊ณจ๊ณ ๋ฃจ๋ผ๋ฉด 33.3%)

ExternalTrafficPolicy: Cluster ์žฅ๋‹จ์ ์€ Local ์žฅ๋‹จ์ ์˜ ๋ฐ˜๋Œ€!

 

 

์ด ๋ฐฉ๋ฒ•๋„ ์ถฉ๋ถ„ํžˆ 504 Gateway Timeout ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ์ „ํžˆ Target Group ์— Istio Gateway Pod ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 
์–ด์ฐจํ”ผ AWS ALB ์—์„œ Istio Gateway Pod ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ๋Š” Health Check ๊ฐ€ ์•ˆ๋ ํ…Œ๋‹ˆ ๋ผ์šฐํŒ…์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ AWS ALB ๋Œ€์‹œ๋ณด๋“œ์— "์‹คํŒจ" ๊ฐ€ ํ‘œ์‹œ๋˜์ฃ . ๊ทธ๋ž˜์„œ ๋” ๊น”๋”ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์„ž์–ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ, ํŠธ๋ž˜ํ”ฝ์„ ๊ณจ๊ณ ๋ฃจ ๋ถ„์‚ฐ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋˜๋„๋ก์ด๋ฉด ๋…ธ๋“œ ๋‹น ํ•˜๋‚˜์˜ Istio Gateway Pod ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ๋ฐ๋ชฌ์…‹์ฒ˜๋Ÿผ ๋ง์ด์ฃ . 

 

๊ฒฐ๋ก 


 

์–ด๋Š ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€์—†์ง€๋งŒ ํ•ต์‹ฌ์€ Istio Gateway Pod ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋กœ ํ•œ๋ฒˆ์— ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!!

 

์˜ค๋žซ๋™์•ˆ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ด์„œ ๊ณจ์น˜๊ฐ€ ์ •๋ง ์•„ํŒ ๋Š”๋ฐ.. ๋‹คํ–‰ํžˆ ์ฝ๊ณ  ์žˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ์ ์—์„œ ๊ด€๋ จ๋œ ์•„์ด๋””์–ด๋ฅผ ์šฐ์—ฐํžˆ ์–ป๊ฒŒ ๋˜์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

Istio ๋„ ์•„๋‹ˆ์˜€๊ณ , AWS ALB ๋„ ์•„๋‹ˆ์˜€๊ณ , ์„œ๋น„์Šค ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์•„๋‹Œ.. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์ •์˜ ๋ฌธ์ œ์˜€๋˜ ๊ฑฐ์ฃ .

 

๊ทธ๋Ÿผ ์ด์ œ Istio Issue ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ถ๊ธˆํ•ด ํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ๋„ ์•Œ๋ ค์ฃผ๋Ÿฌ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!! 

https://github.com/istio/istio/issues/48578

 

AWS SG ๊ด€๋ จ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋‚ด์šฉ์€ Istio Issue ์—์„œ ์ง์ ‘ ํ™•์ธํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค!

 

PS.

์˜์‹ฌํ–ˆ์ง€๋งŒ ์šฉ์˜์ž๋“ค์ด ๋ฒ”์ธ์ด ์•„๋‹ˆ์˜€๋˜ ์ด์œ ! - ์ด์ „ ๊ธ€ ์ฐธ๊ณ 

 

Q) AWS ALB ์˜ timeoute=600 ์ดˆ๋กœ ๋ฌด์˜๋ฏธํ•œ ์ปค๋„ฅ์…˜ ์ˆ˜์˜ ์ฆ๊ฐ€

AWS ALB ๋Š” AWS Managed ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค๊ณ  ํ•ด์„œ ์„ฑ๋Šฅ๋ฉด์—์„  ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•Œ์•„์„œ ํผํฌ๋จผ์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/introduction.html

 

 

Q) Istio ์˜ ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ ์˜์‹ฌ

Istio ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ 2 CPU, 4G Memory ๋กœ ์ฆ์„คํ–ˆ์ง€๋งŒ, ์˜๋ฏธ๊ฐ€ ์—†๋˜ ํ–‰๋™์ด์˜€์Šต๋‹ˆ๋‹ค.

๋ฉ”ํŠธ๋ฆญ์„ ํ™•์ธํ–ˆ์„ ๋•Œ ์ด๋ฏธ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ 250m CPU, 1G Memory ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€!

 

๋ฐ˜์‘ํ˜•
profile on loading

Loading...