πŸ’»
DevOps Cookbook
  • Home
    • Meiko DevOps Cookbook
  • Gitlab
    • Tips
      • 사전 μ •μ˜λœ CI/CD λ³€μˆ˜μ˜ κΈ°λ³Έ μ„ΈνŠΈ
    • λ”₯λ‹€μ΄λΈŒ Gitlab CI/CD
      • GitLab CI/CD μ‹œμž‘ν•˜κΈ°
        • .gitlab-ci.yml 파일
        • Runner
        • νŒŒμ΄ν”„λΌμΈ
        • CI/CD λ³€μˆ˜
        • CI/CD μ»΄ν¬λ„ŒνŠΈ
      • CI/CD YAML ꡬ문 μ°Έμ‘°
    • CI/CD Notifications
      • CI/CD slack notifiaction κ΅¬μΆ•μž‘μ—… κ²°κ³Ό
  • Kubernetes
    • Persistence Volume
      • play-cluster
    • Ingress
      • Ingressλž€
      • μˆ˜λ™μœΌλ‘œ ingress λ°°ν¬ν•˜κΈ°
    • Security
    • HPA
      • hpa troubleshooting history
        • 1. HELM_UPGRADE_VALUES_FILE둜 hpaκ°€ μΆ”κ°€λ˜μ§€ μ•ŠλŠ” 원인
        • 2. targetCPUUtilizationPercentage 계산은 μ–΄λ–»κ²Œ λ˜λŠ”κ°€
        • 3. helm values에 cpu resource λ‹¨μœ„λ₯Ό 1둜 ν–ˆμ„ λ•Œ μ‹€μ œ νŒŒλ“œμ— 1m( 0.001 ) μ½”μ–΄κ°€ λΆ€μ—¬λœ 것
        • 4. pod cpu resourcesκ°€ 할당받은 것을 λ‚˜νƒ€λ‚΄λŠ” 것인 μ§€ ν˜„μž¬ μ‚¬μš©λŸ‰μ„ λ‚˜νƒ€λ‚΄λŠ” 것인지 검증
        • 5. μ„€μ •ν•œ hpaλ₯Ό 기반으둜 pod auto scaling이 λ™μž‘ν•˜λŠ” μ§€ 검증
      • HorizontalPodAutoscaler의 behavior ν•„λ“œ 쀑 stabilizationWindowSeconds 값이 Kubernetes μ½”λ“œμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ 뢄석
  • prometheus
    • prometheus λ¦¬μ†ŒμŠ€ alert μ„ΈνŒ…
      • μŠ¬λž™ 채널 ꡬ성
      • alert ν™˜κ²½ ꡬ성 κ°€μ΄λ“œ
  • Loki
    • loki-grafana alert μ„ΈνŒ…
      • 1μ°¨ 검증 κ²°κ³Ό
      • Alert ν™˜κ²½ ꡬ성 κ°€μ΄λ“œ
  • load test
    • nGrinder
      • nGrinder Test Configuration κ°’λ“€
      • 질문리슀트
        • groovyλŠ” JUnit μŠ€νƒ€μΌμ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ”κ±΄κ°€ ? + GTestκ°€ λ­”μ§€ μ’€ ν—·κ°ˆλ¦°λ‹€
      • Script
        • Groovy Script Structure
          • reference
          • Groovy script deep dive
          • Groovy Script μ‹€ν–‰ ꡬ쑰 뢄석
      • Test
        • [nGrinder] single endpoint load test ν•˜κΈ°
          • [nGrinder] single endpoint load test script 기반 cpu μ‚¬μš©λŸ‰ ν…ŒμŠ€νŠΈ
          • [nGrinder] single endpoint load test script 기반 pod autoscaling ν…ŒμŠ€νŠΈ
        • [nGrinder] multi endpoint load test ν•˜κΈ°
          • [nGrinder] multi endpoint load test script에 μ •μ˜ν•œ test듀이 μ‹€ν–‰ μˆœμ„œλ₯Ό 보μž₯ λ°›λŠ”κ°€?
  • AWS
    • aws-cli
      • eks cluster vpc μŠ€νŽ™λ³΄κΈ°
    • aws-vpc
  • EKS
    • youtube links
    • EKS best practice
    • 질문 정리
  • Istio
    • Istio Basic
      • Istio μ»΄ν¬λ„ŒνŠΈ 별 μ—­ν• 
      • Kubernetes Ingress와 Istio VirtualService의 관계
    • Gateway
      • Gateway μ£Όμš” νŠΉμ§•
      • Istio Gateway와 Kubernetes Ingress의 μ£Όμš” 차이점
  • IAC
    • Terraform
      • ν…ŒλΌνΌ μ„€μΉ˜
      • ν…ŒλΌνΌ λ¬Έμ„œ
      • ν…ŒλΌνΌ κ°œλ…
        • μ–Έμ–΄ ꡬ쑰
        • μ‚¬μš© μˆœμ„œ
        • μƒνƒœνŒŒμΌ (tfstate)
        • λ³€μˆ˜ μ •μ˜ 방법
      • Terraform - AWS VPC
    • Ansible
      • Ansible 초기 ν•™μŠ΅ λ‚΄μš©
      • Ansible Playbook
      • Ansible Study
        • Inventory
        • Playbook
          • Module
        • Variable
  • etc
    • Toss SLASH24
    • Elastic Load Balancing
    • λ‚™μ„œμž₯
      • IRSA
    • deep dive
      • Istio κ³΅μ‹λ¬Έμ„œ λ²ˆμ—­
        • Overview
          • What is Istio?
          • Why choose Istio?
          • Sidecar or ambient?
        • Concepts
          • Traffic Management
        • Page
      • eks μ—μ„œ control plane < - > data plane 톡신 원리
Powered by GitBook
On this page
  • νŠΈλž˜ν”½ 관리
  • Istio νŠΈλž˜ν”½ 관리 μ†Œκ°œ
  • 가상 μ„œλΉ„μŠ€
  • 가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?
  • 가상 μ„œλΉ„μŠ€ 예제
  • hosts ν•„λ“œ
  • λΌμš°νŒ… κ·œμΉ™
  • 일치 쑰건
  • λŒ€μƒ
  • λΌμš°νŒ… κ·œμΉ™ μš°μ„ μˆœμœ„
  • λΌμš°νŒ… κ·œμΉ™μ— λŒ€ν•œ 더 μžμ„Έν•œ λ‚΄μš©
  • λŒ€μƒ κ·œμΉ™
  • λ‘œλ“œ λ°ΈλŸ°μ‹± μ˜΅μ…˜
  • λŒ€μƒ κ·œμΉ™ 예제
  • κ²Œμ΄νŠΈμ›¨μ΄
  • κ²Œμ΄νŠΈμ›¨μ΄ 예제
Edit on GitHub
  1. etc
  2. deep dive
  3. Istio κ³΅μ‹λ¬Έμ„œ λ²ˆμ—­
  4. Concepts

