DevOps R&D Center
  • Home
    • DevOps R&D Center
  • EKS
    • Networking
      • IRSA
      • EKS API server endpoint policy
        • aws cli command
  • LOKI
    • grafana alert
    • LogQL
  • ISTIO
    • references
    • Istio 학습
  • GITLAB
    • ssh key 등록 ( n개의 계정 )
  • AWS
    • aws eks cluster kube config 등록
    • aws account protection
    • aws configure
      • configure profile 설정
  • R&D Center
    • ISTIO
      • ISTIO Documentation
        • Overview
          • What is Istio
          • Why choose Istio?
          • Sidecar or ambient?
        • Concepts
          • Traffic Management
      • 메모장
      • dev cluster ( public subnet ) traffic 조회
      • Istio Tutorial
      • 카카오페이 사례
      • 트래블 월렛 EKS 전환 여정
    • EKS
      • eks provisioning
        • alb controller, istio
        • EFS
        • loki
        • cattle-monitoring-system
        • Gitlab Kubernetes Agent 적용
        • 프로젝트 배포
        • IRSA 설정
      • Secrets Store CSI Driver
      • AWS 보안 서비스를 이용하여 안전한 컨테이너 운영환경 만들기
    • AWS
      • AWS Secrets Manager
    • Network
      • 혼자서 공부하는 네트워크
      • AWS ENI
    • IAC
      • Terraform
        • 첫번째 교육 아카이브
  • SRE
    • 장애 대응 메뉴얼
  • DevOps
    • DevOps란
Powered by GitBook
On this page
  • Istio, Traffic Management
  • Gateway
  • Virtual Service
  • Destination Rule
  • Service Entry

Was this helpful?

  1. R&D Center
  2. ISTIO

카카오페이 사례

PreviousIstio TutorialNext트래블 월렛 EKS 전환 여정

Last updated 10 months ago

Was this helpful?

Istio, Traffic Management

  • Istio는 서비스 메시라는 거대한 기술의 영역을 구현하는 오픈소스 기술로써 envoy proxy를 통해서 다양한 기능들을 제공하고 있다

  • 전체 컨테이너 네트워크를 관리하는 기술이다 보니 실패 사례가 발생하는 경우 서비스 영향도가 매우 크다

  • 그래서 필요한 기능에 한정하여 제한적으로 사용하고 있다

  • API Gateway라고 해서 거창하게 생각될 수 있지만, 적용한 영역은 몇가지 기능과 패턴을 통한 트래픽 Proxy 기능에 한정되어있다


  • 사용한 istio 객체들을 살펴보자

Gateway

외부 트래픽을 수신 ingress = gateway + virtualservice istio-ingressgateway

  • istio의 모든 객체들은 Kubernetes CRD 를 통해서 구현되는데 먼저 인/아웃바운드의 외부 요청을 k8s 내부 서비스메시 통신을 등록하기 위해서 gateway를 생성해야한다

  • gateway는 sidecar 패턴으로 구성되는 istio-proxy Envoy pod이 아닌 독립적인 envoy pod에 적용된다

  • ns 별로 istio가 제공하는 ingressgateway workload resource를 별도로 helm을 통해 배포하고 있고 외부로부터 들어오는 요청을 처리하기 위해서 ingressgateway를 활용하고 있다


Virtual Service

서비스 메시 트래픽 라우팅 기능 port, uri, header 다양한 패턴 라우팅 destinationrule 조합으로 canary, A/B test 구현

  • 두번째로 k8s ingress 객체처럼 라우팅 규칙을 정의하기 위해서 virtualservice를 생성해야한다

  • port, uri, header 등 다양한 조건으로 라우팅을 처리할 수 있고

  • subset이라는 설정과 destination 객체를 조합해서 canary 배포와 a/b test등 몇가지 동작을 매우 쉽게 구현할 수 있다


Destination Rule

virtualservice 라우팅 규칙 대상을 정의 trafficPolicy를 통해 세부 기능 지원

  • 앞서 살펴본 virtualservice 의 라우팅 규칙의 대상을 정의할 수 있는 destination rule

  • 특정 호스트 레이블 정보를 가진 pod들에게 subset 이라는 집합을 통해서 대상을 그룹핑할 수 있다

  • 이외에도 trafficPolicy 라는 설정을 통해서 서비스 메시 로드밸런싱의 동작 방식이나 커넥션 풀 설정을 통해서 tcp, http, keep-alive, time-out 설정등 상세한 옵션을 조정할 수 있다


Service Entry

외부 서비스 정보를 서비스 메시 정보로 등록 외부 서비스 트래픽을 Redirect/ Foward 재시도, 시간 초과 및 장애 주입 정책 가능

  • 마지막으로 k8s 외부 대상의 서비스 엔드포인트를 서비스 메시 정보로 등록해야한다

  • 서비스 엔드리라는 객체를 통해서 통신이 필요한 외부의 대상 주소 정보를 서비스 메시에 등록함으로 써 외부로 나가는 트래픽도 서비스 메시 트래픽으로 핸들링 할 수 있다

  • Retry , Timeout, fault injection 과 같은 다양한 트래픽 매니지먼트 기능들을 사용할 수 있게 된다


서비스에서 발생하는 인바운드 요청을 어떤 컨테이너로 보낼 지 외부 서비스로 트래픽을 전달할 지

지금까지 본 gateway, virtual service, destination rule, service entry 등 4개의 manifast file을 배포함으로써 구현이 가능하다. yaml 형식으로 된 약 100 라인 정도 내외의 코드면 된다

물리적인 서버나 ec2인스턴스 위에 nginx등을 설정하고 관련 설정을 어딘가 현행화하여 배포하는 리소스와 엄청 큰 차이가 발생하게 된다

앞서 설명한 istio 객체를 사용해서 api gateway를 구성


AuthorizationPolicy를 통해서 특정 출발지 IP를 block 처리할 수 있다고 했다.

반대로 특정 출발지 IP만 허용할 수 있는 가 ? Traffic Mirroring도 언급


Tip

  • 서비스 성격 별로 NodeGroup 을 충분히 분리