How to Dev

Istio란?

거울나라 2021. 12. 10. 11:48

개념

마이크로 서비스 아키텍처 구조에서 각 서비스들 간의 트래픽을 제어하는 역할 수행
- Istio는 기존 분산 애플리케이션에 투명하게 계층화되는 오픈 소스 서비스 메시
- 서비스 메시(Service Mesh) : 서비스 간의 통신을 표시 및 제어하고 관리 할수 있도록 하는데 특화된 마이크로서비스(Micro service)의 인프라 계층
 
 
Istio 사용 전과 후

주요 기능

- 트래픽 관리(traffic management): 서비스 간의 트래픽 및 API 호출을 컨트롤
- 보안 : 통신 사이의 트래빅을 암호화 하고 인증과 권한 제어
- 확장: 트래픽 정책이나 자원의 제어
- 관측 가능성(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 다운로드 및 Path 설정

Istio 설치

# 설치
istioctl install --set profile=demo -y
# 네임스페이스
kubectl label namespace default istio-injection=enabled

다운로드된 Istio 설치

샘플 어플리케이션 배포

# bookinfo 어플리케이션 배포
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 어플리케이션 시작 확인 및 Istio 사이드카 배포
kubectl get services
# 팟 확인
kubectl get pods

서비스 상태 확인
Ready의 상태가 완료될때 까지 대기

외부 트래픽에 대한 어플리케이션 열기

- 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"

포트 및 IP 설정
게이트웨이 설정 및 확인

외부  액세스 확인

- 브라우저를 사용하여 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

kiali 및 기타 애드온 설치
프로메테우스 및 kiali 대시보드 실행
kaili 대시보드 설정
kiali 대시보드 확인