Traffic Management

PreviousConceptsNextPage

Last updated 10 months ago

νŠΈλž˜ν”½ 관리

Istio의 νŠΈλž˜ν”½ λΌμš°νŒ… κ·œμΉ™μ„ μ‚¬μš©ν•˜λ©΄ μ„œλΉ„μŠ€ κ°„μ˜ νŠΈλž˜ν”½ 흐름과 API ν˜ΈμΆœμ„ μ‰½κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. IstioλŠ” μ„œν‚· 브레이컀, νƒ€μž„μ•„μ›ƒ, μž¬μ‹œλ„μ™€ 같은 μ„œλΉ„μŠ€ μˆ˜μ€€ μ†μ„±μ˜ ꡬ성을 λ‹¨μˆœν™”ν•˜κ³ , A/B ν…ŒμŠ€νŠΈ, μΉ΄λ‚˜λ¦¬μ•„ 둀아웃, λ°±λΆ„μœ¨ 기반 νŠΈλž˜ν”½ 뢄할을 ν†΅ν•œ 단계적 둀아웃과 같은 μ€‘μš”ν•œ μž‘μ—…μ„ μ‰½κ²Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 쒅속 μ„œλΉ„μŠ€λ‚˜ λ„€νŠΈμ›Œν¬μ˜ μž₯애에 λŒ€ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 탄λ ₯성을 λ†’μ΄λŠ” 데 도움이 λ˜λŠ” κΈ°λ³Έ 제곡 μ•ˆμ •μ„± κΈ°λŠ₯도 μ œκ³΅ν•©λ‹ˆλ‹€.Istio의 νŠΈλž˜ν”½ 관리 λͺ¨λΈμ€ μ„œλΉ„μŠ€μ™€ ν•¨κ»˜ λ°°ν¬λ˜λŠ” Envoy ν”„λ‘μ‹œμ— μ˜μ‘΄ν•©λ‹ˆλ‹€. λ©”μ‹œ μ„œλΉ„μŠ€κ°€ μ£Όκ³ λ°›λŠ” λͺ¨λ“  νŠΈλž˜ν”½(데이터 ν”Œλ ˆμΈ νŠΈλž˜ν”½)은 Envoyλ₯Ό 톡해 ν”„λ‘μ‹œλ˜λ―€λ‘œ, μ„œλΉ„μŠ€λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ λ©”μ‹œ μ£Όλ³€μ˜ νŠΈλž˜ν”½μ„ μ‰½κ²Œ μ§€μ‹œν•˜κ³  μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.이 κ°€μ΄λ“œμ— μ„€λͺ…λœ κΈ°λŠ₯이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄, μ—μ„œ Istio의 νŠΈλž˜ν”½ 관리 κ΅¬ν˜„μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ°€μ΄λ“œμ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„μ—μ„œλŠ” Istio의 νŠΈλž˜ν”½ 관리 κΈ°λŠ₯을 μ†Œκ°œν•©λ‹ˆλ‹€.

Istio νŠΈλž˜ν”½ 관리 μ†Œκ°œ

λ©”μ‹œ λ‚΄μ—μ„œ νŠΈλž˜ν”½μ„ μ§€μ‹œν•˜λ €λ©΄ IstioλŠ” λͺ¨λ“  μ—”λ“œν¬μΈνŠΈκ°€ 어디에 있고 μ–΄λ–€ μ„œλΉ„μŠ€μ— μ†ν•˜λŠ”μ§€ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. IstioλŠ” 자체 μ„œλΉ„μŠ€ λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ±„μš°κΈ° μœ„ν•΄ μ„œλΉ„μŠ€ 검색 μ‹œμŠ€ν…œμ— μ—°κ²°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Kubernetes ν΄λŸ¬μŠ€ν„°μ— Istioλ₯Ό μ„€μΉ˜ν•œ 경우 IstioλŠ” ν•΄λ‹Ή ν΄λŸ¬μŠ€ν„°μ˜ μ„œλΉ„μŠ€μ™€ μ—”λ“œν¬μΈνŠΈλ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•©λ‹ˆλ‹€.이 μ„œλΉ„μŠ€ λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ Envoy ν”„λ‘μ‹œλŠ” κ΄€λ ¨ μ„œλΉ„μŠ€λ‘œ νŠΈλž˜ν”½μ„ μ§€μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” μ„œλΉ„μŠ€ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 각 μ„œλΉ„μŠ€ μ›Œν¬λ‘œλ“œμ˜ μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€κ°€ μžˆλŠ”λ°, 이λ₯Ό λ‘œλ“œ λ°ΈλŸ°μ‹± 풀이라고도 ν•©λ‹ˆλ‹€. 기본적으둜 Envoy ν”„λ‘μ‹œλŠ” μ΅œμ†Œ μš”μ²­ λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ 각 μ„œλΉ„μŠ€μ˜ λ‘œλ“œ λ°ΈλŸ°μ‹± 풀에 νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ 각 μš”μ²­μ€ ν’€μ—μ„œ λ¬΄μž‘μœ„λ‘œ μ„ νƒν•œ 두 개의 호슀트 쀑 ν™œμ„± μš”μ²­μ΄ 더 적은 호슀트둜 λΌμš°νŒ…λ©λ‹ˆλ‹€. 이런 λ°©μ‹μœΌλ‘œ κ°€μž₯ 많이 λ‘œλ“œλœ ν˜ΈμŠ€νŠΈλŠ” λ‹€λ₯Έ 호슀트만큼 λ‘œλ“œλ˜μ§€ μ•Šμ„ λ•ŒκΉŒμ§€ μš”μ²­μ„ λ°›μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.Istio의 κΈ°λ³Έ μ„œλΉ„μŠ€ 검색 및 λ‘œλ“œ λ°ΈλŸ°μ‹±μ€ μž‘λ™ν•˜λŠ” μ„œλΉ„μŠ€ λ©”μ‹œλ₯Ό μ œκ³΅ν•˜μ§€λ§Œ, Istioκ°€ ν•  수 μžˆλŠ” λͺ¨λ“  κ²ƒκ³ΌλŠ” 거리가 λ©‰λ‹ˆλ‹€. λ§Žμ€ 경우 λ©”μ‹œ νŠΈλž˜ν”½μ— λŒ€ν•΄ 더 μ„ΈλΆ„ν™”λœ μ œμ–΄λ₯Ό 원할 수 μžˆμŠ΅λ‹ˆλ‹€. A/B ν…ŒμŠ€νŠΈμ˜ μΌν™˜μœΌλ‘œ μƒˆ λ²„μ „μ˜ μ„œλΉ„μŠ€μ— νŠΉμ • λΉ„μœ¨μ˜ νŠΈλž˜ν”½μ„ μ§€μ‹œν•˜κ±°λ‚˜, νŠΉμ • μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€ ν•˜μœ„ 집합에 λŒ€ν•œ νŠΈλž˜ν”½μ— λ‹€λ₯Έ λ‘œλ“œ λ°ΈλŸ°μ‹± 정책을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ©”μ‹œλ‘œ λ“€μ–΄μ˜€κ±°λ‚˜ λ‚˜κ°€λŠ” νŠΈλž˜ν”½μ— νŠΉλ³„ν•œ κ·œμΉ™μ„ μ μš©ν•˜κ±°λ‚˜, λ©”μ‹œμ˜ μ™ΈλΆ€ 쒅속성을 μ„œλΉ„μŠ€ λ ˆμ§€μŠ€νŠΈλ¦¬μ— μΆ”κ°€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. Istio의 νŠΈλž˜ν”½ 관리 APIλ₯Ό μ‚¬μš©ν•˜μ—¬ Istio에 자체 νŠΈλž˜ν”½ ꡬ성을 μΆ”κ°€ν•˜λ©΄ 이 λͺ¨λ“  μž‘μ—…κ³Ό κ·Έ 이상을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.λ‹€λ₯Έ Istio ꡬ성과 λ§ˆμ°¬κ°€μ§€λ‘œ APIλŠ” Kubernetes μ‚¬μš©μž μ •μ˜ λ¦¬μ†ŒμŠ€ μ •μ˜(CRD)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ§€μ •λ˜λ©°, μ˜ˆμ œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ YAML을 μ‚¬μš©ν•˜μ—¬ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.이 κ°€μ΄λ“œμ˜ λ‚˜λ¨Έμ§€ λΆ€λΆ„μ—μ„œλŠ” νŠΈλž˜ν”½ 관리 API λ¦¬μ†ŒμŠ€ 각각과 κ·Έκ²ƒμœΌλ‘œ ν•  수 μžˆλŠ” μž‘μ—…μ„ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

