信頼性を確保するには、本番環境でサービスをテストすることが重要です。稼働中の本番トラフィックをサービスの新しいバージョンに送信すると、継続的なインテグレーションと機能テスト中にテストされなかったバグを明らかにできます。
Istioを使用すると、トラフィックミラーリングを使用して、別のサービスへのトラフィックを複製できます。カナリアデプロイメントパイプラインの一部としてトラフィックミラーリングルールを組み込むことができます。これにより、ライブトラフィックをサービスに送信する前にサービスの動作を分析できます。
この例では、Kubernetesにビデオ処理パイプラインをデプロイしました。render
サービスは encode-prod
サービスに依存しており、encode
の新しいバージョンである encode-test
をロールアウトしたいと思います。
Istio VirtualService
を使用して、すべてのencode-prod
トラフィックを encode-test
にミラーリングできます。render
用のクライアント側のEnvoyプロキシは、encode-prod
(リクエストパス)とencode-test
(ミラーされたパス)の両方にリクエストを送信します。 prod
と test
は、Istio DestinationRule
で指定されている encode
Kubernetes Serviceの2つのサブセットです。
注:render
は、encode-test
からの応答の受信を待機しません —ミラーリングされたリクエストは「投げっぱなし」になります。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: encode-mirror
spec:
hosts:
- encode
http:
- route:
- destination:
host: encode
subset: prod
weight: 100
mirror:
host: encode
subset: test
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: encode
spec:
host: encode
subsets:
- name: prod
labels:
version: prod
- name: test
labels:
version: test