Kubernetes / Helm

Ingressパスのマッチング確認

レンダリング済みYAMLとリクエストのHost・パスを入力し、静的な経路を調べます。

Ingressパスのマッチング確認

マニフェストYAMLまたはJSON

経路レポート

マニフェストを貼るか、例を読み込んでください。

ブラウザ内で解析します。クラスター接続やHTTP送信はしません。

リクエスト設定

ExactとPrefixのみ標準規則として判定します。

上限: 300,000文字、100リソース、500パス。

マニフェストを貼るか、例を読み込んでください。

Ingressのパスが正しく見えても、バックエンドが存在しないServiceポートを指していることがあります。Ingressパスのマッチング確認は、その食い違いを一つのリクエストからたどります。

規則の一致と実際の疎通は別です。表示するのは貼り付けたマニフェストから確かめられる範囲で、クラスターには接続しません。

Ingressパスのマッチング確認が役立つ場面

一つのリクエストを最後のポートまで追う

Ingressパスのマッチング確認は最長のパスを選び、同じ長さならExactを優先します。選ばれたServiceのportからtargetPortまでのつながりを示します。

選択された経路を青い線でIngressからServiceとワークロードへつないだ図。

参照切れと情報不足を混同しない

Serviceのポートが存在しなければそこで経路を止めます。Podのマニフェストがないだけなら不明と表示し、障害と決めつけません。

Service参照の断点を橙色で、実行時情報がない部分を点線で示す図。

マニフェストを直す前の三つの確認

01

関係するオブジェクトをまとめる

IngressとServiceを---で区切り、必要ならDeploymentやPodも追加します。同じ名前でも名前空間が違うServiceは参照先になりません。

02

実際のリクエストを指定する

初期パスは/です。/api/ordersのような具体的なパスとHostヘッダーを入れてください。Hostが空ならHostなしの規則だけを確認できます。

03

結果の確実性を見る

一致は静的な規則の一致です。参照切れ、不明、コントローラー依存の表示を読み分け、編集後は再実行してからレポートをコピーします。

ルールからServiceまでの追跡

パスとHostの選択

Ingressパスのマッチング確認はExactとセグメント単位のPrefixを扱います。/apiは/apixに一致せず、ワイルドカードHostは一段のサブドメインだけです。 Kubernetes Ingressのルーティング全体はコントローラーごとに異なります。

二種類のポートを区別

IngressのバックエンドはServiceのportまたはポート名を参照します。ServiceのtargetPortはその次の段階で解決し、未指定ならportと同じ値です。

任意のワークロード確認

DeploymentテンプレートやPodがある場合はselectorとラベルを照合します。ない場合は到達可能と見なさず、不明のまま残します。

静的解析で分かる範囲

コントローラー固有の動作は未判定
ImplementationSpecific、正規表現やrewrite注釈はIngressClassで結果が変わります。Ingressパスのマッチング確認は確定結果として扱いません。
404の原因をネットワークで検証しない
Ingressの404調査にはコントローラーのログや実際のHTTP応答が必要です。このページはYAMLをローカルで読むだけです。
Podがないだけでは断線ではない
貼られていないPodや手動のEndpointSliceもあり得ます。Serviceの参照やportが欠ける場合だけ明確な断線とし、ワークロード不足は不明とします。
入力形式と上限
最大300,000文字、100リソース、500パスです。レンダリング済みのnetworking.k8s.io/v1 Ingressとv1 Serviceを対象とし、HelmテンプレートやGateway APIは対象外です。

Ingressパスのマッチング確認の疑問

IngressのPrefixは/foo-barにもマッチしますか?

Prefixは/ごとの要素で比較します。/fooは/foo/barに一致しますが、/foo-barには一致しません。大文字と小文字も区別します。

IngressのバックエンドにはServiceのportとtargetPortのどちらを指定しますか?

IngressのバックエンドはServiceのportまたはポート名を指定します。targetPortはServiceからPodへの対応先で、Ingressから直接指定する値ではありません。

ホスト名が一致しないリクエストはどこへ送られますか?

Hostが一致しなければその規則は選ばれません。defaultBackendがあれば候補になり、なければ処理はコントローラーに委ねられます。

Ingressのパスを設定したのに404になるのはなぜですか?

404はHostやパスの不一致、アプリ側の応答、rewriteなどでも起こります。静的な経路を確認した後、コントローラーのログと実リクエストを調べてください。

マニフェストだけでPodへの到達性を確認できますか?

できません。YAMLだけではPodのReady状態、EndpointSlice、DNS、ロードバランサーや実際の通信を確かめられません。

経路について質問がありますか?

Ingressパスのマッチング確認を始める

サンプルのHostとパスを変え、選ばれるServiceポートを確かめます。

入力はブラウザ内で処理します。