λ˜ν•œ 이 κ°€μ΄λ“œμ—μ„œλŠ” API λ¦¬μ†ŒμŠ€μ— λ‚΄μž₯된 일뢀 λ„€νŠΈμ›Œν¬ 볡원λ ₯ 및 ν…ŒμŠ€νŠΈ κΈ°λŠ₯에 λŒ€ν•œ κ°œμš”λ„ μ œκ³΅ν•©λ‹ˆλ‹€.

가상 μ„œλΉ„μŠ€

가상 μ„œλΉ„μŠ€λŠ” λͺ©μ μ§€ κ·œμΉ™κ³Ό ν•¨κ»˜ Istio의 νŠΈλž˜ν”½ λΌμš°νŒ… κΈ°λŠ₯의 핡심 ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ Istio μ„œλΉ„μŠ€ λ©”μ‹œ λ‚΄μ—μ„œ μ„œλΉ„μŠ€λ‘œ μš”μ²­μ„ λΌμš°νŒ…ν•˜λŠ” 방법을 ꡬ성할 수 있으며, Istio와 ν”Œλž«νΌμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Έ μ—°κ²° 및 검색 κΈ°λŠ₯을 기반으둜 ν•©λ‹ˆλ‹€. 각 가상 μ„œλΉ„μŠ€λŠ” μˆœμ„œλŒ€λ‘œ ν‰κ°€λ˜λŠ” λΌμš°νŒ… κ·œμΉ™ μ§‘ν•©μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμ–΄, Istioκ°€ 가상 μ„œλΉ„μŠ€μ— λŒ€ν•œ 각 μš”μ²­μ„ λ©”μ‹œ λ‚΄μ˜ νŠΉμ • μ‹€μ œ λŒ€μƒκ³Ό λ§€μΉ­ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš© 사둀에 따라 λ©”μ‹œμ— μ—¬λŸ¬ 개의 가상 μ„œλΉ„μŠ€κ°€ ν•„μš”ν•˜κ±°λ‚˜ μ „ν˜€ ν•„μš”ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

