์ด์ ๊ธ์ธ [ํธ๋ฌ๋ธ ๋นต์ผ] 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) ์ด ์ฆ๊ฐํ๋ค๊ณ ํด์ ํฐ ๋ฌธ์ ๋ ๋์ง ์๊ฒ ์ง๋ง, ํด๋ฌ์คํฐ ๋ด์๋ ๋ค์ํ ์๋น์ค๋ค์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ํ๋์ ํ(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 ๊ฐ ์๋ ๋ ธ๋๋ง ๋ฑ๋กํด์ค๋๋ค.
์ข ๊ธฐ์ ์ ?์ผ๋ก ์๊ธฐํด๋ณด์๋ฉด,
Istio ์ ์ฉ Kapenter ์ kind: NodePool ๋ฅผ ๋ง๋ค๊ณ , Istio ๊ด๋ จ ๋ฆฌ์์ค๋ค์ ๋ชจ๋ ํด๋น NodePool ๋ก ์์ฑ๋๋ ๋ ธ๋์ ์ค์ผ์ค๋ง ๋๊ฒ๋ ๊ตฌ์ฑํฉ๋๋ค.
์์ NodePool.yaml ์ ๋ช ์๋์ด ์๋ Label ๊ณผ Taint&Toleration ์ ์ด์ฉํด์ Istio ๋ฆฌ์์ค๋ฅผ ์ค์ผ์ค๋งํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ AWS LB Controller ์ kind: Ingress ๋ฅผ ์๋์ ๊ฐ์ด ์์ฑํด์ค์ผ๋ก์จ, Istio ๊ฐ ์๋ ๋ ธ๋๋ง Target Group ์ ๋ฑ๋ก์ํฌ ์ ์์ต๋๋ค.
์ค์ ๋ก ์ด๋ ๊ฒ Istio Gateway Pod ๋ง ์๋ ๋ ธ๋๋ง Target Group ์ ๋ฑ๋กํ๋ 6๊ฐ์ ๋์ ์ง์๋๋ 504 Gateway Time ์ด ๋ง๋ฒ์ฒ๋ผ ์ฌ๋ผ์ก์ต๋๋ค..
๋๋ฒ์งธ ๋ฐฉ๋ฒ
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ Service ์ ExternalTrafficPolicy ๋ฅผ Local ๋ก ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
default ๋ Cluster
ExternalTrafficPolicy: Local ๋ก ์ค์ ํ๊ฒ ๋๋ฉด ์๋ ์ด๋ฏธ์ง์ฒ๋ผ ๋์ํ๊ฒ ๋ฉ๋๋ค.
AWS ABL ๊ฐ ๊ณจ๊ณ ๋ฃจ ๋ผ์ฐํ (๊ธฐ๋ณธ ๋ผ์ด๋๋ก๋น)ํ๊ฒ ๋๋๋ฐ, ๋ง์ฝ Istio Gateway Pod ๊ฐ ์๋ ๋ ธ๋๋ผ๋ฉด ๋ธ๋ํ์ ๋น ์ง๊ฒ ๋๊ณ , ์๋ ๋ ธ๋๋ผ๋ฉด ๋ง์ ๋ท๋จ์ผ๋ก ํธ๋ํฝ์ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ ExternalTrafficPolicy: Cluster ๋ผ๋ฉด ์๋์ฒ๋ผ ๋์ํฉ๋๋ค.
ExternalTrafficPolicy: Local ์ ๊ฒฝ์ฐ ๋ถํ์ํ ํ(hop) ์ ์ถ๊ฐ์ํค์ง ์์ Latency ๋ฅผ ๊ฐ์์ํฌ ์ ์๊ณ , SNAT ์ด ์งํ๋์ง ์์ Client IP ๋ฅผ ๋ณด์กดํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ํธ๋ํฝ์ด ๊ณจ๊ณ ๋ฃจ ๋ถ์ฐ๋์ง ์์ ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
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 ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ถ๊ธํด ํ๋ ๋ถ๋ค์๊ฒ๋ ์๋ ค์ฃผ๋ฌ ๊ฐ๋ณด๊ฒ ์ต๋๋ค!!
AWS SG ๊ด๋ จ ํธ๋ฌ๋ธ ์ํ ๋ด์ฉ์ Istio Issue ์์ ์ง์ ํ์ธํ์๊ธธ ๋ฐ๋๋๋ค!
PS.
์์ฌํ์ง๋ง ์ฉ์์๋ค์ด ๋ฒ์ธ์ด ์๋์๋ ์ด์ ! - ์ด์ ๊ธ ์ฐธ๊ณ
Q) AWS ALB ์ timeoute=600 ์ด๋ก ๋ฌด์๋ฏธํ ์ปค๋ฅ์ ์์ ์ฆ๊ฐ
AWS ALB ๋ AWS Managed ์๊ธฐ ๋๋ฌธ์ ์ปค๋ฅ์ ์๊ฐ ๋์ด๋๋ค๊ณ ํด์ ์ฑ๋ฅ๋ฉด์์ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์์์ ํผํฌ๋จผ์ค๋ฅผ ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ด์ฃ .
Q) Istio ์ ๋ฆฌ์์ค ๋ถ์กฑ ์์ฌ
Istio ์ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํ๋ค๊ณ ์๊ฐํ์ฌ 2 CPU, 4G Memory ๋ก ์ฆ์คํ์ง๋ง, ์๋ฏธ๊ฐ ์๋ ํ๋์ด์์ต๋๋ค.
๋ฉํธ๋ฆญ์ ํ์ธํ์ ๋ ์ด๋ฏธ ๊ธฐ์กด์ ์ฌ์ฉํ๊ณ ์๋ 250m CPU, 1G Memory ๋ก๋ ์์ฃผ์์ฃผ ์ถฉ๋ถํฉ๋๋ค.
๊ทธ๋ผ ์ค๋์ ์ฌ๊ธฐ๊น์ง!