Porting to APP MESH
์ ํ ์นดํ๋ก๊ทธ ํ๋ฐํธ์๋ frontend-node๋ prodcatalog์ ๋ํ ์์ฒญ์ ํ๋๋ก hardwired ๋์์ผ๋ฉฐ prodcatalog๋ proddetail์ ๋ํ ์์ฒญ์ ํ๋๋ก hardwired๋์ด ์์ต๋๋ค.
์ ๋ฒ์ ์ proddetail ๋ฆด๋ฆฌ์ค๊ฐ ์์ ๋๋ง๋ค ๋ฒ์ ๋ณ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ ๋ฒ์ ๊ณผ ์ด์ ๋ฒ์ ์ ๋ชจ๋ ์ง์ํ๋ ์ ๋ฒ์ ์ prodcatalog๋ ๋ฆด๋ฆฌ์คํด์ผ ํฉ๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ์ ์งํ๊ธฐ์ ์ต์ ์ ๊ตฌ์ฑ์ ์๋๋๋ค.
prodcatalog ๋ฐฑ์๋ ์๋น์ค๊ฐ Faragate์ ๋ฐฐํฌ๋๊ณ ๋๋จธ์ง ์๋น์ค frontend-node์ proddetail์ ๊ด๋ฆฌ ๋
ธ๋ ๊ทธ๋ฃน์ ๋ฐฐํฌ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ชจ๋ ์๋น์ค๋ฅผ App Mesh์ ์ถ๊ฐํ๊ณ ์ด๋ฌํ ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ ์๋ก ํต์ ํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
์ด์ AWS App Mesh๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ํคํ
์ฒ๋ฅผ ๋จ์ํํ๋ ๋ฐฉ๋ฒ์ ์ค์ตํ ๊ฒ์
๋๋ค. proddetail ์๋น์ค๋ฅผ ๊ฐ์ํํจ์ผ๋ก์จ ๋์ ๊ตฌ์ฑ์ ์ถ๊ฐํ๊ณ ์ํ๋ ๋ฒ์ ์ ์๋ํฌ์ธํธ๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
ํ ์ ์์ผ๋ฏ๋ก, ์๋ก์ด proddetail ์๋น์ค ๋ฆด๋ฆฌ์ค๊ฐ ์์ ๋๋ง๋ค prodcatalog ์๋น์ค์ ์ฌ๊ตฌ์ถ ํ์์ฑ์ ์ต์ํํ ์ ์์ต๋๋ค.
๋ํ Nodegroup๊ณผ Fargate์ ๋ชจ๋ ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ App Mesh๋ฅผ ํตํด ์๋ก ํต์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ฐํ ๊ฒ์ ๋๋ค.
์ด ์ฅ์ ์์ฉ ํ๋ก๊ทธ๋จ ํฌํ ์ด ์๋ฃ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.

1. Mesh Design

