/ [pdf]



1. Istio ์†Œ๊ฐœ

  • Istio๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ(Service Mesh)๋กœ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ, ๋ณด์•ˆ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณธ ์‹ค์Šต์—์„œ๋Š” AWS EKS ํ™˜๊ฒฝ์—์„œ Istio๋ฅผ ์„ค์น˜ํ•˜๊ณ , Bookinfo ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ฒดํ—˜ํ•ฉ๋‹ˆ๋‹ค.

2. EKS ํด๋Ÿฌ์Šคํ„ฐ ์ค€๋น„

  • AWS CLI, kubectl, eksctl์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • EKS ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๊ณ , kubectl์ด ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  # for ARM systems, set ARCH to: `arm64`, `armv6` or `armv7`
ARCH=amd64
PLATFORM=$(uname -s)_$ARCH

curl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"

# (Optional) Verify checksum
curl -sL "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --check

tar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gz

sudo install -m 0755 /tmp/eksctl /usr/local/bin && rm /tmp/eksctl
  
  # EKS ํด๋Ÿฌ์Šคํ„ฐ ๋ชฉ๋ก ํ™•์ธ
eksctl get cluster

# kubectl ์—ฐ๊ฒฐ ํ™•์ธ
kubectl get nodes
  



3. Istioctl ์„ค์น˜

Istio ์„ค์น˜๋ฅผ ์œ„ํ•ด istioctl์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
  



4. Istio ์„ค์น˜

Istio ๊ธฐ๋ณธ ํ”„๋กœํ•„๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  istioctl install --set profile=demo -y
  

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ Istio ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  kubectl get pods -n istio-system
  



5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— Istio ์‚ฌ์ด๋“œ์นด ์ž๋™ ์ฃผ์ž… ํ™œ์„ฑํ™”

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— label์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์ด๋“œ์นด๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  kubectl create namespace istio-demo
kubectl label namespace istio-demo istio-injection=enabled
  



6. ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Bookinfo) ๋ฐฐํฌ

Istio ๊ณต์‹ ์ƒ˜ํ”Œ์ธ Bookinfo ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

  kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n istio-demo
  

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  kubectl get pods -n istio-demo
  



7. Istio Gateway ๋ฐ VirtualService ์„ค์ •

Bookinfo ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก Gateway์™€ VirtualService๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

  kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n istio-demo
  

Gateway๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  kubectl get gateway -n istio-demo
  



8. ์™ธ๋ถ€ ์ ‘์† ์ฃผ์†Œ ํ™•์ธ

Istio Ingress Gateway์˜ EXTERNAL-IP๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  kubectl get svc istio-ingressgateway -n istio-system
  

EXTERNAL-IP๊ฐ€ ํ• ๋‹น๋˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘์† ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
echo http://$INGRESS_HOST:$INGRESS_PORT/productpage
  

๋ธŒ๋ผ์šฐ์ €์—์„œ ์œ„ URL๋กœ ์ ‘์†ํ•˜์—ฌ Bookinfo ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.



9. Istio ์ฃผ์š” ๊ธฐ๋Šฅ ์‹ค์Šต

  • ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ (VirtualService, DestinationRule)
  • ๋ณด์•ˆ (mTLS, ์ธ์ฆ/์ธ๊ฐ€)
  • ๋ชจ๋‹ˆํ„ฐ๋ง (Kiali, Grafana, Jaeger ๋“ฑ)
  apt-get install siege

ISTIO_INGRESS_URL=$(kubectl get service/istio-ingress -n istio-ingress -o json | jq -r '.status.loadBalancer.ingress[0].hostname')

siege http://$ISTIO_INGRESS_URL -c 5 -d 10 -t 2M # 5๋ช…์˜ ๊ฐ€์ƒ ์‚ฌ์šฉ์ž๊ฐ€ , 1~10์ดˆ ๋žœ๋ค ๋”œ๋ ˆ์ด๋กœ , 2๋ถ„๋™์•ˆ ๋ถ€ํ•˜ ๋ฐœ์ƒ
  

๊ฐ ๊ธฐ๋Šฅ๋ณ„ ์‹ค์Šต์€ Istio ๊ณต์‹ ๋ฌธ์„œ ๋˜๋Š” aws-samples/istio-on-eks Getting Started์—์„œ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.



์ฐธ๊ณ