ingressトラフィックとは何か? 受信のネットワークフロー
ingressトラフィックとは、ユーザーのリクエストがデプロイされたサービスに届いたり、webhookがあなたのエンドポイントに到着したりするように、外部からネットワークへ流れ込むデータです。
ingressはegressの鏡像です。ネットワークの境界を離れるのではなく、入ってくるトラフィックです。デプロイされたサービスにとって、ingressはあなたが実際に処理したいトラフィックであり、内部への許可と正しいルーティングが必要です。CIは、新しくデプロイされたサービスがトラフィックを受け入れることを検証する際にingressを気にかけます。
定義上の受信
ingressとは、ネットワークの外部から内部のホストへ開始された任意のコネクションです。パブリックユーザーへの処理もwebhookの受信も、どちらもingressです。
ingressを制御する
- ファイアウォールとsecurity groupの受信ルール。
- 内部へルーティングするload balancerとingress controller。
- ネットワークのエッジでのTLS終端。
Kubernetesにおけるingress
Kubernetesでは、ingress resourceとcontrollerが外部のHTTPトラフィックをhostとpathでサービスへルーティングします。デプロイは新しいルートを公開するために、しばしばingressのルールを更新します。
ingressとデプロイの検証
デプロイ後、smoke checkは新しいサービスへingressトラフィックを送り、それが応答することを確認します。ingressのルールが誤っていると、workloadが内部で正常に動いていても、そのチェックは失敗します。
ingressチェックが失敗する理由
一般的な原因は、受信ルールの欠落、健全なbackendのないload balancer、または誤ったサービスを指すingressルートです。これらはtimeout、502、503として現れます。
一時的対破綻したingress
backendがまだウォームアップ中の503は一時的ですが、受信ルールの欠落は毎回失敗します。Latchkeyのrunnerはデプロイの検証中に一時的なingressの応答をretryし、誤ったルールは本当の失敗として可視化したままにします。
重要なポイント
- ingressは外部からネットワークへ入ってくる受信トラフィックです。
- 受信ファイアウォールルール、load balancer、ingressルートによって制御されます。
- ウォームアップ中の503は一時的ですが、受信ルールの欠落は決定論的な破綻です。