개요
2024.03.06 - [Istio] 다운로드 및 설치에서 istioctl을 이용해 istio를 설치해 보았다. 다만 보통 쿠버네티스 환경에서 애플리케이션을 설치할 때 Helm을 많이 이용하므로, 이번 글에서는 Helm을 이용해 Istio를 설치해보려고 한다.
레포지터리 추가
istio 관련 차트가 저장된 레포지터리를 추가한다.
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update
Chart 설치
1. 네임스페이스 생성
kubectl create namespace istio-system
2. Istio-base 차트 배포
Istio 동작에 필요한 CRD 생성을 위해 배포한다.
helm install istio-base istio/base -n istio-system --set defaultRevision=default
3. istiod 차트 배포
istiod 서비스를 설치하기 위해 배포한다.
helm install istiod istio/istiod -n istio-system --set profile=demo --wait
이 때 profile을 지정하여 배포할 수 있다. 이 글에서는 demo profile을 사용하여 배포했다. 배포가 완료되었으면 istiod 포드가 정상적으로 동작하는지 확인한다.
구성에 따라 cni, ingress-gateway 등을 설치해야 하는 것 같은데 일단 기본적인 설치 방법은 완료된 것 같다.
참고로 공식 문서에 의하면 Istio CNI 차트를 사용하고 싶다면 istio-base를 배포하고, istiod를 배포하기 전에 배포해야 한다고 한다.
테스트
2024.03.06 - [Istio] 다운로드 및 설치 글을 작성했을 때와 동일하게 샘플 애플리케이션을 배포하여 istio가 정상적으로 동작하는지 확인해 본다.
1. Enovy Proxy 자동 추가 설정
kubectl label namespace default istio-injection=enabled
2. 샘플 애플리케이션 배포
curl -L https://istio.io/downloadIstio | sh -
kubectl apply -f /<PATH/ISTIO>/samples/bookinfo/platform/kube/bookinfo.yaml
배포된 pod를 보면 istioctl로 설치했을 때와 동일하게 두 개의 컨테이너가 생성된 것을 확인할 수 있다.
모든 Pod가 전부 동작 상태가 되면 아래의 명령을 실행하여 응답이 돌아오는지 확인한다.
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
참고 문서
https://istio.io/latest/docs/setup/install/helm/
https://www.anyflow.net/sw-engineer/install-istio-in-production
https://github.com/istio/istio/tree/master/manifests/charts/istio-control/istio-discovery