콘텐츠로 이동


kubernetes Istio구성정보

Istio Concept & Data Flow

  1. Istio의 전체 Concept & Data Flow
    back

  2. Concept

    • ServiceMesh를 이용해 다양한 트래픽을 제어하는 역할
    • http / websocket / http 등 트래픽 제어/관리에 대한 부하분산 수행
  3. Component별 역할

    • Data Plane - Service A / B에 구성된 Pod에는 Proxy용 Envoy Sidecar 컨테이너가 배포
    • Control Plane - Mixer: 정책 설정 / ACL / 인증 역할 - Pilot: ingress routing, traffic mirroring, traffic shifting, canary deployments, circuit breaking, fault injection 역할 수행 - Galley: yaml을 Istio용으로 변환 후 Pilot으로 전송 - Citadel: 데이터 전송 시 암호화 전송(TLS) 역할, 현재 내부 통신에는 암호화 과정이 없어서 사용하지 않음
  4. 구성 시 유의사항

    • Istio 기반의 traffic shaping을 적용하려면, k8s에서 사용하는 Ingress(or Service NodePort)를 사용하면 적용이 안 되고, Service는 ClusterIP로 적용하고, Istio ingressgateway에서 port를 정의해주어야 함.

Servicemesh: MSA 기반의 아키텍처는 각각 개별 기능을 수행하는데, 분산 서비스 배포의 크기와 복잡성이 증가하면서 시스템을 이해하고 관리하기 더 어려워짐. 클러스터 내부와 외부의 통신 라우팅도 복잡해지기 때문에 이러한 복잡성을 줄이기 위해 프록시를 사용하여 모든 트래픽을 확인 후 사용자가 설정한 구성에 따라 애플리케이션 트래픽을 관리하는 역할.

