๐ธ๏ธ 10. ์๋น์ค๋ฉ์ ์ค์ต
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์์ ์์ ๋ฅผ ์ฐธ๊ณ ํ์ธ์.