クライアントを優先したアイデンティティヘッダーを上流に転送しない
forward()、forwardWebhook()、forwardCallback()は、すべてのインバウンドをコピーしました ホスト以外のヘッダ(およびセッションレス2の場合、クレデンシャルヘッダ) 上流リクエストに。 BillingService は、許可なく、 X-Org-Id、X-Member-Id、および ...
運送業者 SMS の webhooks、すべてで何もに達した
Traefik は api.kamocrm.com の全てのパスをパスの分割なしでこのゲートウェイに送信します。 そして、このクラスは /api/voip/** を転送しました。 お問い合わせ /api/bulktext/inbound/{carrier} — VOIPService で書かれ、テスト、デプロイ インタ...
運送業者 SMS の webhooks、すべてで何もに達した
Traefik は api.kamocrm.com の全てのパスをパスの分割なしでこのゲートウェイに送信します。 そして、このクラスは /api/voip/** を転送しました。 お問い合わせ /api/bulktext/inbound/{carrier} — VOIPService で書かれ、テスト、デプロイ インタ...
タグではなく、ダイジェストによるデプロイを生成
前のコミットは、 `set image` をサイレント no-op と停止します。 これは、 結果: ロールアウト後、タグはレジストリでダイジェストに解決され、 実行中のPodはそれに対してチェックされます。 Podが画像を実行していない場合、この実行 生成されたビルドは、レポートの成功の代わりに失敗します。 タグが...
同じコミットの再構築は何も展開し、成功を報告しました
この画像はコミット SHA でタグ付けされます。 同一の画像参照。 `kubectl set image` は何も変更しません。 デプロイメントは触れず、「ロールアウト状態」はすぐに反対に成功します OLD Pod と、このパイプラインは何もデプロイした成功したデプロイを報告します。 サービスが再構築されなければなら...
/api/settingsを先にドロップすると、何も意味しません
EmailService は、同期統合コントローラーを ************************************ /api/settings/integrations — なので、 転送は、サービスがマッピングされず、404を返すパスに達しました。 上記の /api/email ワイルドカードは既に持ち...
ルート/api/contacts、/api/calendar、/api/settingsをメールサービスへ
カモモバイルの連絡先とカレンダーは、すべてのリクエストで404'd画面を表示します。 ネイザー api ホストでパスがルーティングされたため、EmailService や 何も記録されていないサービス — 故障は遠くから見えない。 kamo-internal はこれらを必要としません: それは自分自身を通して3つに達...
15秒のminReadySecondsのロールアウトルームを今すぐコストで与える
progressDeadlineSeconds は 60 でした。 これは、ロールアウトが進行前に表示しなければならないウィンドウです Kubernetes は、失敗してマークアップし、以前のコミットは minReadySeconds の 15 を追加しました。 画面上の全てのロールアウトとアプリの起動。 冷たい引きだ...
APIServiceは、すべてで優雅にシャットダウンしません
デプロイは、各サービスの唯一のPodを、リクエストをキャッチするために何も交換しました フライト 車両全体に適用される3つの設定: - プロセスがSIGTERMを見る前に、プレストップスリープ10秒。 Kubernetesは、そのPodからPodを削除します EndpointSlice と信号を同時に、Traefik...
一度にデコードされたトークンを上流にエンコードする
21670e5 は、UpstreamUri の FULLY-PRE-ENCODED エントリーを通じてソーシャルWebhookController をルーティングしました しかし、その URL はハイブリッドです。 `token` は @PathVariable なので、春は手が getQueryString() が生...
コールワーのクエリバイトをパブリックフェーシングプロキシーで転送
ゲートウェイは 3c24d32 でダブルエンコード転送されたクエリ文字列を停止しましたが、4 このサービスの他のプロキシは、まだ、すでにパーセントエンコードされたバイトを連結 文字列に渡すと、ResendTemplate の文字列の積み過ぎに渡します。 URIテンプレートとして、2番目の時間をエンコードします。%2C ...
呼び出し者のクエリバイトを 2 回エンコーディングするのではなく転送します
全ての URL は getRequestURI() と getRequestURI() からビルドされます。 getQueryString() — 両方とも既にパーセントエンコード済みで、 RestTemplate を文字列として書きます。 RestTemplate の String のオーバーロードは URL を呼び...
Kubectlのダウンロードをフラッキ・エグレッシにハードン [skip ci]
dl.k8s.io オーバー ランナーのエグレッション 断続的にミッドトランスファーをドロップ: curl: (56) OpenSSL SSL read: 復号化が失敗したか、悪いレコードマック それ以外の緑のビルドでデプロイが失敗する。 繰り返し観察 kamo-signer-monorepoとkamo-transla...
フェーズ1に必須originを宣言 — OriginMatcher オプトイン (空の許可リスト / 欠如 許可)
Phase-0 ウィジェットはサーバー側のプロキシを介してまだ呼び出します。そのため、オリジンロックは何もありません しかし、すべてのライブパブリックチャットキーには空の許可リストがあります。 ストリクト 執行(empty=deny、欠落-Origin=deny)はマーケティング+記号.pinkを破りました チャットと...
キャッシュ無効なキーのみ、元の拒否されていない(有効なキーのDoSを防ぎます)
風邪のRedisキャッシュでは、間違った/機密の起源を持つ有効なpublic-chatキーが 60秒のINVALIDとしてキャッシュされ、その正しい起源の要求を否定 ウィンドウ。 HTTP と WebSocket の両方のコールドキャッシュフォールバックが区別できるようになりました ******************...
Bind WS はオリジンにハンドシェイクを中継 + コールドキャッシュキーの検証フォールバックを追加します
PublicChatController のプライベートな validateViaDownstream() を共有に抽出 PublicChatKeyResolver bean so PublicChatWebSocketHandler 同じを再利用することができます downstream DB のバリデーション + 強...
Carve /api/voip/recordings/** out of the wildcard VOIP forwarder
The /api/voip/** catch-all in APIGatewayController was shadowing the dedicated VoipRecordingUploadController POST /api/voip/recordings/upload mapping when Sprin...
アップロードサイズを500MBに上げる
Spring Boot のデフォルトは 1MB の複数の部分を、背景イメージを引き起こします アップロードして500リクエストで失敗します。.getParts()。 マッチセキュリティサービス 既存の 500MB が制限されるため、APIService は大きなファイルアップロードをプロキシできます.
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
重複したCorsFilterを削除し、ゲートウェイ内のCORSヘッダーを上流に除去
WebConfig.java は、CortsConfig と競合する第 2 回 CorsFilter ビーンを定義しました。 javaの bean、重複ヘッダーの書き込みを危険にさらす。 削除すると、CorsFilter が 1 つしか存在しません。 Forward() メソッドは、上流から Access-Contr...
SecurityService に転送される JSON ボディに application/json を設定
RestTemplate to upstream は、春とコンテンツタイプの互換性がないままにできます。 @RequestBody は 415 を引き起こします。 生体を読んだ後、力の適用 JSON ペイロードがJSONのように見えるとき.
Validate Forgejo HMAC-SHA256 signature instead of plain secret header
Forgejo sends webhook secret as X-Gitea-Signature / X-Forgejo-Signature HMAC-SHA256 hash, not as a plain header value. Read body, verify HMAC, then forward to S...
Include SUBSCRIPTION_CATALOG in default scopes fallback
When MediaService doesn't return scopes in the validation response, default to including both PUBLIC_CHAT and SUBSCRIPTION_CATALOG scopes. This ensures public c...
Use getServerName() instead of getHeader(Host) for original host resolution
ForwardedHeaderFilter consumes X-Forwarded-Host and adapts getServerName() accordingly, while getHeader(Host) returns the raw HTTP Host which may be a K8s inter...
Use HTTP on port 80 for meet service URL to match other services
The HTTPS endpoint on 8443 causes SSL cert mismatch when routing through K8s internal DNS. All other services use HTTP on port 80.
ホストを上書きする代わりに上流X-Forwarded-Hostを保存
上流プロキシ(Next.js)がX-Forwarded-Hostをブラウザにセットする場合 元のホスト、APIService は、上書きではなくそのまま保存されます。 独自のホストヘッダー。 リクエストが到着したときに、orgドメインの解像度を修正 内部K8sサービスURL.
Explicitly forward visitor IP to downstream services
ForwardedHeaderFilter consumes X-Forwarded-For from the incoming request, so when APIService forwards to SecurityService via RestTemplate the header is missing....
Move AccessEnforcementFilter to scanned package, revert ComponentScan
The widened @ComponentScan caused a corsFilter bean conflict between CorsConfig and WebConfig. Moved the filter into com.kamo.api.app.config (already scanned by...
Add Redis connection config to K8s configmap
APIService pod was failing to start because spring-boot-starter-data-redis auto-configuration couldn't connect to Redis at localhost:6379. Points to redis.kamo....
Use JdkClientHttpRequestFactory to support PATCH method forwarding
The default RestTemplate uses SimpleClientHttpRequestFactory (HttpURLConnection) which doesn't support the PATCH HTTP method, causing branch-titles save to fail...