mcpField
I
istio-traffic-management

istio-traffic-management

github.com/sickn33クラウド・DevOps48.8k150 回インストール今日更新
リポジトリ

istio-traffic-management について

Istio のサービスメッシュにおけるトラフィック管理を設定する実用スキルです。サービス間通信を扱う運用担当者向けに、ルーティング、デプロイ戦略、耐障害性ポリシー、トラフィックテスト、検証手順を扱います。

主な機能

  1. 01VirtualService と DestinationRule の設定例
  2. 02カナリアおよびブルーグリーンルーティング
  3. 03リトライ、タイムアウト、サーキットブレーカー
  4. 04トラフィックミラーリングと障害注入
  5. 05Gateway とロードバランシングの設定
  6. 06istioctl による検証とデバッグ

活用シーン

  1. 01サービスバージョン間のトラフィック振り分け
  2. 02制限したトラフィックでのカナリアリリース検証
  3. 03リトライとサーキットブレーカーの設定
  4. 04テスト環境でのトラフィックミラーリングや障害注入

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill istio-traffic-management

インストール後、Claude Code で/istio-traffic-managementを入力して読み込まれたか確認します。

詳細

Istio トラフィック管理

本番環境のサービスメッシュデプロイ向けの Istio トラフィック管理ガイドです。

このスキルを使用しない場合

  • タスクが Istio のトラフィック管理に関係しない場合
  • この範囲外の別のドメインやツールが必要な場合

手順

  • 目標、制約、必要な入力を明確にします。
  • 関連するベストプラクティスを適用し、結果を検証します。
  • 実行可能な手順と検証方法を提示します。

このスキルを使用する場合

  • サービス間ルーティングを設定する場合
  • カナリアデプロイやブルーグリーンデプロイを実装する場合
  • サーキットブレーカーやリトライを設定する場合
  • ロードバランシングを設定する場合
  • テストのためにトラフィックミラーリングを行う場合
  • カオスエンジニアリングのためにフォールトインジェクションを行う場合

主な概念

1. トラフィック管理リソース
リソース目的スコープ
VirtualServiceトラフィックを宛先にルーティングするホストベース
DestinationRuleルーティング後のポリシーを定義するサービスベース
Gatewayイングレス/エグレスを設定するクラスター境界
ServiceEntry外部サービスを追加するメッシュ全体
2. トラフィックフロー
Client → Gateway → VirtualService → DestinationRule → Service
                   (routing)        (policies)        (pods)

テンプレート

テンプレート 1:基本的なルーティング
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews-route
  namespace: bookinfo
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: jason
      route:
        - destination:
            host: reviews
            subset: v2
    - route:
        - destination:
            host: reviews
            subset: v1
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews-destination
  namespace: bookinfo
spec:
  host: reviews
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3
テンプレート 2:カナリアデプロイ
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: my-service-canary
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: stable
          weight: 90
        - destination:
            host: my-service
            subset: canary
          weight: 10
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: my-service-dr
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        h2UpgradePolicy: UPGRADE
        http1MaxPendingRequests: 100
        http2MaxRequests: 1000
  subsets:
    - name: stable
      labels:
        version: stable
    - name: canary
      labels:
        version: canary
テンプレート 3:サーキットブレーカー
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: circuit-breaker
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 100
        http2MaxRequests: 1000
        maxRequestsPerConnection: 10
        maxRetries: 3
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 30s
      baseEjectionTime: 30s
      maxEjectionPercent: 50
      minHealthPercent: 30
テンプレート 4:リトライとタイムアウト
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: ratings-retry
spec:
  hosts:
    - ratings
  http:
    - route:
        - destination:
            host: ratings
      timeout: 10s
      retries:
        attempts: 3
        perTryTimeout: 3s
        retryOn: connect-failure,refused-stream,unavailable,cancelled,retriable-4xx,503
        retryRemoteLocalities: true
テンプレート 5:トラフィックミラーリング
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: mirror-traffic
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: v1
      mirror:
        host: my-service
        subset: v2
      mirrorPercentage:
        value: 100.0
テンプレート 6:フォールトインジェクション
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: fault-injection
spec:
  hosts:
    - ratings
  http:
    - fault:
        delay:
          percentage:
            value: 10
          fixedDelay: 5s
        abort:
          percentage:
            value: 5
          httpStatus: 503
      route:
        - destination:
            host: ratings
テンプレート 7:イングレスゲートウェイ
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: my-tls-secret
      hosts:
        - "*.example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: my-vs
spec:
  hosts:
    - "api.example.com"
  gateways:
    - my-gateway
  http:
    - match:
        - uri:
            prefix: /api/v1
      route:
        - destination:
            host: api-service
            port:
              number: 8080

ロードバランシング戦略

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: load-balancing
spec:
  host: my-service
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN  # or LEAST_CONN, RANDOM, PASSTHROUGH
---
# Consistent hashing for sticky sessions
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: sticky-sessions
spec:
  host: my-service
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: x-user-id
        # or: httpCookie, useSourceIp, httpQueryParameterName

ベストプラクティス

推奨事項
  • シンプルに始める - 複雑さは段階的に加えます
  • サブセットを使用する - サービスのバージョンを明確にします
  • タイムアウトを設定する - 常に妥当なタイムアウトを設定します
  • リトライを有効にする - ただし、バックオフと上限を設定します
  • 監視する - 可視性を確保するために Kiali と Jaeger を使用します
避けるべきこと
  • リトライしすぎない - 障害が連鎖する原因になる可能性があります
  • 外れ値検出を無視しない - サーキットブレーカーを有効にします
  • 本番環境にミラーリングしない - テスト環境にミラーリングします
  • カナリアを省略しない - まず少量のトラフィック割合でテストします

デバッグコマンド

# Check VirtualService configuration
istioctl analyze

# View effective routes
istioctl proxy-config routes deploy/my-app -o json

# Check endpoint discovery
istioctl proxy-config endpoints deploy/my-app

# Debug traffic
istioctl proxy-config log deploy/my-app --level debug

リソース

制限事項

  • タスクが上記の説明にある範囲に明確に合致する場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、成功基準が不足している場合は、作業を中断して確認を求めてください。

テンプレートを適用する前に、インストール済みの CRD/API バージョン、名前空間、サブセットラベル、ゲートウェイのシークレットのスコープを確認し、利用可能なスキーマ検証/分析チェックを実行して、ロールバック可能な範囲を限定したカナリアを開始してください。フォールトインジェクションとデバッグログには、許可された環境と実施時間の指定が必要です。ミラーリングではリクエストが複製されるため、ミラー先では書き込みと通知を分離し、機密データをマスキングして、100%未満の割合から開始してください。リプレイに耐えられるセマンティクスを持つ操作に限ってリトライしてください。

コメント