๋ฉ๋ชจ. ๋ฒ์ญ: ์๋น์ค ๋ฉ์๋ ํ์คํ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ๋ฅผ ๋ฐ๋ฅด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ ์ต์ ์ธํ๋ผ์์ ๊ด๋ จ ์๋ฃจ์
์ด ๋์์ต๋๋ค. Istio๋ ๋ง์ DevOps ์์ง๋์ด๋ค์ ์
์ ์ค๋ฅด๋ด๋ฆด ์ ์์ง๋ง, ์ ๊ณตํ๋ ๊ธฐ๋ฅ ์ธก๋ฉด์์ ํฌ๊ด์ ์ด๊ธฐ๋ ํ์ง๋ง ์ต์ํด์ง๋ ๋ฐ ์๋นํ ์๊ฐ์ด ํ์ํ ์ ์๋ ์๋นํ ์๋ก์ด ์ ํ์
๋๋ค. ํต์ ํ์ฌ Orange Networks์์ ๋๊ท๋ชจ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ํด๋ผ์ฐ๋ ์ปดํจํ
์ ๋ด๋นํ๊ณ ์๋ ๋
์ผ ์์ง๋์ด Rinor Maloku๋ Istio์ ๋ํด ๋น ๋ฅด๊ณ ๊น์ด ์๊ฒ ์์๋ณผ ์ ์๋ ํ๋ฅญํ ์๋ฃ ์๋ฆฌ์ฆ๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ Istio๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ํํ ์ ์๋ ์์
๊ณผ ์ด๋ฅผ ์ง์ ๋์ผ๋ก ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ์์ํฉ๋๋ค.
์ด์ค ํฐ์ค โ Google, IBM ๋ฐ Lyft ํ๊ณผ ํ๋ ฅํ์ฌ ๊ฐ๋ฐ๋ ์คํ ์์ค ํ๋ก์ ํธ์
๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ํ๋ ๋ณต์ก์ฑ์ ํด๊ฒฐํฉ๋๋ค.
- ๊ตํต ๊ด๋ฆฌ: ์๊ฐ ์ด๊ณผ, ์ฌ์๋, ๋ก๋ ๋ฐธ๋ฐ์ฑ;
- ะะตะทะพะฟะฐัะฝะพััั: ์ต์ข ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์น์ธ;
- ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ์ถ์ , ๋ชจ๋ํฐ๋ง, ๋ก๊น .
์ด ๋ชจ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์ ํด๊ฒฐ๋ ์ ์์ง๋ง ๊ทธ ์ดํ์๋ ์๋น์ค๊ฐ ๋ ์ด์ "๋ง์ดํฌ๋ก" ์์ค์ด ์๋๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ชจ๋ ์ถ๊ฐ์ ์ธ ๋ ธ๋ ฅ์ ๋น์ฆ๋์ค ๊ฐ์น๋ฅผ ์ํด ์ง์ ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ ํ์ฌ ์์์ ๋ญ๋น์ ๋๋ค. ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
ํ๋ก์ ํธ ๊ด๋ฆฌ์: ํผ๋๋ฐฑ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์?
๊ฐ๋ฐ์: ๋ ๋ฒ์ ์คํ๋ฆฐํธ.MP: ๋ญ?.. ๊ทธ๋ฅ CRUD์ผ ๋ฟ์ด์์!
R: CRUD๋ฅผ ์ํํ๋ ๊ฒ์ ์ฌ์ด ๋ถ๋ถ์ด์ง๋ง ์ฌ์ ํ ์ฌ์ฉ์์ ์๋น์ค๋ฅผ ์ธ์ฆํ๊ณ ๊ถํ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต์ ์ธ ์์ฒญ์ ๊ตฌํํด์ผ ํ ๋ฟ๋ง ์๋๋ผํ๋ก ์ฐจ๋จ๊ธฐ ํจํด ํด๋ผ์ด์ธํธ์์. ๋ํ ์ ์ฒด ์์คํ ์ด ์ถฉ๋ํ์ง ์๋๋ก ํ๋ ค๋ฉด ์๊ฐ ์ด๊ณผ ๋ฐ๊ฒฉ๋ฒฝ (์ธ๊ธ๋ ๋ ํจํด์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ์ฌ ๋ท๋ถ๋ถ์ ์ฐธ์กฐํ์ธ์. ๋๋ต์ ์ธ ๋ฒ์ญ์ ๋๋ค.), ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ํ์งํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง, ์ถ์ , [...]MP: ์, ๊ทธ๋ฌ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ ํ ์๋น์ค์ ์ฝ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์์ด๋์ด๋ ๋ถ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋์ ์๋น์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ํ์ํ ๋จ๊ณ์ ๋ ธ๋ ฅ์ ์์ ์์ฒญ๋ฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ Istio๊ฐ ์์์ ์ธ๊ธํ ๋ชจ๋ ๋ณต์ก์ฑ(๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์๋๋์ง ์์)์ ์๋น์ค์์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฃผ์: ์ด ๋ฌธ์์์๋ ๊ทํ๊ฐ Kubernetes์ ๋ํ ์ค๋ฌด ์ง์์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด์คํฐ์ค ์์ด๋์ด
Istio๊ฐ ์๋ ์ธ์์์๋ ํ ์๋น์ค๊ฐ ๋ค๋ฅธ ์๋น์ค์ ์ง์ ์์ฒญ์ ํ๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋น์ค๊ฐ ์์ฒด์ ์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ฆ, ์๋ก์ด ์๋๋ฅผ ํ๊ณ , ์๊ฐ ์ด๊ณผ๋ฅผ ์ ๊ณตํ๊ณ , ํ๋ก ์ฐจ๋จ๊ธฐ๋ฅผ ์ฌ๋ ๋ฑ์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
Kubernetes์ ๋คํธ์ํฌ ํธ๋ํฝ
Istio๋ ์๋น์ค์ ์์ ํ ๋ถ๋ฆฌ๋์ด ๋คํธ์ํฌ ํต์ ์ ๋ฐฉํดํ์ฌ ์๋ํ๋ ํนํ๋ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ๊ตฌํํฉ๋๋ค.
- ๊ฒฐํจ ํ์ฉ: ์๋ต์ ํฌํจ๋ ์ํ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ ์คํจ ์ฌ๋ถ๋ฅผ ํ์ ํ๊ณ ์ด๋ฅผ ๋ค์ ์คํํฉ๋๋ค.
- ์นด๋๋ฆฌ์ ์ถ์: ๊ณ ์ ๋ ๋น์จ์ ์์ฒญ๋ง ์ ๋ฒ์ ์ ์๋น์ค๋ก ๋ฆฌ๋๋ ์ ํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋ฐ ์ธก์ ํญ๋ชฉ: ์๋น์ค๊ฐ ์๋ตํ๋ ๋ฐ ์ผ๋ง๋ ๊ฑธ๋ ธ๋์?
- ์ถ์ ๋ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ๊ฐ ์์ฒญ์ ํน์ ํค๋๋ฅผ ์ถ๊ฐํ๊ณ ํด๋ฌ์คํฐ ์ ์ฒด์์ ์ด๋ฅผ ์ถ์ ํฉ๋๋ค.
- ะะตะทะพะฟะฐัะฝะพััั: JWT ํ ํฐ์ ๊ฒ์ํ๊ณ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
์ด๊ฒ๋ค์ ๋น์ ์ ํฅ๋ฏธ๋ฅผ ๋ ์ ์๋ ๋ช ๊ฐ์ง ๊ฐ๋ฅ์ฑ(์ค์ ๋ก๋ ๋ช ๊ฐ์ง์ ๋ถ๊ณผํฉ๋๋ค!)์ ๋๋ค. ์ด์ ๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค!
Istio ์ํคํ ์ฒ
Istio๋ ๋ชจ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๊ณ ์ฌ๊ธฐ์ ์ผ๋ จ์ ๊ท์น์ ์ ์ฉํ์ฌ ์ฌ์ด๋์นด ์ปจํ ์ด๋ ํํ์ ์ค๋งํธ ํ๋ก์๋ฅผ ๊ฐ ํฌ๋์ ์ฝ์ ํฉ๋๋ค. ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ํ๋ก์๋ ๋ฐ์ดํฐ ํ๋ ์ธ, ๋ค์์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ.
๋ฐ์ดํฐ ํ๋ ์ธ
ํฌ๋์ ์ฝ์ ๋ ํ๋ก์๋ฅผ ํตํด Istio๋ ํ์ํ ์๊ตฌ ์ฌํญ์ ์ฝ๊ฒ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์๋ ๋ฐ ํ๋ก ์ฐจ๋จ๊ธฐ ๊ธฐ๋ฅ์ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
Envoy์์ ์ฌ์๋ ๋ฐ ํ๋ก ์ฐจ๋จ์ด ๊ตฌํ๋๋ ๋ฐฉ๋ฒ
์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ (์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฐํฌ๋๋ ์ฌ์ด๋์นด ์ปจํ
์ด๋์ ์๋ ํ๋ก์์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
๋ณ๋์ ์ ํ - ๋๋ต. ๋ฒ์ญ) ์๋น์ค B์ ์ฒซ ๋ฒ์งธ ์ธ์คํด์ค์ ์์ฒญ์ ๋ณด๋ด๊ณ ์คํจํฉ๋๋ค. - ํน์ฌ ์ฌ์ด๋์นด๊ฐ ๋ค์ ์๋ํฉ๋๋ค. (๋ค์ ํด ๋ณด๋ค). (1)
- ์์ฒญ์ด ์คํจํ๊ณ ์ด๋ฅผ ํธ์ถํ ํ๋ก์๋ก ๋ฐํ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ํ๋ก ์ฐจ๋จ๊ธฐ๊ฐ ์ด๋ฆฌ๊ณ ํ์ ์์ฒญ์ ๋ํด ๋ค์ ์๋น์ค๊ฐ ํธ์ถ๋ฉ๋๋ค. (2)
์ฆ, ๋ค๋ฅธ Retry ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ผ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด X, Y ๋๋ Z๋ก ํ๋ก ์ฐจ๋จ ๋ฐ ์๋น์ค ๊ฒ์์ ์ง์ ๊ตฌํํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ํจ์ฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Istio์์๋ ํ์ํ์ง ์์ต๋๋ค. ์๋ ์ฝ๋ ๋ณ๊ฒฝ.
์์ฒญ๋! ์ด์ Istio๋ก ์ฌํ์ ๋ ๋๊ณ ์ถ์ ์๋ ์์ง๋ง ์ฌ์ ํ ์์ฌ์ค๋ฝ๊ณ ์ด๋ ค ์๋ ์ง๋ฌธ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ธ์์ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํ ๋ณดํธ์ ์ธ ์๋ฃจ์ ์ด๋ผ๋ฉด ์์ฐ์ค๋ฌ์ด ์์ฌ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ ์ค์ ๋ก ๊ทธ๋ฌํ ๋ชจ๋ ์๋ฃจ์ ์ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํฉํ์ง ์์ ๊ฒ์ผ๋ก ํ๋ช ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก "๋ง์ถค ์ค์ ์ด ๊ฐ๋ฅํ๊ฐ์?"๋ผ๊ณ ๋ฌป์ต๋๋ค.
์ด์ ๋ฐ๋ค ํญํด๋ฅผ ๋ ๋ ์ค๋น๊ฐ ๋์์ต๋๋ค. ์ ์ด ํ๋ฉด์ ๋ํด ์์ ๋ณด๊ฒ ์ต๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ
์ด๋ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์กฐ์ข ์ฌ, ๋ฏน์ ะธ ์ฑ, ํธ๋ํฝ์ ๋ผ์ฐํ ํ๊ณ , ์ ์ฑ ์ ์ํํ๊ณ , ์๊ฒฉ ์ธก์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋๋ก Envoy๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ํจ๊ป ์๋ํฉ๋๋ค. ๊ฐ๋ต์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ๊ณผ ๋ฐ์ดํฐ ํ๋ ์ธ์ ์ํธ ์์ฉ
ํน์ฌ(์: ๋ฐ์ดํฐ ํ๋ ์ธ)๋ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค.
Istio์ ๋ํ ์๋น์ค์ ๊ด๊ณ
์ฐ๋ฆฌ๋ Istio์ ์๋น์ค์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ์ง๋ง ๊ทธ ๋ฐ๋๋ ์๋๋๋ค. ์๋น์ค๊ฐ Istio์ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น?
์์งํ ๋งํด์, ์๋น์ค๋ "์ด์ฐจํผ ๋ฌผ์ด๋ ๋ฌด์์ธ๊ฐ?"๋ผ๊ณ ์ค์ค๋ก์๊ฒ ๋ฌผ์ ๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ฌผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Istio์ ์กด์ฌ๋ฅผ ์ธ์ํ๊ณ ์์ต๋๋ค.
์ผ๋ฌ์คํธ๋ ์ด์
๋ฐ๋ผ์ ์๋ ์ค์ธ ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ Istio ๊ตฌ์ฑ ์์๋ฅผ ๋ฐฐํฌํ ํ์๋ ํด๋ฌ์คํฐ์ ์๋ ์๋น์ค๋ ๊ณ์ ์๋ํ๋ฉฐ ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ ํ์๋ ๋ชจ๋ ๊ฒ์ด ๋ค์ ์ ์์ด ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ Istio์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๋ก ์ ์ถฉ๋ถํฉ๋๋ค. ์ด ์ง์์ ์ค์ ๋ก ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค!
์ค์ ๋ก Istio
Istio์๋ ์ต์ 4๊ฐ์ vCPU์ 8GB RAM์ ์ฌ์ฉํ ์ ์๋ Kubernetes ํด๋ฌ์คํฐ๊ฐ ํ์ํฉ๋๋ค. ํด๋ฌ์คํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ค์ ํ๊ณ ๊ธฐ์ฌ์ ์ง์นจ์ ๋ฐ๋ฅด๋ ค๋ฉด ์ ๊ท ์ฌ์ฉ์์๊ฒ ๋ค์์ ์ ๊ณตํ๋ Google Cloud Platform์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฝ์ ์ ํธ๋ฆฌํฐ๋ฅผ ํตํด ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ Kubernetes์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ ํ Helm ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ํตํด Istio๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
ํฌ๊ตฌ ์ค์น
์ ์ค๋ช
๋ ๋๋ก ์ปดํจํฐ์ Helm ํด๋ผ์ด์ธํธ๋ฅผ ์ค์นํฉ๋๋ค.
Istio ์ค์น
๋ค์์์ Istio ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ์ธ์. [istio-resources]
.
Istio ๋ฆฌ์์ค๋ฅผ ์ฝ๊ฒ ์๋ณํ๋ ค๋ฉด K8s ํด๋ฌ์คํฐ์ ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋ญ๋๋ค. istio-system
:
$ kubectl create namespace istio-system
ํด๋น ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ค์น๋ฅผ ์๋ฃํ์ธ์. [istio-resources]
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ช
๋ น์ ์คํํฉ๋๋ค.
$ helm template install/kubernetes/helm/istio
--set global.mtls.enabled=false
--set tracing.enabled=true
--set kiali.enabled=true
--set grafana.enabled=true
--namespace istio-system > istio.yaml
์ด ๋ช
๋ น์ Istio์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ํ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค. istio.yaml
. ์ฐ๋ฆฌ๋ ๋ค์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํ์ฌ ํ์ค ํ
ํ๋ฆฟ์ ์์ ์๊ฒ ๋ง๊ฒ ์์ ํ์ต๋๋ค.
-
global.mtls.enabled
์ ์ค์น๋จfalse
(์ฆ, mTLS ์ธ์ฆ์ด ๋นํ์ฑํ๋์์ต๋๋ค. - ๋๋ต)๋ฐ์ดํธ ๊ณผ์ ์ ๋จ์ํํ๊ธฐ ์ํด; -
tracing.enabled
Jaeger๋ฅผ ์ฌ์ฉํ ์์ฒญ ์ถ์ ์ด ํฌํจ๋ฉ๋๋ค. -
kiali.enabled
์๋น์ค์ ํธ๋ํฝ์ ์๊ฐํํ๊ธฐ ์ํด Kiali๋ฅผ ํด๋ฌ์คํฐ์ ์ค์นํฉ๋๋ค. -
grafana.enabled
์์ง๋ ์ธก์ ํญ๋ชฉ์ ์๊ฐํํ๊ธฐ ์ํด Grafana๋ฅผ ์ค์นํฉ๋๋ค.
์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ ๋ช ๋ น์ผ๋ก ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
$ kubectl apply -f istio.yaml
ํด๋ฌ์คํฐ์ Istio ์ค์น๊ฐ ์๋ฃ๋์์ต๋๋ค! ๋ชจ๋ ํฌ๋๊ฐ ๋ค์์คํ์ด์ค์ ํฌํจ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. istio-system
์์์ ๊ฒ์
๋๋ค Running
๋๋ Completed
์๋ ๋ช
๋ น์ ์คํํ์ฌ :
$ kubectl get pods -n istio-system
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๊ณ ์คํํ๋ ๋ค์ ์น์ ์ ๊ณ์ํ ์ค๋น๊ฐ ๋์์ต๋๋ค.
๊ฐ์ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํคํ ์ฒ
์ด๋ฏธ ์ธ๊ธํ ์์ ์์ ์ฌ์ฉ๋ ๊ฐ์ ๋ถ์ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ XNUMX๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์๋น์ค SA-ํ๋ฐํธ์๋, Reactjs ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฐํธ์๋ ์ญํ ์ ํฉ๋๋ค.
- ์๋น์ค SA-์น์ฑ, ๊ฐ์ ๋ถ์ ์ฟผ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์๋น์ค SA-๋ก์ง, ์์ฒด์ ์ผ๋ก ์ํ๋๋
๊ฐ์ ๋ถ์ ; - ์๋น์ค SA-ํผ๋๋ฐฑ, ๋ถ์์ ์ ํ์ฑ์ ๋ํ ์ฌ์ฉ์๋ก๋ถํฐ ํผ๋๋ฐฑ์ ๋ฐ์ต๋๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์๋ ์๋น์ค ์ธ์๋ Kubernetes์์ ๋ค์ด์ค๋ ์์ฒญ์ ์ ์ ํ ์๋น์ค๋ก ๋ผ์ฐํ
ํ๋ ์์ ์ปจํธ๋กค๋ฌ๋ ํ์๋ฉ๋๋ค. Istio๋ Ingress Gateway ๋ด์์ ์ ์ฌํ ๊ฐ๋
์ ์ฌ์ฉํ๋ฉฐ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Istio์ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์คํ
๊ธฐ์ฌ์ ์ธ๊ธ๋ ์ถ๊ฐ ์์
์ ์ํด์๋ ์ ์ฅ์๋ฅผ ๋ณต์ ํ์ธ์.
์ฌ์ด๋์นด ์ฝ์
์ฝ์
์ด ๊ฐ๋ฅํฉ๋๋ค ์๋์ผ๋ก ๋๋ ์๋์ผ๋ก. ์ฌ์ด๋์นด ์ปจํ
์ด๋๋ฅผ ์๋์ผ๋ก ์ฝ์
ํ๋ ค๋ฉด ๋ค์์คํ์ด์ค์ ๋ ์ด๋ธ์ ์ค์ ํด์ผ ํฉ๋๋ค. istio-injection=enabled
, ์ด๋ ๋ค์ ๋ช
๋ น์ผ๋ก ์ํ๋ฉ๋๋ค.
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
์ด์ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค(default
)๋ ์ฌ์ด๋์นด ์ปจํ
์ด๋๋ฅผ ๋ฐ์ต๋๋ค. ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ ์ฅ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ ํ
์คํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํด ๋ณด๊ฒ ์ต๋๋ค. [istio-mastery]
๋ค์ ๋ช
๋ น์ ์คํํฉ๋๋ค.
$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created
์๋น์ค๋ฅผ ๋ฐฐํฌํ ํ ๋ค์ ๋ช
๋ น์ ์คํํ์ฌ Pod์ ๋ ๊ฐ์ ์ปจํ
์ด๋(์๋น์ค ์์ฒด์ ์ฌ์ด๋์นด ํฌํจ)๊ฐ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. kubectl get pods
์ด ์๋์ ์๋์ง ํ์ธํ์ธ์. READY
์ง์ ๋ ๊ฐ 2/2
, ๋ ์ปจํ
์ด๋๊ฐ ๋ชจ๋ ์คํ ์ค์์ ๋ํ๋
๋๋ค.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sa-feedback-55f5dc4d9c-c9wfv 2/2 Running 0 12m
sa-frontend-558f8986-hhkj9 2/2 Running 0 12m
sa-logic-568498cb4d-2sjwj 2/2 Running 0 12m
sa-logic-568498cb4d-p4f8c 2/2 Running 0 12m
sa-web-app-599cf47c7c-s7cvd 2/2 Running 0 12m
์๊ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Pod ์ค ํ๋์ Envoy ํ๋ก์
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๊ณ ์์ผ๋ฏ๋ก ์์ ํธ๋ํฝ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด์ค๋๋ก ํ์ฉํด์ผ ํฉ๋๋ค.
์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด
์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก(ํด๋ฌ์คํฐ์์ ํธ๋ํฝ ํ์ฉ)๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด Istio์์๋ ํด๋ฌ์คํฐ์ "๊ฐ์ฅ์๋ฆฌ"์ ์์นํ๋ฉฐ ๋ผ์ฐํ , ๋ก๋ ๋ฐธ๋ฐ์ฑ, ๋ณด์, ์์ ํธ๋ํฝ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ Istio ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์์ต๋๋ค.
Ingress Gateway ๊ตฌ์ฑ ์์์ ์ด๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ๋ ์๋น์ค๋ Istio ์ค์น ์ค์ ํด๋ฌ์คํฐ์ ์ค์น๋์์ต๋๋ค. ์๋น์ค์ ์ธ๋ถ IP ์ฃผ์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ค์์ ์คํํ์ธ์.
$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP
istio-ingressgateway LoadBalancer 10.0.132.127 13.93.30.120
์ฐ๋ฆฌ๋ ์ด IP(EXTERNAL-IP๋ผ๊ณ ์นญํจ)๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ์ ์ก์ธ์คํ ๊ฒ์ด๋ฏ๋ก ํธ์์ ๊ฐ์ ๋ณ์์ ๊ธฐ๋กํ๊ฒ ์ต๋๋ค.
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
์ง๊ธ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ด IP์ ์ ์ํ๋ ค๊ณ ํ๋ฉด Service Unavailable ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Istio๋ ๋ค์ด์ค๋ ๋ชจ๋ ํธ๋ํฝ์ ์ฐจ๋จํฉ๋๋ค., ๊ฒ์ดํธ์จ์ด๊ฐ ์์ง ์ ์๋์ง ์์์ต๋๋ค.
๊ฒ์ดํธ์จ์ด ๋ฆฌ์์ค
๊ฒ์ดํธ์จ์ด๋ ํด๋ฌ์คํฐ์ Istio๋ฅผ ์ค์นํ๊ณ ์์ ํธ๋ํฝ์ ํ์ฉํ๋ ค๋ ํฌํธ, ํ๋กํ ์ฝ ๋ฐ ํธ์คํธ๋ฅผ ์ง์ ํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ ํ ์ ์๋๋ Kubernetes์ CRD(์ฌ์ฉ์ ์ ์ ๋ฆฌ์์ค ์ ์)์ ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ชจ๋ ํธ์คํธ์ ๋ํด ํฌํธ 80์์ HTTP ํธ๋ํฝ์ ํ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ์์
์ ๋ค์ ์ ์์ ์ํด ๊ตฌํ๋ฉ๋๋ค. (
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
์ด ๊ตฌ์ฑ์ ์ ํ๊ธฐ ์ธ์๋ ์ค๋ช
์ด ํ์ํ์ง ์์ต๋๋ค. istio: ingressgateway
. ์ด ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์ฑ์ ์ ์ฉํ Ingress ๊ฒ์ดํธ์จ์ด๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๋ Istio์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ Ingress Gateway ์ปจํธ๋กค๋ฌ์
๋๋ค.
๊ตฌ์ฑ์ ๋ค์ ๋ช ๋ น์ ํธ์ถํ์ฌ ์ ์ฉ๋ฉ๋๋ค.
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
์ด์ ๊ฒ์ดํธ์จ์ด๋ ํฌํธ 80์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ์ง๋ง ์์ฒญ์ ์ด๋๋ก ๋ผ์ฐํ ํด์ผ ํ ์ง ๋ชจ๋ฆ ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋น์ ์ด ํ์ํฉ๋๋ค ๊ฐ์ ์๋น์ค.
๊ฐ์์๋น์ค ๋ฆฌ์์ค
VirtualService๋ ํด๋ฌ์คํฐ ๋ด์์ ํ์ฉ๋๋ ์์ฒญ์ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ์ Ingress Gateway์ ์๋ ค์ค๋๋ค.
http-gateway๋ฅผ ํตํด ๋ค์ด์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์ฒญ์ sa-frontend, sa-web-app ๋ฐ sa-feedback ์๋น์ค๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค.
VirtualServices๋ก ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒฝ๋ก
SA-Frontend๋ก ์ ์ก๋์ด์ผ ํ๋ ์์ฒญ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๋์ค์ ์ ํํ ์ผ์นํจ
/
index.html์ ์ป์ผ๋ ค๋ฉด SA-Frontend๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค. - ์ ๋์ฌ๊ฐ ๋ถ์ ๊ฒฝ๋ก
/static/*
CSS ๋ฐ JavaScript์ ๊ฐ์ด ํ๋ฐํธ์๋์์ ์ฌ์ฉ๋๋ ์ ์ ํ์ผ์ ์์ ํ๋ ค๋ฉด SA-Frontend๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค. - ์ ๊ท์๊ณผ ์ผ์นํ๋ ๊ฒฝ๋ก
'^.*.(ico|png|jpg)$'
, SA-Frontend๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค. ํ์ด์ง์ ํ์๋๋ ์ฌ์ง๋ค์ ๋๋ค.
๊ตฌํ์ ๋ค์ ๊ตฌ์ฑ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. (
kind: VirtualService
metadata:
name: sa-external-services
spec:
hosts:
- "*"
gateways:
- http-gateway # 1
http:
- match:
- uri:
exact: /
- uri:
exact: /callback
- uri:
prefix: /static
- uri:
regex: '^.*.(ico|png|jpg)$'
route:
- destination:
host: sa-frontend # 2
port:
number: 80
์ค์ ํฌ์ธํธ :
- ์ด VirtualService๋ ๋ค์์ ํตํด ๋ค์ด์ค๋ ์์ฒญ์ ๋ํ๋ ๋๋ค. http-๊ฒ์ดํธ์จ์ด;
- ะ
destination
์์ฒญ์ด ์ ์ก๋๋ ์๋น์ค๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
์ฃผ์: ์์ ๊ตฌ์ฑ์ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. sa-virtualservice-external.yaml
, ์ฌ๊ธฐ์๋ SA-WebApp ๋ฐ SA-Feedback์ ๋ผ์ฐํ
์ ๋ํ ์ค์ ๋ ํฌํจ๋์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ๊ฐ๊ฒฐ์ฑ์ ์ํด ์ด ๋ฌธ์์์ ๋จ์ถ๋์์ต๋๋ค.
๋ค์์ ํธ์ถํ์ฌ VirtualService๋ฅผ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created
์ฃผ์: Istio ๋ฆฌ์์ค๋ฅผ ์๋นํ๋ฉด Kubernetes API ์๋ฒ๋ Istio Control Plane์์ ์์ ๋๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ ํ ์ ๊ตฌ์ฑ์ด ๊ฐ Pod์ Envoy ํ๋ก์์ ์ ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Ingress Gateway ์ปจํธ๋กค๋ฌ๋ Control Plane์ ๊ตฌ์ฑ๋ ๋ ๋ค๋ฅธ Envoy๋ก ๋ณด์ ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๋ค์ด์ด๊ทธ๋จ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ฒญ ๋ผ์ฐํ
์ ์ํ Istio-IngressGateway ๊ตฌ์ฑ
์ด์ ๊ฐ์ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. http://{EXTERNAL-IP}/
. ์ฐพ์ ์ ์์ ์ํ๊ฐ ๋์ด๋ ๊ฑฑ์ ํ์ง ๋ง์ธ์. ๊ตฌ์ฑ์ด ์ ์ฉ๋๊ณ Envoy ์บ์๊ฐ ์
๋ฐ์ดํธ๋๋ ๋ฐ ์๊ฐ์ด ์กฐ๊ธ ๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค..
๊ณ์ํ๊ธฐ ์ ์ ์ฑ์ ์กฐ๊ธ ์ฌ์ฉํด ํธ๋ํฝ์ ์์ฑํด ๋ณด์ธ์. (ํ์ ์์ ์ ๋ช ํ์ฑ์ ์ํด ํด๋น ์กด์ฌ๊ฐ ํ์ํฉ๋๋ค. - ๋๋ต ๋ฒ์ญ).
Kiali: ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ
Kiali ๊ด๋ฆฌ ์ธํฐํ์ด์ค๋ก ์ด๋ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ญ์์ค.
$ kubectl port-forward
$(kubectl get pod -n istio-system -l app=kiali
-o jsonpath='{.items[0].metadata.name}')
-n istio-system 20001
... ๊ทธ๋ฆฌ๊ณ ์ด๋ค
Grafana: ์ธก์ ํญ๋ชฉ ์๊ฐํ
Istio์์ ์์ง๋ ์ธก์ ํญ๋ชฉ์ Prometheus๋ก ์ด๋ํ๊ณ Grafana๋ฅผ ํตํด ์๊ฐํ๋ฉ๋๋ค. Grafana ๊ด๋ฆฌ ์ธํฐํ์ด์ค๋ก ์ด๋ํ๋ ค๋ฉด ์๋ ๋ช
๋ น์ ์คํํ ํ ์ฝ๋๋ค.
$ kubectl -n istio-system port-forward
$(kubectl -n istio-system get pod -l app=grafana
-o jsonpath={.items[0].metadata.name}) 3000
๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด ํ ์ผ์ชฝ ์๋จ ๋ฐ ์ ํ Istio ์๋น์ค ๋์๋ณด๋ ์ผ์ชฝ ์๋จ์์ ์๋น์ค๋ก ์์ํ์ธ์. sa-์น-์ฑ์์ง๋ ์ธก์ ํญ๋ชฉ์ ๋ณด๋ ค๋ฉด ๋ค์์ ์ํํ์ธ์.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ๊ณตํํ๊ณ ์์ ํ ์ง๋ฃจํ ์ฑ๋ฅ์
๋๋ค. ๊ฒฝ์์ง์ ์ด๊ฒ์ ๊ฒฐ์ฝ ์น์ธํ์ง ์์ ๊ฒ์
๋๋ค. ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์์ ๋ก๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
์ด์ ์ฐ๋ฆฌ๋ ํจ์ฌ ๋ ๋ฉ์ง ๊ทธ๋ํ๋ฅผ ๊ฐ๊ฒ ๋์์ผ๋ฉฐ, ๊ทธ ์ธ์๋ ๋ชจ๋ํฐ๋ง์ ์ํ ํ๋ฅญํ Prometheus ๋๊ตฌ์ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์๋น์ค์ ์ฑ๋ฅ, ์ํ, ๊ฐ์ /์ ํ๋ฅผ ํ์ตํ ์ ์๋ ์งํ ์๊ฐํ๋ฅผ ์ํ Grafana๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์๋น์ค์ ์์ฒญ ์ถ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๊ฑฐ: ์ถ์
์๋น์ค๊ฐ ๋ง์์ง์๋ก ์ค๋ฅ์ ์์ธ์ ํ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ์ถ์ ์ด ํ์ํฉ๋๋ค. ์๋ ๊ทธ๋ฆผ์์ ๊ฐ๋จํ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฌด์์๋ก ์คํจํ ์์ฒญ์ ์ผ๋ฐ์ ์ธ ์
์์ฒญ์ด ์๋ค๊ฐ ๋จ์ด์ก์ต๋๋ค. ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฒซ ๋ฒ์งธ ์๋น์ค? ์๋๋ฉด ๋ ๋ฒ์งธ? ๋ ๊ฐ์ง ๋ชจ๋ ์์ธ๊ฐ ์์ต๋๋ค. ๊ฐ๊ฐ์ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฐ ์ผ์ ํ๊ณ ์๋ ์์ ์ ์ผ๋ง๋ ์์ฃผ ๋ฐ๊ฒฌํ์ต๋๊น? ์ฐ๋ฆฌ ์ผ์ ๊ฐ๋ฐ์๋ผ๊ธฐ๋ณด๋ค๋ ์ํํธ์จ์ด ํ์ ์ ๊ฐ๊น์ต๋๋ค.
์ด๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ด๋ฉฐ ์๋น์ค๊ฐ ์๋ก ๊ณ ์ ํ ํค๋๋ฅผ ์ ๋ฌํ ํ ์ด ์ ๋ณด๊ฐ ์ถ์ ์์คํ ์ผ๋ก ์ ๋ฌ๋์ด ์์ฒญ ๋ฐ์ดํฐ์ ๋น๊ต๋๋ ๋ถ์ฐ ์ถ์ ์์คํ ์ ์ํด ํด๊ฒฐ๋ฉ๋๋ค. ๋ค์์ ์์์ ๋๋ค.
TraceId๋ ์์ฒญ์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Istio๋ ๊ณต๊ธ์ ์ฒด ๋ ๋ฆฝ์ ์ธ OpenTracing API ํ๋ ์์ํฌ๋ฅผ ๊ตฌํํ๋ Jaeger Tracer๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Jaeger ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
$ kubectl port-forward -n istio-system
$(kubectl get pod -n istio-system -l app=jaeger
-o jsonpath='{.items[0].metadata.name}') 16686
์ด์ ์ด๋
์ด ์ถ์ ์ ๋ค์์ ๋ณด์ฌ์ค๋๋ค.
- ์์ฒญ์ด ๋ค์ด์ค๋ค์ istio-ingressgateway (์ด๊ฒ์ ์๋น์ค ์ค ํ๋์์ ์ฒซ ๋ฒ์งธ ์ํธ ์์ฉ์ด๋ฉฐ ์์ฒญ์ ๋ํด ์ถ์ ID๊ฐ ์์ฑ๋ฉ๋๋ค.) ๊ทธ ํ ๊ฒ์ดํธ์จ์ด๊ฐ ์๋น์ค์ ์์ฒญ์ ๋ณด๋ ๋๋ค. sa-์น-์ฑ.
- ์๋น์ค ์ค sa-์น-์ฑ Envoy ์ฌ์ด๋์นด๊ฐ ์์ฒญ์ ์ ํํ๊ณ ๋ฒ์์ "ํ์"๊ฐ ์์ฑ๋์ด(๊ทธ๋์ ์ถ์ ์์ ๋ณผ ์ ์์) ์ปจํ
์ด๋๋ก ๋ฆฌ๋๋ ์
๋ฉ๋๋ค. sa-์น-์ฑ. (
์คํฌ - ์ด๋ฆ, ์์ ์์ ์๊ฐ ๋ฐ ๊ธฐ๊ฐ์ด ํฌํจ๋ Jaeger์ ๋ ผ๋ฆฌ์ ์์ ๋จ์์ ๋๋ค. ์คํฌ์ ์ค์ฒฉ๋๊ณ ์ ๋ ฌ๋ ์ ์์ต๋๋ค. ๋ฒ์์ ๋ฐฉํฅ์ฑ ๋น์ํ ๊ทธ๋ํ๊ฐ ํธ๋ ์ด์ค๋ฅผ ํ์ฑํฉ๋๋ค. โ ๋๋ต. ๋ฒ์ญ) - ์ฌ๊ธฐ์ ์์ฒญ์ ๋ฉ์๋์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ฐ์ฑ๋ถ์. ์ด๋ฌํ ์ถ์ ์ ์ด๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์์ฑ๋์์ต๋๋ค. ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ต๋๋ค.
- ์ด ์๊ฐ๋ถํฐ POST ์์ฒญ์ด ์์๋ฉ๋๋ค. sa ๋ ผ๋ฆฌ. ์ถ์ ID๋ ๋ค์์์ ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค. sa-์น-์ฑ.
- ...
์ฃผ์: 4๋จ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ Istio์์ ์์ฑ๋ ํค๋๋ฅผ ํ์ธํ๊ณ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ํ์ ์์ฒญ์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
(A) Istio๋ ํค๋ ์ ๋ฌ์ ๋ด๋นํฉ๋๋ค. (B) ์๋น์ค๋ ํค๋๋ฅผ ๋ด๋นํฉ๋๋ค.
Istio๊ฐ ๋๋ถ๋ถ์ ์์ ์ ์ํํ๋ ์ด์ ๋... ๋ค์ด์ค๋ ์์ฒญ์ ๋ํ ํค๋๋ฅผ ์์ฑํ๊ณ ๊ฐ ์ฌ์ด๋์ผ์ด์ ์ ๋ฒ์๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋น์ค ๋ด๋ถ์ ํค๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ ์ฒด ์์ฒญ ์ถ์ ๊ฒฝ๋ก๊ฐ ์์ค๋ฉ๋๋ค.
๋ค์ ํค๋๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
์ด๋ ์ด๋ ค์ด ์์
์ ์๋์ง๋ง ๊ตฌํ์ ๋จ์ํํ๊ธฐ ์ํด ์ด๋ฏธ
๊ฐ์ ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ Flask, Spring ๋ฐ ASP.NET Core์ ๊ตฌํ์ ๋ณด์ฌ์ค๋๋ค.
์ด์ ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์์ ์ป์ ์ ์๋์ง(๋๋ ๊ฑฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก) ๋ช ํํด์ก์ผ๋ฏ๋ก ๋ฏธ์ธ ์กฐ์ ๋ ๋ผ์ฐํ , ๋คํธ์ํฌ ํธ๋ํฝ ๊ด๋ฆฌ, ๋ณด์ ๋ฑ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฉ๋ชจ. ๋ฒ์ญ: Rinor Maloku๊ฐ ์ ๊ณตํ๋ Istio ๊ด๋ จ ์๋ฃ์ ๋ค์ ๋ถ๋ถ์์ ์ด์ ๋ํด ์ฝ์ด๋ณด์ธ์. ๋ฒ์ญ๋ณธ์ ๊ฐ๊น์ด ์์ผ ๋ด์ ๋ธ๋ก๊ทธ์ ๊ฒ์ฌ๋ ์์ ์
๋๋ค. UPDATE (14์ XNUMX์ผ):
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- "Istio๋ฅผ ์ฌ์ฉํ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋์๊ฐ๊ธฐ":
ํํธ 2(๋ผ์ฐํ , ํธ๋ํฝ ์ ์ด) ,ํํธ 3(์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ) ; - ยซ
Conduit - Kubernetes์ฉ ๊ฒฝ๋ ์๋น์ค ๋ฉ์ "; - ยซ
์๋น์ค ๋ฉ์๋ ๋ฌด์์ด๋ฉฐ [๋ง์ดํฌ๋ก์๋น์ค๊ฐ ํฌํจ๋ ํด๋ผ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ] ์๋น์ค ๋ฉ์๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? "; - ยซ
Kubernetes์ ๋คํธ์ํน์ ๋ํ ๊ทธ๋ฆผ ๊ฐ์ด๋์ ๋๋ค. ํํธ 1๊ณผ 2 "; - ยซ
์ด ์ฌ์ด๋์นด ์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ์ฌ๊ธฐ[Kubernetes]์ ์๊ฒ ๋์๋์? ".
์ถ์ฒ : habr.com