ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Istio란?
    How to Dev 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 대시보드 확인

    'How to Dev' 카테고리의 다른 글

    2021 Full-stack 개발자  (0) 2021.12.14
    RESTful API를 이용하여 PostgreSQL 연계  (0) 2021.12.14
    Visual Studio Code Javascript 라이브 로깅  (0) 2021.12.07
    git pull error(강제 덮어쓰기)  (0) 2021.09.16
    Quasar 개발 환경 설정  (0) 2021.08.17
Designed by Tistory.