フォールトインジェクションとは、サービスに意図的に障害を発生させることで、フォールトトレランスの向上、クライアント側のバグの発見、潜在的な障害の特定を行うテスト手法です。Service Mesh はフォールトインジェクションをサポートしています。仮想サービスを使用して、アプリケーション層でフォールトインジェクションテストを実行できます。このトピックでは、フォールトインジェクションの設定方法について説明します。
前提条件
準備が完了し、HTTPBin サービスと sleep サービスがデプロイされています。詳細については、「準備」をご参照ください。
手順
サービス設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて、kubectl を使用して Container Service for Kubernetes (ACK) クラスタに接続し、次のコマンドを実行して sleep サービスの bash を有効にします。
kubectl exec -it deploy/sleep -- sh
次のコマンドを実行して、HTTPBin サービスにリクエストを送信します。
curl -I httpbin:8000
期待される出力:
HTTP/1.1 200 OK server: envoy date: Fri, 11 Aug 2023 09:50:24 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 3
次のコンテンツを使用して、HTTPBin サービスのトラフィックルールを設定し、フォールトを挿入します。詳細については、「仮想サービスの管理」をご参照ください。
設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて、kubectl を使用して ACK クラスタに接続し、次のコマンドを実行して sleep サービスの bash を有効にします。
kubectl exec -it deploy/sleep -- sh
次のコマンドを実行して、HTTPBin サービスにリクエストを送信します。
curl -w "Total time: %{time_total} seconds\n" -I httpbin:80
期待される出力:
HTTP/1.1 200 OK server: istio-envoy date: Sun, 27 Aug 2023 12:41:05 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 3 Total time: 5.008333 seconds
出力は、レスポンスが 5 秒遅延していることを示しています。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: httpbin-vs
namespace: default
spec:
hosts:
- httpbin
http:
- fault:
delay:
fixedDelay: 5s
percentage:
value: 100
route:
- destination:
host: httpbin