devlos
Devlos Archive
devlos
전체 방문자
오늘
어제
12-09 13:26

최근 글

  • 분류 전체보기 (107)
    • 프로젝트 (1)
    • MSA 설계 & 도메인주도 설계 (9)
    • 클라우드 컴퓨팅 & NoSQL (87)
      • [Cilium Study] 실리움 스터디 (8)
      • [KANS] 쿠버네티스 네트워크 심화 스터디 (12)
      • [T101] 테라폼 4기 스터디 (8)
      • [CICD] CICD 맛보기 스터디 (3)
      • [T101] 테라폼 기초 입문 스터디 (6)
      • [AEWS] Amazon EKS 워크숍 스터디 (7)
      • [PKOS] 쿠버네티스 실무 실습 스터디 (7)
      • Kubernetes (13)
      • Docker (7)
      • Redis (1)
      • Jenkins (3)
      • Terraform (1)
      • Ansible (4)
      • Kafka (1)
    • 프로그래밍 (7)
      • Spring Boot (5)
      • Broker (1)
    • 성능과 튜닝 (1)
    • ALM (0)
    • 기타 (2)

인기 글

태그

  • 데브옵스
  • docker
  • CloudNet@
  • kOps
  • 쿠버네티스 스터디
  • t101 4기
  • terraform
  • 테라폼
  • Kubernetes
  • MSA
  • PKOS
  • DevOps
  • cilium
  • 쿠버네티스
  • 도커

티스토리

최근 댓글

hELLO · Designed By 정상우.
devlos

Devlos Archive

[Istio] Istio Service mesh 튜토리얼 후기
클라우드 컴퓨팅 & NoSQL/Kubernetes

[Istio] Istio Service mesh 튜토리얼 후기

2022. 12. 31. 23:17
반응형

들어가며

Istio Service Mesh 는다양한 장점을 가지고 있지만, 그중 필자가 도입하고자 하는 이유는 두 가지다.

첫 번째, 서비스간 상호작용 추적

운영 중인 서비스간 상호 관계를 파악하기 위한 방법은 전술적 설계 과정의 개발 산출물을 토대로 서비스의 연관성을 확인한 후, Datadog의 이벤트 로그들을 확인하며 검증하는 방법뿐이다. Istio Service Mesh의 Sidecar를 기반으로 한 운영 가시화가 매력적이었다. 또한 Sidecar를 이용하여 상호 작용이 불가능한 서비스 결함을 사전 탐지할 수 있는 점도 좋았다.

두 번째, Circuit breaker 도입

운영 중인 서비스에 Circuit breaker를 도입하기 위함이다. 플랫폼이 Polyglot 한 마이크로 서비스 구조로 변경되어 가는 상황과, Java Spring 기반 Circuit Breaker를 코드에 일일이 작성해야 하는 불편함을 service mesh sidecar를 통해 해결할 수 있다는 점이 좋았다. 이는 올해 프로젝트 진행에 도움을 주셨던 SK Telecom 전문가 분께서도 추천해 주신 내용이다.

또한 당근마켓 배상익님께서 아래 강의에서 언급하신 것처럼 작년보다 올해 Istio 구성이 더욱 간결해져 관리해야 할 내용이 많이 줄어들었다는 점도 좋았다.


강의: https://fastcampus.co.kr/dev_online_istio

MSA 환경의 효율적인 DevOps를 위한 Istio | 패스트캠퍼스

실습으로 배워서 바로 업무에 적용하는 국내 최초 Istio 마스터 클래스 | DevOps/SRE 엔지니어 리드와 함께 45개 실습을 진행하며 가장 최신 버전의 Istio를 손에 익을 때까지 사용해보세요. 구글링해

fastcampus.co.kr

따라서, Service mesh에 대한 간단한 예제를 바탕으로 가이드를 따라 다양한 기능을 사용해 보고, 내년(2023년)에 플랫폼 도입을 목표로 사전 이해를 위해 튜토리얼을 진행한 내용을 정리했다.


테스트 환경

Macbook Pro Apple M1 Pro / 32G / Ventura 13.0.1
(클라우드 학습을 위해 금년도 도입한 최고의 병기.. 라고 여기며 소비를 합리화 하고있다.)


Docker와 Kubernetes 설치

https://www.docker.com 접속

Docker: Accelerated, Containerized Application Development

Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

