フォールトインジェクションは、サービスに意図的に障害を発生させるテスト手法であり、フォールトトレランスの向上、クライアント側のバグの発見、潜在的な障害の特定に役立ちます。仮想サービスを使用して、アプリケーション層でフォールトインジェクションテストを実行できます。このトピックでは、フォールトインジェクションの設定方法について説明します。
前提条件
準備が完了し、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: gunicorn/19.9.0 Date: Mon, 28 Aug 2023 06:15:30 GMT Connection: keep-alive Content-Type: text/html; charset=utf-8 Content-Length: 9593 Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true
istioctl ツールを使用して、次のコマンドを実行し、HTTPBin サービスのレイヤー 7 ウェイポイントプロキシをデプロイします。
istioctl x waypoint apply --service-account httpbin
次のコンテンツを使用して仮想サービスを作成し、HTTPBin サービスのトラフィックルールを設定し、フォールトを挿入します。詳細については、「仮想サービスの管理」をご参照ください。
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
設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて kubectl を使用して ACK クラスタに接続し、次のコマンドを実行して sleep サービスの bash を有効にします。
kubectl exec -it deploy/sleep -- sh
次のコマンドを実行して、HTTPBin サービスにリクエストを送信します。
curl -w "Total time: %{time_total} seconds\n" -I httpbin:8000
期待される出力:
HTTP/1.1 200 OK server: istio-envoy Date: Mon, 28 Aug 2023 06:20:30 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 秒遅延し、フォールトインジェクションが成功したことを示しています。