Istio 설치 절차

  1. 설치
    $> curl -L https://istio.io/downloadIstio | sh -
    $> cd istio-1.9.2
    $> ./istioctl install --set profile=default
    This will install the Istio 1.9.2  profile with ["Istio core"gateways"] components into the cluster. Proceed? (y/N) y
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    
  2. Istio 기반의 proxy를 설치하기 위해 namespace에 Istio용 Envoy 설치
    $> kubectl label namespace default istio-injection=enabled
    namespace/default labeled
    
  3. Istio profile별 제공 기능
    back
  4. Istio 서비스 상태 확인
    $> kubectl get all -n istio-system
    NAME READY STATUS RESTARTS AGE
    pod/istio-ingressgateway-78d7b9b7db-zpxxf 1/1 Running 2 19d
    pod/istiod-85c8645bbc-4jkbj 1/1 Running 1 19d
    
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/istio-ingressgateway LoadBalancer 10.233.14.72 <pending> 15021:31094/TCP,80:32134/TCP,443:31338/TCP,15012:30093/TCP,15443:30233/TCP 20d
    service/istiod ClusterIP 10.233.43.248 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 20d
    service/tracing NodePort 10.233.13.45 <none> 16686:30008/TCP 17d
    
    NAME READY UP-TO-DATE AVAILABLE AGE
    deployment.apps/istio-ingressgateway 1/1 1 1 20d
    deployment.apps/istiod 1/1 1 1 20d
    
    NAME DESIRED CURRENT READY AGE
    replicaset.apps/istio-ingressgateway-78d7b9b7db 1 1 1 20d
    replicaset.apps/istiod-85c8645bbc 1 1 1 20d
    
    NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
    horizontalpodautoscaler.autoscaling/istio-ingressgateway Deployment/istio-ingressgateway <unknown>/80% 1 5 1 20d
    horizontalpodautoscaler.autoscaling/istiod Deployment/istiod <unknown>/80% 1 5 1 20d
    

Addon 설정

  1. Addon 종류
    1. Kiali: Istio 모니터링을 위한 대시보드
    2. Jaeger / Zipkin: 분산 시스템 모니터링
      1. Zipkin: Twitter에서 개발한 오픈소스
      2. Jaeger: Uber에서 개발하고 CNCF 프로젝트로 진행 중인 오픈소스 (k8s 환경에서는 Jaeger가 좀 더 효율적)
  2. Addon 설치

    $> wget http://192.168.100.10:28080/...
    $> kubectl apply -f ./sample/
    $> kubectl get all -n istio-system
    NAME                                        READY   STATUS    RESTARTS   AGE
    pod/istio-ingressgateway-78d7b9b7db-zpxxf   1/1     Running   2          19d
    pod/istiod-85c8645bbc-4jkbj                 1/1     Running   1          19d
    pod/jaeger-7f78b6fb65-jcrgz                 1/1     Running   1          17d
    pod/kiali-dc84967d9-cqn8v                   1/1     Running   1          19d
    pod/prometheus-7bfddb8dbf-vsddf             2/2     Running   4          19d
    
    NAME                           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                 AGE
    service/istio-ingressgateway   LoadBalancer   10.233.14.72    <pending>     15021:31094/TCP,80:32134/TCP,443:31338/TCP,15012:30093/TCP,15443:30233/TCP 20d
    service/istiod                 ClusterIP      10.233.43.248   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                     20d
    service/jaeger-collector       ClusterIP      10.233.35.73    <none>        14268/TCP,14250/TCP                                                      17d
    service/kiali                  NodePort       10.233.21.50    <none>        20001:30007/TCP,9090:31990/TCP                                          20d
    service/prometheus             ClusterIP      10.233.24.217   <none>        9090/TCP                                                                20d
    service/tracing                NodePort       10.233.13.45    <none>        16686:30008/TCP                                                         17d
    service/zipkin                 ClusterIP      10.233.34.17    <none>        9411/TCP                                                                17d
    
    NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/istio-ingressgateway   1/1     1            1           20d
    deployment.apps/istiod                 1/1     1            1           20d
    deployment.apps/jaeger                 1/1     1            1           17d
    deployment.apps/kiali                  1/1     1            1           20d
    deployment.apps/prometheus             1/1     1            1           20d
    
    NAME                                              DESIRED   CURRENT   READY   AGE
    replicaset.apps/istio-ingressgateway-78d7b9b7db   1         1         1       20d
    replicaset.apps/istiod-85c8645bbc                 1         1         1       20d
    replicaset.apps/jaeger-7f78b6fb65                 1         1         1       17d
    replicaset.apps/kiali-dc84967d9                   1         1         1       20d
    replicaset.apps/prometheus-7bfddb8dbf             1         1         1       20d
    
    NAME                                                       REFERENCE                      TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    horizontalpodautoscaler.autoscaling/istio-ingressgateway   Deployment/istio-ingressgateway <unknown>/80% 1         5         1          20d
    horizontalpodautoscaler.autoscaling/istiod                 Deployment/istiod              <unknown>/80% 1         5         1          20d
    

  3. 대시보드 외부 접속하기

    • Kiali: http://{%서버IP}:30007
    • Jaeger: http://{%서버IP}:30008
    • 삭 제
      $> istioctl x uninstall --purge
      $> kubectl delete namespace istio-system
      
  4. 시스템 설정을 위한 Component list

    항 목 용 도 기 타
    gateway http / tcp를 연결하기 위해 구성하는 로드밸런서
    virtualservice service 게이트웨이에 바인딩 후 트래픽을 구성된 여러 엔드포인트로 전달 (트래픽 비율 설정)
    virtualservice version(a.k.a subset) 특정 서비스에 대해 애플리케이션 바이너리의 버전 변경을 실행하는 집합
    virtualservice source 서비스를 호출하는 다운스트림용 클라이언트
    virtualservice host 클라이언트가 서비스 연결할 때 사용하는 주소
    destinationRule 라우팅 규칙을 처리한 후 연결할 네트워크 서비스를 설정
    tcproute tcp트래픽에 대해 라우팅 규칙을 위한 조건 설정
    tcproute match 활성화할 규칙조건
    tcproute route 연결할 대상
  5. Example yml

    1. gateway 설정 (tcp/30011에 대해 gateway 설정)

      $> vi gateway.yml
      ---
      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway
        namespace: test
      spec:
        selector:
          app: test
        servers:
          - hosts:
              - '*'
            port:
              name: tcp
              number: 30011
              protocol: TCP
      

    2. VirtualService 설정 (tcp/30011이 들어오면 service111-1, service111-2의 tcp/2580으로 연결하되 50%씩 트래픽 분할 처리)

      $> vi vs.yaml
      ---
      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: test-vs
        namespace: test
      spec:
        gateways:
          - gateway
        hosts:
          - prg111
        tcp:
          - match:
              - port: 30011
            route:
              - destination:
                  host: prg111-1
                  port:
                    number: 2580
                  subset: v1
                weight: 50
              - destination:
                  host: prg111-2
                  port:
                    number: 2580
                  subset: v2
                weight: 50
      

      • destinationrule 설정 (service111에 대해 v1, v2 설정)

        $> vi rule.yml
        ---
        apiVersion: networking.istio.io/v1beta1
        kind: DestinationRule
        metadata:
          name: test-rule
          namespace: test
        spec:
          host: prg111
          subsets:
            - labels:
                version: 'v1'
              name: v1
            - labels:
                version: 'v2'
              name: v2
          trafficPolicy:
            loadBalancer:
              simple: ROUND_ROBIN
            tls:
              mode: DISABLE
        

reference

  • https://istio.io/latest/docs/setup/getting-started/
back
perplexity에서 생성한 AI이미지






작성일: 2026년 6월 18일 ,  마지막 업데이트: 2026년 7월 14일