How to Dev
Istio란?
거울나라
2021. 12. 10. 11:48
개념
마이크로 서비스 아키텍처 구조에서 각 서비스들 간의 트래픽을 제어하는 역할 수행
- Istio는 기존 분산 애플리케이션에 투명하게 계층화되는 오픈 소스 서비스 메시
- 서비스 메시(Service Mesh) : 서비스 간의 통신을 표시 및 제어하고 관리 할수 있도록 하는데 특화된 마이크로서비스(Micro service)의 인프라 계층
- 서비스 메시(Service Mesh) : 서비스 간의 통신을 표시 및 제어하고 관리 할수 있도록 하는데 특화된 마이크로서비스(Micro service)의 인프라 계층

주요 기능
- 트래픽 관리(traffic management): 서비스 간의 트래픽 및 API 호출을 컨트롤
- 보안 : 통신 사이의 트래빅을 암호화 하고 인증과 권한 제어
- 확장: 트래픽 정책이나 자원의 제어
- 관측 가능성(Observability): 서비스들에 대한 추적, 모니터링, 로깅을 자동으로 수행
- 보안 : 통신 사이의 트래빅을 암호화 하고 인증과 권한 제어
- 확장: 트래픽 정책이나 자원의 제어
- 관측 가능성(Observability): 서비스들에 대한 추적, 모니터링, 로깅을 자동으로 수행
설치 준비 사항
-. ubuntu
-. docker
-. minikube
# 쿠버네티스 시작(미니쿠베)
minikube start --driver=docker
Istio 설치
공식 설치 문서 참조
다운로드 Istio
# 다운로드시 폴더 생성
curl -L https://istio.io/downloadIstio | sh -
# 폴더로 이동
cd istio-1.12.1
# path 설정
export PATH=$PWD/bin:$PATH
Istio 설치
# 설치
istioctl install --set profile=demo -y
# 네임스페이스
kubectl label namespace default istio-injection=enabled
샘플 어플리케이션 배포
# bookinfo 어플리케이션 배포
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 어플리케이션 시작 확인 및 Istio 사이드카 배포
kubectl get services
# 팟 확인
kubectl get pods
외부 트래픽에 대한 어플리케이션 열기
- bookinfo 어플리케이션이 배포 되었지만 외부에서 액세스 할수 없음
- 액세스 할수 있도록 메시의 경로에 대한 매핑을 하는 Istio Ingress Gateway 생성
# 어플리케션을 Istio 게이트웨이와 연결
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
# 구성에 문제 없는지 확인
istioctl analyze
수신 IP 및 포트 확인
# 수신 포트 설정
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
# 환경변수 할당 확인
echo "$INGRESS_PORT"
echo "$SECURE_INGRESS_PORT"
# 수신 IP 설정
export INGRESS_HOST=$(minikube ip)
# 수신 IP 확인
echo "$INGRESS_HOST"
# 새 터미널 창에서 Istio Ingress Gateway로 트래픽을 보내는 미니쿠베 터널 시작
minikube tunnel
# 게이트웨이 URL 설정
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
# 설정 확인
echo "$GATEWAY_URL"
외부 액세스 확인
- 브라우저를 사용하여 Bookinfo 제품 페이지를 보고 외부에서 Bookinfo 응용 프로그램에 액세스할 수 있는지 확인합니다.
# Bookinfo 애플리케이션의 외부 주소를 검색
echo "http://$GATEWAY_URL/productpage"
# 외부주소가 안될 경우
http://127.0.0.1/productpage#
대시보드 보기
- Istio와 여러 응용 프로그램의 상태를 확인
- 서비스 메시의 구조, 메시의 토폴로지, 메시의 상태 분석
# 프로메테우스
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.12/samples/addons/prometheus.yaml
# kiali 및 기타 애드온 설치 및 배포
kubectl apply -f samples/addons
# kiali 대시보드 액세스
istioctl dashboard kiali
# kiali 대시보드에서 왼쪽 탐색 메뉴 > 그래프를 선택 > 네임스페이스 드롭다운 > default 선택
# 추적 데이터를 보려면 서비스 요청을 보내야 함
# 요청수는 Istio의 샘플링 속도에 따라 다름
# 설치시 속도를 설정
# 100개의 요청을 productpage서비스에 보내려면 다음 명령어 실행
for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done