개요
2024.02.29 - [Service Mesh] Istio 란에서 Istio에 대한 개념 정도만 간단히 살펴보았는데, 이번 글에서는 공식 문서를 참조하여 Istio를 설치해보려고 한다. https://istio.io/latest/docs/setup/getting-started/ 페이지를 참조해 Istio 릴리즈를 직접 다운로드하여 진행해 본다.
테스트는 Killercoda에서 수행했고, Kubernetes 1.29 버전을 사용했다.
Istio 다운로드
Istio 릴리즈를 다운로드한다.
curl -L https://istio.io/downloadIstio | sh -
옵션 없이 다운로드를 수행하면 최신 버전을 다운로드한다. 만약 특정 버전을 다운로드하고 싶다면 아래와 같이 버전을 지정할 수 있다.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.20.2 TARGET_ARCH=x86_64 sh -
다운로드가 완료되면 다음에 진행할 단계를 안내하는 출력문을 확인할 수 있다. 다운로드한 릴리즈는 현재 경로에 압축이 풀린 상태로 위치하고 있는데, 샘플 애플리케이션과 istio 클라이언트(istioctl)를 포함하고 있다.
export PATH=</PATH/ISTIO>/bin:$PATH
istioctl을 사용할 수 있도록 환경 변수를 추가한다.
istio 설치
istioctl을 사용해 istio를 설치한다. istio는 profile이라는 개념으로 운영 배포나 테스트 등의 설치 요구 사항에 맞는 기본적인 설정값을 몇 가지 제공하고 있는데, 이 글에서는 demo profile을 사용하여 설치한다.
istioctl install --set profile=demo -y
애플리케이션 배포 시 Enovy Proxy를 자동으로 추가하여 배포하도록 설정한다. 애플리케이션을 배포할 네임스페이스에 istio-injection이란 레이블을 enbled 값으로 추가하는 방식이다.
kubectl label namespace default istio-injection=enabled
여기까지 해서 istio 설치가 완료되었다.
샘플 애플리케이션 테스트
샘플 애플리케이션을 이용해 설치한 istio가 정상적으로 동작하는지 확인한다.
다운로드한 istio 릴리즈에 포함된 샘플 애플리케이션을 배포한다.
kubectl apply -f /<PATH/ISTIO>/samples/bookinfo/platform/kube/bookinfo.yaml
배포된 pod를 보면 2개의 컨테이너가 존재하고 있는데, 하나는 애플리케이션 컨테이너이고 하나는 Istio에 의해 자동으로 추가된 Enovy Proxy 컨테이너이다. kubectl로 배포한 샘플 애플리케이션 yaml 정의 파일을 확인해보면 Deployment에는 단일 컨테이너만 정의되어 있는 것을 확인할 수 있다.
모든 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/getting-started/
https://istio.io/latest/docs/setup/additional-setup/config-profiles/