Docker 설치 파일 다운로드 후 설치한다. Docker 설치는 크게 어렵지 않으므로 OS환경에 맞게 다운로드하여 설치한다.

Kubernetes 사용

설치된 도커 데스크 톱의 Preference에서 Enable Kubernetes 체크 후 Kubernetes가 설치될 때까지 대기한다.
참고로 Show system containers를 체크하는 것은 추천하지 않는다. (컨테이너가 지저분하게 조회되기 때문이다.)


편의성 (선택사항)

https://kubernetes.io/docs/reference/kubectl/cheatsheet 에 접속하여 Kubectl autocomplete 설정을 하면 편하다. kubectl → k로 쓸 수 있게 해 주며 명령어 자동 완성 기능 역시 사용할 수 있다.

kubectl Cheat Sheet

This page contains a list of commonly used kubectl commands and flags. Kubectl autocomplete BASH source <(kubectl completion bash) # set up autocomplete in bash into the current shell, bash-completion package should be installed first. echo "source <(kubec

kubernetes.io


튜토리얼 환경 설치 및 실행

필자가 설명하려는 Bookinfo 예제는 다음과 같은 순서로 세팅해야 한다.

  1. Istio 설치
  2. Namespace에 사이드카 주입 설정
  3. 예제 설치
  4. Dashboard 플러그인 설치
  5. Kiali dashboard 접속
  6. 트래픽 시뮬레이션

Istio 설치

다음의 사이트에 접속하여 설치 가이드를 따른다. https://istio.io/latest/docs/setup/getting-started/#install

Getting Started

Try Istio’s features quickly and easily.

istio.io

필자가 테스트한 환경은 Kubernetes v1.25.2이고, 최신 Istio의 버전은 v1.16.1이다. 버전 별로 호환성 문제가 발생하기 때문에, 호환성을 잘 체크하고 튜토리얼을 수행한다.
(언급한 강의에서 사용했던 Istio 버전은 v1.11.3이다. 혹시나 해서 Kubernetes v1.25.2에서 해당 버전 구동해보니 오류가 발생했다.)
필자의 설치 과정은 다음과 같다.

Istio 다운로드

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.16.1

다운로드 파일로 이동

cd istio-1.16.1

istioctl 명령어 등록

export PATH=$PWD/bin:$PATH

[선택사항] Ohmyzsh를 사용하는 경우 환경설정에 아래 내용을 등록하지 않으면, 터미널 재실행 시마다 istioctl을 등록해줘야 하는 번거로움이 있다.

vim ~/.zshrc # zsh 환경설정 파일 실행

#다음의 내용은 쿠버네티스 관련 명령어를 쉽게 사용하기 위한 설정
alias k=kubectl
complete -o default -F __start_kubectl k

#다음의 코드 추가 (강조 표시된 경로는 istio 폴더 경로)
export PATH=/Users/devlos/Document/install/istio-1.16.1/bin:$PATH

Istioctl을 이용하여 Istio 설치

istioctl install --set profile=demo -y

Profile의 종류별로 istio-egressgateway, istio-ingressgateway, istiod 세 가지를 다른 방식으로 제공한다. 별도의 Profile 설정 없이 istioctl install을 통해 설치할 경우 default로 설치되어 egressgateway를 사용할 수 없다.

Istio profile 종류

참고: https://istio.io/latest/docs/setup/additional-setup/config-profiles/

Installation Configuration Profiles

Describes the built-in Istio installation configuration profiles.

istio.io


Namespace에 사이드카 주입 설정

Default namespace에 Envoy 사이드카 프락시를 자동 삽입 하도록 istio-injection label을 추가한다.

kubectl label namespace default istio-injection=enabled
사이드카: 서비스 인스턴스에 연결되어 애플리케이션 네트워킹, 모니터링, 추적, 로깅 등의 기능을 수행하는 인스턴스다. Envoy 사이드카 프락시는 C++로 작성된 고도로 최적화된 내부 서비스 프락시로써 현재(2022년 말) 애플리케이션 사이드카의 표준으로 언급된다.

예제 설치

아래의 그림과 같이 4개의 Polyglot 한 마이크로 서비스로 이루어진 예제를 설치한다.

예제 백엔드 서비스 구성 및 연관관계

