3 つのノードで構成される小さな Kubernetes on prem クラスター (Rancher 2.3.6) があります。クラスター内のデプロイメントは、外部アプリケーションによって動的にプロビジョニングされ、レプリカ数は常に 1 に設定されます。これらはステートフルなアプリケーションであり、高可用性は必要ないためです。
アプリケーションは、ランダム ポートと ExternalTrafficPolicy が Cluster に設定された NodePort サービスによってインターネットに公開されます。そのため、ユーザーが 3 つのノードのいずれかを要求すると、k8s プロキシはその要求をルーティングし、アプリケーション ポッドを使用して正しいノードに s-NAT します。
この時点まで、すべてが正常に機能します。
問題は、リクエストの送信元 IP に依存するアプリケーションを追加したときに始まりました。s-NAT は要求 IP を内部 IP に置き換えるため、このアプリケーションは正しく機能しません。
サービスのExternalTrafficPolicyをローカルに設定すると、s-natingが無効になることはわかっています。ただし、すべてのポッドに実行中のアプリケーションのインスタンスがあるわけではないため、これはアーキテクチャにも影響を与えます。
元のクライアント IP を保持しながら内部ルーティングを利用する方法はありますか?そのため、リクエストがどのノードに到達するかを心配する必要はありません。