가상 μ„œλΉ„μŠ€λŠ” Istio의 νŠΈλž˜ν”½ 관리λ₯Ό μœ μ—°ν•˜κ³  κ°•λ ₯ν•˜κ²Œ λ§Œλ“œλŠ” 데 핡심적인 역할을 ν•©λ‹ˆλ‹€. μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ λ³΄λ‚΄λŠ” μœ„μΉ˜μ™€ μ‹€μ œλ‘œ μš”μ²­μ„ κ΅¬ν˜„ν•˜λŠ” λŒ€μƒ μ›Œν¬λ‘œλ“œλ₯Ό κ°•λ ₯ν•˜κ²Œ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. λ˜ν•œ 가상 μ„œλΉ„μŠ€λŠ” ν•΄λ‹Ή μ›Œν¬λ‘œλ“œλ‘œ νŠΈλž˜ν”½μ„ 보내기 μœ„ν•œ λ‹€μ–‘ν•œ νŠΈλž˜ν”½ λΌμš°νŒ… κ·œμΉ™μ„ μ§€μ •ν•˜λŠ” ν’λΆ€ν•œ 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.이것이 μ™œ μœ μš©ν• κΉŒμš”? 가상 μ„œλΉ„μŠ€κ°€ μ—†μœΌλ©΄ μ†Œκ°œμ—μ„œ μ„€λͺ…ν•œ λŒ€λ‘œ EnvoyλŠ” λͺ¨λ“  μ„œλΉ„μŠ€ μΈμŠ€ν„΄μŠ€ 간에 μ΅œμ†Œ μš”μ²­ λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•©λ‹ˆλ‹€. μ›Œν¬λ‘œλ“œμ— λŒ€ν•΄ μ•Œκ³  μžˆλŠ” λ‚΄μš©μœΌλ‘œ 이 λ™μž‘μ„ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μΌλΆ€λŠ” λ‹€λ₯Έ 버전을 λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” A/B ν…ŒμŠ€νŠΈμ—μ„œ μœ μš©ν•  수 μžˆλŠ”λ°, μ—¬κΈ°μ„œλŠ” μ„œλ‘œ λ‹€λ₯Έ μ„œλΉ„μŠ€ 버전에 걸쳐 λ°±λΆ„μœ¨μ„ κΈ°μ€€μœΌλ‘œ νŠΈλž˜ν”½ 경둜λ₯Ό κ΅¬μ„±ν•˜κ±°λ‚˜ λ‚΄λΆ€ μ‚¬μš©μžμ˜ νŠΈλž˜ν”½μ„ νŠΉμ • μΈμŠ€ν„΄μŠ€ μ§‘ν•©μœΌλ‘œ 보내고 싢을 수 μžˆμŠ΅λ‹ˆλ‹€.가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜ μ΄μƒμ˜ 호슀트 이름에 λŒ€ν•œ νŠΈλž˜ν”½ λ™μž‘μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€μ˜ λΌμš°νŒ… κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ Envoyμ—κ²Œ 가상 μ„œλΉ„μŠ€μ˜ νŠΈλž˜ν”½μ„ μ μ ˆν•œ λŒ€μƒμœΌλ‘œ λ³΄λ‚΄λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€. 경둜 λŒ€μƒμ€ λ™μΌν•œ μ„œλΉ„μŠ€μ˜ λ‹€λ₯Έ λ²„μ „μ΄κ±°λ‚˜ μ™„μ „νžˆ λ‹€λ₯Έ μ„œλΉ„μŠ€μΌ 수 μžˆμŠ΅λ‹ˆλ‹€.일반적인 μ‚¬μš© μ‚¬λ‘€λŠ” μ„œλΉ„μŠ€ ν•˜μœ„ μ§‘ν•©μœΌλ‘œ μ§€μ •λœ μ„œλΉ„μŠ€μ˜ λ‹€λ₯Έ λ²„μ „μœΌλ‘œ νŠΈλž˜ν”½μ„ λ³΄λ‚΄λŠ” κ²ƒμž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” 마치 단일 엔터티인 κ²ƒμ²˜λŸΌ 가상 μ„œλΉ„μŠ€ ν˜ΈμŠ€νŠΈμ— μš”μ²­μ„ 보내고, EnvoyλŠ” 가상 μ„œλΉ„μŠ€ κ·œμΉ™μ— 따라 νŠΈλž˜ν”½μ„ λ‹€λ₯Έ λ²„μ „μœΌλ‘œ λΌμš°νŒ…ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "호좜의 20%λŠ” μƒˆ λ²„μ „μœΌλ‘œ 이동" λ˜λŠ” "μ΄λŸ¬ν•œ μ‚¬μš©μžμ˜ ν˜ΈμΆœμ€ 버전 2둜 이동"κ³Ό 같은 μ‹μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 예λ₯Ό λ“€μ–΄ μƒˆ μ„œλΉ„μŠ€ λ²„μ „μœΌλ‘œ μ „μ†‘λ˜λŠ” νŠΈλž˜ν”½ λΉ„μœ¨μ„ μ μ§„μ μœΌλ‘œ λŠ˜λ¦¬λŠ” μΉ΄λ‚˜λ¦¬μ•„ 둀아웃을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. νŠΈλž˜ν”½ λΌμš°νŒ…μ€ μΈμŠ€ν„΄μŠ€ 배포와 μ™„μ „νžˆ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄, μƒˆ μ„œλΉ„μŠ€ 버전을 κ΅¬ν˜„ν•˜λŠ” μΈμŠ€ν„΄μŠ€ μˆ˜λŠ” νŠΈλž˜ν”½ λΌμš°νŒ…μ„ μ „ν˜€ μ°Έμ‘°ν•˜μ§€ μ•Šκ³  νŠΈλž˜ν”½ λΆ€ν•˜μ— 따라 ν™•μž₯ 및 μΆ•μ†Œλ  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‘°μ μœΌλ‘œ Kubernetes와 같은 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν”Œλž«νΌμ€ μΈμŠ€ν„΄μŠ€ μŠ€μΌ€μΌλ§μ„ 기반으둜 ν•˜λŠ” νŠΈλž˜ν”½ λΆ„μ‚°λ§Œ μ§€μ›ν•˜λ―€λ‘œ λΉ λ₯΄κ²Œ λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. Istioλ₯Ό μ‚¬μš©ν•œ μΉ΄λ‚˜λ¦¬μ•„ λ°°ν¬μ—μ„œ 가상 μ„œλΉ„μŠ€κ°€ μΉ΄λ‚˜λ¦¬μ•„ 배포에 μ–΄λ–»κ²Œ 도움이 λ˜λŠ”μ§€ μžμ„Ένžˆ μ•Œμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μž‘μ—…λ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • 단일 가상 μ„œλΉ„μŠ€λ₯Ό 톡해 μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€ 처리. 예λ₯Ό λ“€μ–΄ λ©”μ‹œκ°€ Kubernetesλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  μ„œλΉ„μŠ€λ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ 가상 μ„œλΉ„μŠ€λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. 단일 가상 μ„œλΉ„μŠ€λ₯Ό μ—¬λŸ¬ "μ‹€μ œ" μ„œλΉ„μŠ€μ— λ§€ν•‘ν•˜λŠ” 것은 λͺ¨λ†€λ¦¬μ‹ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„œλΉ„μŠ€ μ†ŒλΉ„μžκ°€ μ „ν™˜μ— 적응할 ν•„μš” 없이 λ³„κ°œμ˜ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ κ΅¬μΆ•λœ 볡합 μ„œλΉ„μŠ€λ‘œ μ „ν™˜ν•˜λŠ” 데 특히 μœ μš©ν•©λ‹ˆλ‹€. λΌμš°νŒ… κ·œμΉ™μ€ "monolith.com의 μ΄λŸ¬ν•œ URI에 λŒ€ν•œ ν˜ΈμΆœμ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ A둜 이동"κ³Ό 같이 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ 예제 쀑 ν•˜λ‚˜μ—μ„œ 이것이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • κ²Œμ΄νŠΈμ›¨μ΄μ™€ ν•¨κ»˜ νŠΈλž˜ν”½ κ·œμΉ™μ„ κ΅¬μ„±ν•˜μ—¬ μˆ˜μ‹  및 λ°œμ‹  νŠΈλž˜ν”½μ„ μ œμ–΄ν•©λ‹ˆλ‹€.

κ²½μš°μ— 따라 μ΄λŸ¬ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ λŒ€μƒ κ·œμΉ™λ„ ꡬ성해야 ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ μ„œλΉ„μŠ€ ν•˜μœ„ 집합을 μ§€μ •ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ³„λ„μ˜ κ°μ²΄μ—μ„œ μ„œλΉ„μŠ€ ν•˜μœ„ μ§‘ν•© 및 기타 λŒ€μƒλ³„ 정책을 μ§€μ •ν•˜λ©΄ 가상 μ„œλΉ„μŠ€ 간에 이λ₯Ό κΉ”λ”ν•˜κ²Œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ μ„Ήμ…˜μ—μ„œ λŒ€μƒ κ·œμΉ™μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

가상 μ„œλΉ„μŠ€ 예제

λ‹€μŒ 가상 μ„œλΉ„μŠ€λŠ” μš”μ²­μ΄ νŠΉμ • μ‚¬μš©μžλ‘œλΆ€ν„° μ˜€λŠ”μ§€ 여뢀에 따라 μš”μ²­μ„ μ„œλΉ„μŠ€μ˜ λ‹€λ₯Έ λ²„μ „μœΌλ‘œ λΌμš°νŒ…ν•©λ‹ˆλ‹€.

textapiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v3

hosts ν•„λ“œ

