istio-traffic-management について
Istio のサービスメッシュにおけるトラフィック管理を設定する実用スキルです。サービス間通信を扱う運用担当者向けに、ルーティング、デプロイ戦略、耐障害性ポリシー、トラフィックテスト、検証手順を扱います。
主な機能
- 01VirtualService と DestinationRule の設定例
- 02カナリアおよびブルーグリーンルーティング
- 03リトライ、タイムアウト、サーキットブレーカー
- 04トラフィックミラーリングと障害注入
- 05Gateway とロードバランシングの設定
- 06istioctl による検証とデバッグ
活用シーン
- 01サービスバージョン間のトラフィック振り分け
- 02制限したトラフィックでのカナリアリリース検証
- 03リトライとサーキットブレーカーの設定
- 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%未満の割合から開始してください。リプレイに耐えられるセマンティクスを持つ操作に限ってリトライしてください。
コメント
Markdown 対応