Payment Gatewayのコンテキスト伝播を修正する

Gateway修正の再デプロイ

5 minutes

保存後のリビルドと再デプロイ

注意

server.js を保存しただけでは、リビルドと再起動を行うまで実行中のPodは更新 されません

プロジェクトルートから実行します

bash
bash scripts/build-images.sh payment-gateway
bash scripts/import-images-k3d.sh payment-gateway
kubectl -n cosmic-shop rollout restart deployment/payment-gateway
kubectl -n cosmic-shop rollout status deployment/payment-gateway --timeout=180s

検証チェックリスト

再デプロイが完了した後、以下のコマンドを実行します。

1. ヘルスエンドポイントがpropagationを報告していることを確認

bash
kubectl -n cosmic-shop exec deploy/payment-gateway -- wget -qO- http://localhost:3004/health

2. テスト注文を行いトレースを確認

bash
curl -s -X POST http://localhost:30080/api/purchases \
  -H "Content-Type: application/json" \
  -d '{"productId":"telescope-orion-8","quantity":1,"customerEmail":"gateway-test@cosmic.shop"}' \
  | python3 -m json.tool

注意

このワークショップではNode.jsプロキシを使用しており、アプリケーション層 のpropagationバグ(BFFやカスタムゲートウェイでよく見られる)を実践します。Step 06のNGINX ConfigMapアプローチは、問題が インフラストラクチャプロキシ 層にある場合に適用されます。

トラブルシューティング

トラブルシューティングガイダンスはこちらをクリック

考えられる問題 1. 修正後もトレースが切断されたまま

  • services/payment-gateway/server.js保存 し、make fix-payment-gateway(リビルド+インポート+再起動)を実行したことを確認してください
  • Podが最近のAGEで再起動されたことを確認します: kubectl -n cosmic-shop get pods -l app=payment-gateway
  • ヘルスが "propagation": true を示していることを確認します
  • 新しい トラフィックを生成します。古いトレースは遡って変更されません

考えられる問題 2. ヘルスが依然として "propagation": false を示す

  • propagation.inject()buildUpstreamHeaders() 内にあり、return headers前に 実行されることを確認してください
  • アップストリームfetchパスから suppressTracing() を削除したことを確認してください
  • フルリビルドチェーンを再実行します。イメージがリビルドされていない場合、再起動だけでは不十分です

考えられる問題 3. GatewayセットアップがNGINX / ConfigMapプロキシを使用している場合

一部のチームではNode.jsプロキシの代わりに APIゲートウェイまたはNGINXサイドカー でペイメントルーティングを実装しています。障害モードはStep 06と同じで、proxy_set_header traceparent ディレクティブが欠落しています。

組織でそのパターンを使用している場合、修正はJavaScriptではなく(gateway-config.yamlへの)ConfigMap の変更になります

nginx
location /payments/ {
    proxy_set_header Host $host;
    proxy_set_header traceparent $http_traceparent;
    proxy_set_header tracestate $http_tracestate;
    proxy_set_header baggage $http_baggage;
    proxy_pass http://payment_api;
}
Last Modified ·