hosts ν•„λ“œλŠ” 가상 μ„œλΉ„μŠ€μ˜ 호슀트, 즉 μ΄λŸ¬ν•œ λΌμš°νŒ… κ·œμΉ™μ΄ μ μš©λ˜λŠ” μ‚¬μš©μž μ£Όμ†Œ μ§€μ • κ°€λŠ₯ν•œ λŒ€μƒμ„ λ‚˜μ—΄ν•©λ‹ˆλ‹€. 이것은 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλΉ„μŠ€μ— μš”μ²­μ„ 보낼 λ•Œ μ‚¬μš©ν•˜λŠ” μ£Όμ†Œμž…λ‹ˆλ‹€.

hosts:
- reviews

가상 μ„œλΉ„μŠ€ 호슀트 이름은 IP μ£Όμ†Œ, DNS 이름 λ˜λŠ” ν”Œλž«νΌμ— 따라 μ™„μ „ν•œ 도메인 이름(FQDN)으둜 μ•”μ‹œμ  λ˜λŠ” λͺ…μ‹œμ μœΌλ‘œ ν™•μΈλ˜λŠ” 짧은 이름(예: Kubernetes μ„œλΉ„μŠ€ 짧은 이름)일 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ™€μΌλ“œμΉ΄λ“œ("*") 접두사λ₯Ό μ‚¬μš©ν•˜μ—¬ μΌμΉ˜ν•˜λŠ” λͺ¨λ“  μ„œλΉ„μŠ€μ— λŒ€ν•œ 단일 λΌμš°νŒ… κ·œμΉ™ 집합을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€ ν˜ΈμŠ€νŠΈλŠ” μ‹€μ œλ‘œ Istio μ„œλΉ„μŠ€ λ ˆμ§€μŠ€νŠΈλ¦¬μ˜ 일뢀일 ν•„μš”κ°€ μ—†μœΌλ©°, λ‹¨μˆœνžˆ 가상 λŒ€μƒμΌ λΏμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ©”μ‹œ 내뢀에 λΌμš°νŒ… κ°€λŠ₯ν•œ ν•­λͺ©μ΄ μ—†λŠ” 가상 ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ νŠΈλž˜ν”½μ„ λͺ¨λΈλ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λΌμš°νŒ… κ·œμΉ™

http μ„Ήμ…˜μ—λŠ” 가상 μ„œλΉ„μŠ€μ˜ λΌμš°νŒ… κ·œμΉ™μ΄ ν¬ν•¨λ˜μ–΄ 있으며, hosts ν•„λ“œμ— μ§€μ •λœ λŒ€μƒμœΌλ‘œ μ „μ†‘λœ HTTP/1.1, HTTP2 및 gRPC νŠΈλž˜ν”½μ„ λΌμš°νŒ…ν•˜κΈ° μœ„ν•œ 일치 쑰건과 μž‘μ—…μ„ μ„€λͺ…ν•©λ‹ˆλ‹€(tcp 및 tls μ„Ήμ…˜μ„ μ‚¬μš©ν•˜μ—¬ TCP 및 μ’…λ£Œλ˜μ§€ μ•Šμ€ TLS νŠΈλž˜ν”½μ— λŒ€ν•œ λΌμš°νŒ… κ·œμΉ™μ„ ꡬ성할 μˆ˜λ„ 있음). λΌμš°νŒ… κ·œμΉ™μ€ νŠΈλž˜ν”½μ„ λ³΄λ‚΄λ €λŠ” λŒ€μƒκ³Ό μ‚¬μš© 사둀에 따라 0개 μ΄μƒμ˜ 일치 쑰건으둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

일치 쑰건

예제의 첫 번째 λΌμš°νŒ… κ·œμΉ™μ—λŠ” 쑰건이 μžˆμœΌλ―€λ‘œ match ν•„λ“œλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€. 이 경우 "jason" μ‚¬μš©μžμ˜ λͺ¨λ“  μš”μ²­μ— 이 λΌμš°νŒ…μ„ μ μš©ν•˜λ €κ³  ν•˜λ―€λ‘œ headers, end-user 및 exact ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ μ ˆν•œ μš”μ²­μ„ μ„ νƒν•©λ‹ˆλ‹€.

- match:
  - headers:
      end-user:
        exact: jason  

λŒ€μƒ

route μ„Ήμ…˜μ˜ destination ν•„λ“œλŠ” 이 쑰건과 μΌμΉ˜ν•˜λŠ” νŠΈλž˜ν”½μ˜ μ‹€μ œ λŒ€μƒμ„ μ§€μ •ν•©λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€μ˜ ν˜ΈμŠ€νŠΈμ™€ 달리 λŒ€μƒμ˜ ν˜ΈμŠ€νŠΈλŠ” Istio의 μ„œλΉ„μŠ€ λ ˆμ§€μŠ€νŠΈλ¦¬μ— μ‘΄μž¬ν•˜λŠ” μ‹€μ œ λŒ€μƒμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ EnvoyλŠ” νŠΈλž˜ν”½μ„ 보낼 μœ„μΉ˜λ₯Ό μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘μ‹œκ°€ μžˆλŠ” λ©”μ‹œ μ„œλΉ„μŠ€μ΄κ±°λ‚˜ μ„œλΉ„μŠ€ ν•­λͺ©μ„ μ‚¬μš©ν•˜μ—¬ μΆ”κ°€λœ λΉ„ λ©”μ‹œ μ„œλΉ„μŠ€μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 Kubernetesμ—μ„œ μ‹€ν–‰ 쀑이며 호슀트 이름은 Kubernetes μ„œλΉ„μŠ€ μ΄λ¦„μž…λ‹ˆλ‹€:

route:
- destination:
    host: reviews
    subset: v2

이 νŽ˜μ΄μ§€μ˜ 이 μ˜ˆμ œμ™€ λ‹€λ₯Έ μ˜ˆμ œμ—μ„œλŠ” κ°„λ‹¨νžˆ ν•˜κΈ° μœ„ν•΄ λŒ€μƒ ν˜ΈμŠ€νŠΈμ— Kubernetes 짧은 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€. 이 κ·œμΉ™μ΄ 평가될 λ•Œ IstioλŠ” 호슀트의 μ •κ·œν™”λœ 이름을 μ–»κΈ° μœ„ν•΄ λΌμš°νŒ… κ·œμΉ™μ΄ ν¬ν•¨λœ 가상 μ„œλΉ„μŠ€μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό 기반으둜 도메인 접미사λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μ˜ˆμ œμ—μ„œ 짧은 이름을 μ‚¬μš©ν•œλ‹€λŠ” 것은 λ³΅μ‚¬ν•˜μ—¬ μ›ν•˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ μ‹œλ„ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.destination μ„Ήμ…˜μ€ λ˜ν•œ 이 κ·œμΉ™μ˜ 쑰건과 μΌμΉ˜ν•˜λŠ” μš”μ²­μ„ λ³΄λ‚΄λ €λŠ” 이 Kubernetes μ„œλΉ„μŠ€μ˜ ν•˜μœ„ 집합을 μ§€μ •ν•©λ‹ˆλ‹€. 이 경우 v2λΌλŠ” ν•˜μœ„ μ§‘ν•©μž…λ‹ˆλ‹€. μ•„λž˜μ˜ λŒ€μƒ κ·œμΉ™ μ„Ήμ…˜μ—μ„œ μ„œλΉ„μŠ€ ν•˜μœ„ 집합을 μ •μ˜ν•˜λŠ” 방법을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λΌμš°νŒ… κ·œμΉ™ μš°μ„ μˆœμœ„