์์ ์ด๋ฏธ์ง์์ ์ ํ ์นดํ๋ก๊ทธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์๋น์ค๊ฐ App Mesh ๋ด์์ ์คํ๋๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ฐ ์๋น์ค์๋ VirtualNode๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, VirtualService๋ ์์ต๋๋ค. ์ด๋ฌํ VirtualServices๋ ํธ๋ํฝ์ Mesh ๋ด์ VirtualRouter๋ก ์ ์กํ๋ฉฐ, VirtualRouter๋ ๋ผ์ฐํ ๊ท์น์ ์ง์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ๋ํฝ์ด ๊ฐ๊ฐ์ VirtualNode๋ก ์ด๋ํ๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก๋ Kubernetes ๋ด์ ์๋น์ค ์๋ํฌ์ธํธ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
๊ธฐ๋ฅ์ ์ผ๋ก, Mesh-enabled ๋ฒ์ ์ ํ์ฌ ๋ฒ์ ์ ๊ธฐ๋ฅ์ ์ ํํ ์ํํฉ๋๋ค.
frontend-node์์ ๋ง๋ ์์ฒญ์prodcatalog๋ฐฑ์๋ ์๋น์ค์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค.prodcatalog์์ ๋ง๋ ์์ฒญ์prodetail-v1๋ฐฑ์๋ ์๋น์ค์์ ์ ๊ณต๋ฉ๋๋ค.
์ฐจ์ด์ ์ AWS App Mesh๋ฅผ ์ฌ์ฉํ์ฌ
Prodcatalog์Prodetail์ด๋ผ๋ ์๋ก์ด ๊ฐ์ ์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ ๋๋ค.frontend-node์๋น์ค์์ ์์ฒญ์ ํ๋ฉด ํธ๋ํฝ์ ํด๋ฌ์คํฐ ๋ด์ ์๋น์ค ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ ํ๋๋ก ๊ตฌ์ฑ๋VirtualRouter์ธ์คํด์ค๋ก ๋ ผ๋ฆฌ์ ์ผ๋ก ํธ๋ํฝ์ ์ ์กํ์ฌ ์นดํ๋ก๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.Prodcatalog์๋น์ค์ ์์ฒญ์ ํธ๋ํฝ์ ํด๋ฌ์คํฐ ๋ด์ ์๋น์ค ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ ํ๋๋ก ๊ตฌ์ฑํVirtualRouter์ธ์คํด์ค๋ก ํธ๋ํฝ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ ์กํ์ฌprodetail-v1๋ก ์ ์กํฉ๋๋ค.
2. Mesh Resource
Mesh
Product Catalog App์ App Mesh๋ก ํฌํ
ํ๋ ค๋ฉด ๋จผ์ Mesh๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋ํ Prodcatalog-ns ๋ค์์คํ์ด์ค์ Label์ ์ ์ฉํ์ฌ ์๋ก์ด Mesh์ ์ ํดํ๊ณ ๊ทธ ์์ ์๋ Pod์ ์๋ sidecar injection์
์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์
๋๋ค. ๋ค์ ์ฅ์์ VirtualGateway ์ค์ ์ ์ฌ์ฉํ ๊ฒ์ดํธ์จ์ด Label๋ ์ถ๊ฐํฉ๋๋ค. ์๋์ ํ์๋ mesh.yaml ์น์
์ ๋ณด๋ฉด prodcatalog-ns ๋ค์์คํ์ด์ค์ ํ์ํ Label์ ์ถ๊ฐํ๊ณ prodcatalog-mesh๋ผ๋ ์ด๋ฆ์ Mesh๋ฅผ ์ง์ ํ์์ ์ ์ ์์ต๋๋ค.

VirtualNode
App Mesh ๋ด์์ ์คํ๋๋ Kubernetes ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด๋ฅผ VirtualNode๋ก ์ ์ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด App Mesh๊ฐ Kubernetes Deployments ๋ฐ Services์ ๊ฐ์ ๊ฐ์ฒด์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๊ณ ํต์ ๋ฐ ๋ผ์ฐํ
๊ตฌ์ฑ์ ์ํ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. meshed_app.yaml์ ์ดํด๋ณด๋ฉด, ์๋๋ frontend-node ์๋น์ค์ VirtualNode spec์
๋๋ค.

podSelector๋ฅผ ์ฌ์ฉํ์ฌ ์ด VirtualNode์ ๋ฉค๋ฒ์ธ Pod์ frontend-node Service์ ๋ํ ํฌ์ธํฐ๋ฅผ ์๋ณํฉ๋๋ค.
VirtualService and VirtualRouter
๋ํ ๊ฐ ์ ํ ์นดํ๋ก๊ทธ ์ธ๋ถ ์ ๋ณด ๋ฒ์ ์๋ VirtualService ๋ฐ VirtualRouter spec์ด ์์ด ๊ฐ ์๋ํฌ์ธํธ๋ก์ ํธ๋ํฝ ๋ผ์ฐํ
์ ์ค์ ํฉ๋๋ค. ์ด ์์
์ Prodetail-v1 ๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ์ฌ ์ํ๋ฉ๋๋ค. App Mesh๋ ์ ํ๋ฆฌ์ผ์ด์
ํธ๋ํฝ์ ๋ํ ๋
ผ๋ฆฌ์ ์๋น์ค ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์๋ VirtualService ๊ตฌ์ฑ๋ ์ ๊ณตํฉ๋๋ค. ์ด ์์์๋ VirtualRouter๋ก ํธ๋ํฝ์ ์ ์กํ ๋ค์ VirtualNode๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
ํฉ๋๋ค. meshed_app.yaml์ ๋ณด๋ฉด ์๋๋ ํธ๋ํฝ์ ๋ฐฑ์๋ ์๋น์ค prodetail-v1 ๋ฒ์ 1๋ก ๋ผ์ฐํ
ํ๋ Prodetail VirtualService ๋ฐ VirtualRouter์
๋๋ค.

3. Meshed Application ์์ฑ
App Mesh Labels ๊ณผ ํจ๊ป ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๊ณ Mesh Object๋ฅผ ๋ฐฐํฌ ํฉ๋๋ค.

Confirm the Mesh object and Namespace are created


์๋น์ค์ ํ์ํ App Mesh Resources๋ฅผ ์์ฑํฉ๋๋ค.

๋ชจ๋ Mesh ์์์ด ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
์ฝ์์ AWS App Mesh ๋ฉ๋ด์์ ์์์ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค.