가장 먼저 접근하게 되는 Product page 내부에 Review 정보와 Product details 정보를 포함한다. Review 정보는 3개의 버전으로 구성되어있으며 각각 다른 UI를 제공한다. Reviews-v2, v3는 Ratings 서비스에서 정보를 받아온다. 예제에 대한 상세한 가이드 문서는 아래의 링크를 참고한다.
참고: https://istio.io/latest/docs/examples/bookinfo/

Bookinfo Application

Deploys a sample application composed of four separate microservices used to demonstrate various Istio features.

istio.io

애플리케이선 배포

이전 과정에서 다운로드한 Istio 경로에 보면 samlpe이 이미 포함되어 있다. 따라서 해당 resource yaml을 통해 kubernetes에 배포만 하면 된다.

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

정상 배포 확인

Service 및 pod들이 정상적으로 실행되었는지 확인한다.

kubectl get services
kubectl get pods

클러스터 외부 접속을 위한 Istio gateway 및 VertualService 설정

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

예제 페이지 정상동작 확인

이 과정까지 정상적으로 진행이 된다면, 다음의 예제페이지로 정상 접속 될 것이다. (http://localhost/productpage)

예제 페이지 접속 화면

대시보드 Addon 설치

istio 다운로드 정보에 포함된 Addon들을 설치한다.

kubectl apply -f samples/addons
kubectl rollout status deployment/kiali -n istio-system
Terminal에서 Addon 설치

다음과 같이 Grafana, Kiali, Prometheus 등의 모니터링 툴들이 자동으로 배포되는 것을 확인할 수 있다.


Kiali 대시보드 접속

다음의 명령어를 사용하여 Kiali 대시보드에 접속하면 아래와 같은 화면을 확인할 수 있다.

istioctl dashboard kiali

다음과 같이 kiali 화면에 접속할 수 있다.

Kiali Dashboard 첫 화면

트래픽 시뮬레이션

kiali 대시보드 설정까지 끝났으니, 이제 트래픽을 주며 전체 시스템에서 트래픽이 어떤 식으로 흘러가는지 확인해 볼 수 있다. 우측 컨트롤 박스에서 Graph 탭에 들어간다음 다음과 같은 설정을 추가한다.

컨트롤 박스의 [Traffic Animation]을 활성화시키면 그래프에서 트래픽이 흘러가는 역동적인 모습을 감상할 수 있다.
터미널에서 아래의 명령을 실행하여 100개의 트래픽을 발생시키면 트래픽의 흐름과, Throghput, Traffic Rate, Responsetime 등을 확인할 수 있다. 처리 속도가 너무 빨라서 금방 지나간다면, 1000개로 설정해서 다시 보자.

for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

데모 동영상: https://youtu.be/I0xRrfgm94s


마치며

이번 글에서는 Bookinfo Application이라는 Istio 공식 예제 데모를 실습해 본 과정을 소개했다. 트래픽의 흐름과 유용한 정보들이 Kiali에서 한눈에 시각화되는 점이 아주 인상적이었다. 또한 사이드카를 namespace 단위로 주입시켜 준다는 점이 편리하게 느껴졌다.

(하지만 커스텀하게 적용해나가게 되면 더 어렵겠지.. 괜찮아)

다음 Istio 관련 포스팅에서는 강의에서 언급되는 실무 환경과 비슷한 데모들을 좀 더 살펴보고 내용을 정리하도록 한다.

반응형

'클라우드 컴퓨팅 & NoSQL > Kubernetes' 카테고리의 다른 글

[Kubernetes] DEVOCEAN - 김정기 전문가(SK Telecom)님의 멘토링  (2) 2022.10.09
[Kubernetes]Nginx 이미지를 이용한 간단한 쿠버네티스 프로젝트  (0) 2022.07.13
쿠버네티스(Kubernetes) 공식 튜토리얼 #7  (0) 2021.04.04
쿠버네티스(Kubernetes) 공식 튜토리얼 #6  (0) 2021.04.04
쿠버네티스(Kubernetes) 공식 튜토리얼 #5  (0) 2021.04.03
    devlos
    devlos
    안녕하세요, Devlos 입니다. 새로 공부 중인 지식들을 공유하고, 명확히 이해하고자 블로그를 개설했습니다 :) 여러 DEVELOPER 분들과 자유롭게 지식을 공유하고 싶어요! 방문해 주셔서 감사합니다 😀 - DEVLOS -

    티스토리툴바