λΌμš°νŒ… κ·œμΉ™μ€ μœ„μ—μ„œ μ•„λž˜λ‘œ 순차적으둜 ν‰κ°€λ˜λ©°, 가상 μ„œλΉ„μŠ€ μ •μ˜μ˜ 첫 번째 κ·œμΉ™μ— κ°€μž₯ 높은 μš°μ„ μˆœμœ„κ°€ λΆ€μ—¬λ©λ‹ˆλ‹€. 이 경우 첫 번째 λΌμš°νŒ… κ·œμΉ™κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  것을 두 번째 κ·œμΉ™μ— μ§€μ •λœ κΈ°λ³Έ λŒ€μƒμœΌλ‘œ 보내렀고 ν•©λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— 두 번째 κ·œμΉ™μ—λŠ” 일치 쑰건이 μ—†κ³  νŠΈλž˜ν”½μ„ v3 ν•˜μœ„ μ§‘ν•©μœΌλ‘œλ§Œ μ§€μ‹œν•©λ‹ˆλ‹€.

- route:
  - destination:
      host: reviews
      subset: v3

가상 μ„œλΉ„μŠ€μ— λŒ€ν•œ νŠΈλž˜ν”½μ΄ 항상 ν•˜λ‚˜ μ΄μƒμ˜ μΌμΉ˜ν•˜λŠ” 경둜λ₯Ό 갖도둝 ν•˜λ €λ©΄ 각 가상 μ„œλΉ„μŠ€μ˜ λ§ˆμ§€λ§‰ κ·œμΉ™μœΌλ‘œ 이와 같은 κΈ°λ³Έ "쑰건 μ—†μŒ" λ˜λŠ” κ°€μ€‘μΉ˜ 기반 κ·œμΉ™(μ•„λž˜ μ„€λͺ…)을 μ œκ³΅ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λΌμš°νŒ… κ·œμΉ™μ— λŒ€ν•œ 더 μžμ„Έν•œ λ‚΄μš©

μœ„μ—μ„œ λ³΄μ•˜λ“―μ΄ λΌμš°νŒ… κ·œμΉ™μ€ νŠΉμ • νŠΈλž˜ν”½ ν•˜μœ„ 집합을 νŠΉμ • λŒ€μƒμœΌλ‘œ λΌμš°νŒ…ν•˜λŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. νŠΈλž˜ν”½ 포트, 헀더 ν•„λ“œ, URI 등에 λŒ€ν•œ 일치 쑰건을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 이 가상 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μžκ°€ http://bookinfo.com/의 더 큰 가상 μ„œλΉ„μŠ€μ˜ 일뢀인 κ²ƒμ²˜λŸΌ ratings와 reviewsλΌλŠ” 두 개의 별도 μ„œλΉ„μŠ€λ‘œ νŠΈλž˜ν”½μ„ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€ κ·œμΉ™μ€ μš”μ²­ URIλ₯Ό 기반으둜 νŠΈλž˜ν”½μ„ μΌμΉ˜μ‹œν‚€κ³  μš”μ²­μ„ μ μ ˆν•œ μ„œλΉ„μŠ€λ‘œ λ³΄λƒ…λ‹ˆλ‹€.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - bookinfo.com
  http:
  - match:
    - uri:
        prefix: /reviews
    route:
    - destination:
        host: reviews
  - match:
    - uri:
        prefix: /ratings
    route:
    - destination:
        host: ratings

일뢀 일치 쑰건의 경우 μ •ν™•ν•œ κ°’, 접두사 λ˜λŠ” μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ—¬ 선택할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.λ™μΌν•œ match 블둝에 μ—¬λŸ¬ 일치 쑰건을 μΆ”κ°€ν•˜μ—¬ 쑰건을 AND둜 μ—°κ²°ν•˜κ±°λ‚˜, λ™μΌν•œ κ·œμΉ™μ— μ—¬λŸ¬ 일치 블둝을 μΆ”κ°€ν•˜μ—¬ 쑰건을 OR둜 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ£Όμ–΄μ§„ 가상 μ„œλΉ„μŠ€μ— λŒ€ν•΄ μ—¬λŸ¬ λΌμš°νŒ… κ·œμΉ™μ„ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 단일 가상 μ„œλΉ„μŠ€ λ‚΄μ—μ„œ λΌμš°νŒ… 쑰건을 μ›ν•˜λŠ” 만큼 λ³΅μž‘ν•˜κ±°λ‚˜ λ‹¨μˆœν•˜κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 일치 쑰건 ν•„λ“œμ˜ 전체 λͺ©λ‘κ³Ό κ°€λŠ₯ν•œ 값은 HTTPMatchRequest μ°Έμ‘°μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.일치 쑰건을 μ‚¬μš©ν•˜λŠ” 것 외에도 λ°±λΆ„μœ¨ "κ°€μ€‘μΉ˜"둜 νŠΈλž˜ν”½μ„ λΆ„μ‚°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” A/B ν…ŒμŠ€νŠΈ 및 μΉ΄λ‚˜λ¦¬μ•„ 둀아웃에 μœ μš©ν•©λ‹ˆλ‹€:

spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 75
    - destination:
        host: reviews
        subset: v2
      weight: 25

λ˜ν•œ λΌμš°νŒ… κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ νŠΈλž˜ν”½μ— λŒ€ν•΄ 일뢀 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄:

  • 헀더 μΆ”κ°€ λ˜λŠ” 제거

  • URL μž¬μž‘μ„±

  • 이 λŒ€μƒμ— λŒ€ν•œ ν˜ΈμΆœμ— λŒ€ν•œ μž¬μ‹œλ„ μ •μ±… μ„€μ •

μ‚¬μš© κ°€λŠ₯ν•œ μž‘μ—…μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ €λ©΄ HTTPRoute μ°Έμ‘°λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λŒ€μƒ κ·œμΉ™