4. SIDECAR INJECTION
Application๋ด์ Pod๊ฐ mesh์ ์ฐ๊ฒฐ๋๊ธฐ ์ํด์๋ Pod ๋ด์ sidecar๋ก ๋์ํ๋ Envoy proxy container๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด AWS App mesh๊ฐ ์ ์ดํ๋ data plane์ด ์ค์ ๋ฉ๋๋ค.

SIDECAR INJECTION์ ์ํ ๋ชใฑ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๊ธฐ ์ ์ ์ ํ ์นดํ๋ก๊ทธ ์ฑ Deployment spec์ App Mesh ์ฌ์ด๋์นด ์ปจํ ์ด๋๋ฅผ ํฌํจํ๋๋ก ์์ ํ๊ณ ๋ช ๊ฐ์ง ํ์ ๊ตฌ์ฑ ์์ ๋ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ํฌ๋๊ฐ ์ ๊ฐ๋๋ฉด ์ฌ์ด๋์นด๊ฐ ์๋๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ํ ์ฌ์ด๋์นด ์ปจํ ์ด๋ specs์ ํฌํจํ๋๋ก ๊ฐ Deployment๋ฅผ ํจ์นํ ์ ์์ต๋๋ค. ์ด ํจ์น๋ฅผ ์ ์ฉํ๋ฉด, ์ค๋๋ ํฌ๋๋ ์ฌ๋ผ์ง๊ณ , ์๋ก์ด ํฌ๋๋ ์ฌ์ด๋์นด๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
Mesh ๋ค์์คํ์ด์ค์์ AWS App Mesh Sidecar Injector๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด ์ฅ์น๋ ์ ํฌ๋๊ฐ ์์ฑ๋๋์ง ๊ฐ์ํ๊ณ ๋ฐฐ์น๋ ๋ ์๋์ผ๋ก ์ฌ์ด๋์นด ์ปจํ ์ด๋์ ํ์ํ ๊ตฌ์ฑ์ ํฌ๋์ ์ถ๊ฐํฉ๋๋ค.
์ด ์ค์ต์์๋ ์ธ ๋ฒ์งธ ์ต์
์ ์ฌ์ฉํ์ฌ Mesh ํฌ๋์ ์๋ ์ฌ์ด๋์นด ์ฃผ์
์ ํ์ฑํํฉ๋๋ค. Labels: appmesh.k8s.aws/sidecarInjectorWebhook=enabled๋ฅผ ์ถ๊ฐํ์ฌ ์๋ ์ฌ์ด๋์นด ์ฃผ์
์ ํ์ฑํํ์ต๋๋ค. ์ด์ ์ฅ์์ Mesh ๋ฆฌ์์ค๋ฅผ ๋ง๋ค ๋ prodcatalog-ns ๋ค์์คํ์ด์ค์์ ์ฌ์ฉํ์ง๋ง ์ด๊ธฐ ํฌ๋ ์์ฑ ํ ์ด ์์
์ด ์ํ๋์์ต๋๋ค. ํ์ฌ, ์ฐ๋ฆฌ์ ํฌ๋๋ค์ ๊ฐ๊ฐ ํ๋์ ์ปจํ
์ด๋๋ฅผ ๊ฐ๋ํ๊ณ ์์ต๋๋ค.

๊ฐ๋จํ๊ฒ deployment๋ฅผ ์ฌ์์ํ์ฌ sidecar ํ๋ก์ injection์ ํ ์ ์์ต๋๋ค.
Pod detail์์ ๊ฐ Pod์ main application container, envoy sidecar container and xray sidecar container ์ด๋ ๊ฒ 3๊ฐ์ ์ปจํ
์ด๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.


5. APPLICATION TEST

Mesh์ porting๋ Product Catalog App ์ด ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด frontend-node ์ปจํ
์ด๋์ ์ ์ํ์ฌ ๋ช
๋ น์ด๋ฅผ ์ํํฉ๋๋ค.
port 5000์ ์ฌ์ฉํ๋ virtual service prodcatalog ์ curl์ ํธ์ถํฉ๋๋ค.

์ด๋ฒ์๋ prodcatalog์ proddetail ๊ฐ์ ์ฐ๊ฒฐ์ ํ์ธํฉ๋๋ค. (ctrl+d ๋ก container์์ ๋น ์ ธ๋์ต๋๋ค.)

์ด์ End-user์๊ฒ ์๋น์ค๋ฅผ ๋
ธ์ถ ์ํฌ VirtualGateway๋ฅผ ์์ฑํฉ๋๋ค.
Last updated
Was this helpful?