가상 μ„œλΉ„μŠ€μ™€ ν•¨κ»˜ λŒ€μƒ κ·œμΉ™μ€ Istio의 νŠΈλž˜ν”½ λΌμš°νŒ… κΈ°λŠ₯의 핡심 λΆ€λΆ„μž…λ‹ˆλ‹€. 가상 μ„œλΉ„μŠ€λ₯Ό μ£Όμ–΄μ§„ λŒ€μƒμœΌλ‘œ νŠΈλž˜ν”½μ„ λΌμš°νŒ…ν•˜λŠ” λ°©λ²•μœΌλ‘œ 생각할 수 있고, 그런 λ‹€μŒ λŒ€μƒ κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή λŒ€μƒμ— λŒ€ν•œ νŠΈλž˜ν”½μ— μ–΄λ–€ 일이 λ°œμƒν•˜λŠ”μ§€ κ΅¬μ„±ν•©λ‹ˆλ‹€. λŒ€μƒ κ·œμΉ™μ€ 가상 μ„œλΉ„μŠ€ λΌμš°νŒ… κ·œμΉ™μ΄ ν‰κ°€λœ 후에 μ μš©λ˜λ―€λ‘œ νŠΈλž˜ν”½μ˜ "μ‹€μ œ" λŒ€μƒμ— μ μš©λ©λ‹ˆλ‹€.특히 λŒ€μƒ κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ λ²„μ „λ³„λ‘œ μ£Όμ–΄μ§„ μ„œλΉ„μŠ€μ˜ λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ₯Ό κ·Έλ£Ήν™”ν•˜λŠ” λ“± λͺ…λͺ…λœ μ„œλΉ„μŠ€ ν•˜μœ„ 집합을 μ§€μ •ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 가상 μ„œλΉ„μŠ€μ˜ λΌμš°νŒ… κ·œμΉ™μ—μ„œ μ΄λŸ¬ν•œ μ„œλΉ„μŠ€ ν•˜μœ„ 집합을 μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€μ˜ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ νŠΈλž˜ν”½μ„ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.λŒ€μƒ κ·œμΉ™μ„ μ‚¬μš©ν•˜λ©΄ 전체 λŒ€μƒ μ„œλΉ„μŠ€ λ˜λŠ” νŠΉμ • μ„œλΉ„μŠ€ ν•˜μœ„ 집합을 ν˜ΈμΆœν•  λ•Œ μ„ ν˜Έν•˜λŠ” λ‘œλ“œ λ°ΈλŸ°μ‹± λͺ¨λΈ, TLS λ³΄μ•ˆ λͺ¨λ“œ λ˜λŠ” μ„œν‚· 브레이컀 μ„€μ •κ³Ό 같은 Envoy의 νŠΈλž˜ν”½ 정책을 μ‚¬μš©μž μ§€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λŒ€μƒ κ·œμΉ™ μ°Έμ‘°μ—μ„œ λŒ€μƒ κ·œμΉ™ μ˜΅μ…˜μ˜ 전체 λͺ©λ‘μ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹± μ˜΅μ…˜

기본적으둜 IstioλŠ” μš”μ²­ μˆ˜κ°€ κ°€μž₯ 적은 μΈμŠ€ν„΄μŠ€μ— μš”μ²­μ΄ λΆ„μ‚°λ˜λŠ” μ΅œμ†Œ μš”μ²­ λ‘œλ“œ λ°ΈλŸ°μ‹± 정책을 μ‚¬μš©ν•©λ‹ˆλ‹€. IstioλŠ” λ˜ν•œ νŠΉμ • μ„œλΉ„μŠ€ λ˜λŠ” μ„œλΉ„μŠ€ ν•˜μœ„ 집합에 λŒ€ν•œ μš”μ²­μ— λŒ€ν•΄ λŒ€μƒ κ·œμΉ™μ— μ§€μ •ν•  수 μžˆλŠ” λ‹€μŒ λͺ¨λΈλ„ μ§€μ›ν•©λ‹ˆλ‹€.

  • λ¬΄μž‘μœ„: μš”μ²­μ΄ ν’€μ˜ μΈμŠ€ν„΄μŠ€μ— λ¬΄μž‘μœ„λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.

  • κ°€μ€‘μΉ˜: μš”μ²­μ΄ νŠΉμ • λ°±λΆ„μœ¨μ— 따라 ν’€μ˜ μΈμŠ€ν„΄μŠ€μ— μ „λ‹¬λ©λ‹ˆλ‹€.

  • λΌμš΄λ“œ 둜빈: μš”μ²­μ΄ μˆœμ„œλŒ€λ‘œ 각 μΈμŠ€ν„΄μŠ€μ— μ „λ‹¬λ©λ‹ˆλ‹€.

각 μ˜΅μ…˜μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ Envoy λ‘œλ“œ λ°ΈλŸ°μ‹± λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λŒ€μƒ κ·œμΉ™ 예제

λ‹€μŒ 예제 λŒ€μƒ κ·œμΉ™μ€ my-svc λŒ€μƒ μ„œλΉ„μŠ€μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ λ‘œλ“œ λ°ΈλŸ°μ‹± 정책을 κ°€μ§„ μ„Έ κ°€μ§€ λ‹€λ₯Έ ν•˜μœ„ 집합을 κ΅¬μ„±ν•©λ‹ˆλ‹€:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3

각 ν•˜μœ„ 집합은 ν•˜λ‚˜ μ΄μƒμ˜ labels을 기반으둜 μ •μ˜λ˜λ©°, Kubernetesμ—μ„œλŠ” Pod와 같은 객체에 μ—°κ²°λ˜λŠ” ν‚€/κ°’ μŒμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ ˆμ΄λΈ”μ€ Kubernetes μ„œλΉ„μŠ€μ˜ λ°°ν¬μ—μ„œ λ‹€λ₯Έ 버전을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ metadata둜 μ μš©λ©λ‹ˆλ‹€.ν•˜μœ„ 집합을 μ •μ˜ν•˜λŠ” 것 외에도 이 λŒ€μƒ κ·œμΉ™μ—λŠ” 이 λŒ€μƒμ˜ λͺ¨λ“  ν•˜μœ„ 집합에 λŒ€ν•œ κΈ°λ³Έ νŠΈλž˜ν”½ μ •μ±…κ³Ό ν•΄λ‹Ή ν•˜μœ„ 집합에 λŒ€ν•΄μ„œλ§Œ 이λ₯Ό μž¬μ •μ˜ν•˜λŠ” ν•˜μœ„ 집합별 정책이 μžˆμŠ΅λ‹ˆλ‹€. subsets ν•„λ“œ μœ„μ— μ •μ˜λœ κΈ°λ³Έ 정책은 v1κ³Ό v3 ν•˜μœ„ 집합에 λŒ€ν•΄ κ°„λ‹¨ν•œ λ¬΄μž‘μœ„ λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. v2 μ •μ±…μ—μ„œλŠ” ν•΄λ‹Ή ν•˜μœ„ μ§‘ν•©μ˜ ν•„λ“œμ— λΌμš΄λ“œ 둜빈 λ‘œλ“œ λ°ΈλŸ°μ„œκ°€ μ§€μ •λ©λ‹ˆλ‹€.

κ²Œμ΄νŠΈμ›¨μ΄

κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”μ‹œμ— λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ” νŠΈλž˜ν”½μ„ κ΄€λ¦¬ν•˜μ—¬ λ©”μ‹œμ— λ“€μ–΄μ˜€κ±°λ‚˜ λ‚˜κ°€κΈΈ μ›ν•˜λŠ” νŠΈλž˜ν”½μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ²Œμ΄νŠΈμ›¨μ΄ ꡬ성은 μ„œλΉ„μŠ€ μ›Œν¬λ‘œλ“œμ™€ ν•¨κ»˜ μ‹€ν–‰λ˜λŠ” μ‚¬μ΄λ“œμΉ΄ Envoy ν”„λ‘μ‹œκ°€ μ•„λ‹Œ λ©”μ‹œ κ°€μž₯μžλ¦¬μ—μ„œ μ‹€ν–‰λ˜λŠ” λ…λ¦½ν˜• Envoy ν”„λ‘μ‹œμ— μ μš©λ©λ‹ˆλ‹€.Kubernetes Ingress API와 같이 μ‹œμŠ€ν…œμ— λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½μ„ μ œμ–΄ν•˜λŠ” λ‹€λ₯Έ λ©”μ»€λ‹ˆμ¦˜κ³Ό 달리 Istio κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό μ‚¬μš©ν•˜λ©΄ Istio의 νŠΈλž˜ν”½ λΌμš°νŒ…μ˜ λͺ¨λ“  κΈ°λŠ₯κ³Ό μœ μ—°μ„±μ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Istio의 Gateway λ¦¬μ†ŒμŠ€λŠ” λ…ΈμΆœν•  포트, TLS μ„€μ • λ“±κ³Ό 같은 4-6계측 λ‘œλ“œ λ°ΈλŸ°μ‹± μ†μ„±λ§Œ ꡬ성할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 그런 λ‹€μŒ λ™μΌν•œ API λ¦¬μ†ŒμŠ€μ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 νŠΈλž˜ν”½ λΌμš°νŒ…(L7)을 μΆ”κ°€ν•˜λŠ” λŒ€μ‹  일반 Istio 가상 μ„œλΉ„μŠ€λ₯Ό κ²Œμ΄νŠΈμ›¨μ΄μ— λ°”μΈλ”©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 기본적으둜 Istio λ©”μ‹œμ˜ λ‹€λ₯Έ 데이터 ν”Œλ ˆμΈ νŠΈλž˜ν”½κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ κ²Œμ΄νŠΈμ›¨μ΄ νŠΈλž˜ν”½μ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.κ²Œμ΄νŠΈμ›¨μ΄λŠ” 주둜 인그레슀 νŠΈλž˜ν”½μ„ κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜μ§€λ§Œ 이그레슀 κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό ꡬ성할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이그레슀 κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”μ‹œλ₯Ό λ– λ‚˜λŠ” νŠΈλž˜ν”½μ— λŒ€ν•΄ μ „μš© μ’…λ£Œ λ…Έλ“œλ₯Ό ꡬ성할 수 μžˆμ–΄ μ–΄λ–€ μ„œλΉ„μŠ€κ°€ μ™ΈλΆ€ λ„€νŠΈμ›Œν¬μ— μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ”μ§€ λ˜λŠ” μ•‘μ„ΈμŠ€ν•΄μ•Ό ν•˜λŠ”μ§€ μ œν•œν•˜κ±°λ‚˜ 예λ₯Ό λ“€μ–΄ λ©”μ‹œμ— λ³΄μ•ˆμ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄ 이그레슀 νŠΈλž˜ν”½μ˜ μ•ˆμ „ν•œ μ œμ–΄λ₯Ό ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 순수 λ‚΄λΆ€ ν”„λ‘μ‹œλ₯Ό ꡬ성할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.IstioλŠ” μ‚¬μš©ν•  수 μžˆλŠ” 일뢀 사전 κ΅¬μ„±λœ κ²Œμ΄νŠΈμ›¨μ΄ ν”„λ‘μ‹œ 배포(istio-ingressgateway 및 istio-egressgateway)λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ μ„€μΉ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 λ‘˜ λ‹€ 배포되고 κΈ°λ³Έ ν”„λ‘œν•„μ„ μ‚¬μš©ν•˜λŠ” 경우 인그레슀 κ²Œμ΄νŠΈμ›¨μ΄λ§Œ λ°°ν¬λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 배포에 자체 κ²Œμ΄νŠΈμ›¨μ΄ ꡬ성을 μ μš©ν•˜κ±°λ‚˜ 자체 κ²Œμ΄νŠΈμ›¨μ΄ ν”„λ‘μ‹œλ₯Ό 배포 및 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

κ²Œμ΄νŠΈμ›¨μ΄ 예제

λ‹€μŒ μ˜ˆμ œλŠ” μ™ΈλΆ€ HTTPS 인그레슀 νŠΈλž˜ν”½μ— λŒ€ν•œ κ°€λŠ₯ν•œ κ²Œμ΄νŠΈμ›¨μ΄ ꡬ성을 λ³΄μ—¬μ€λ‹ˆλ‹€:

textapiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: ext-host-gwy
spec:
  selector:
    app: my-gateway-controller
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - ext-host.example.com
    tls:
      mode: SIMPLE
      credentialName: ext-host-cert

이 κ²Œμ΄νŠΈμ›¨μ΄ ꡬ성을 톡해 ext-host.example.com의 HTTPS νŠΈλž˜ν”½μ΄ 443 ν¬νŠΈμ—μ„œ λ©”μ‹œλ‘œ λ“€μ–΄μ˜¬ 수 μžˆμ§€λ§Œ νŠΈλž˜ν”½μ— λŒ€ν•œ λΌμš°νŒ…μ€ μ§€μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λΌμš°νŒ…μ„ μ§€μ •ν•˜κ³  κ²Œμ΄νŠΈμ›¨μ΄κ°€ μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν•˜λ €λ©΄ λ‹€μŒ μ˜ˆμ œμ™€ 같이 가상 μ„œλΉ„μŠ€μ˜ gateways ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό 가상 μ„œλΉ„μŠ€μ— 바인딩해야 ν•©λ‹ˆλ‹€:

textapiVersion: networking.istio.io/v1alpha3
kind: VirtualService 
metadata:
  name: virtual-svc
spec:
  hosts:
  - ext-host.example.com
  gateways:
  - ext-host-gwy

그런 λ‹€μŒ μ™ΈλΆ€ νŠΈλž˜ν”½μ— λŒ€ν•œ λΌμš°νŒ… κ·œμΉ™μœΌλ‘œ 가상 μ„œλΉ„μŠ€λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

Virtual services
Destination rules
Gateways
Service entries
Sidecars
μ•„ν‚€ν…μ²˜ κ°œμš”
Traffic ManagementIstio
Logo