web-dev-qa-db-ja.com

Kubernetes-単一IPを介した外部接続

「外の世界」に接続する必要があるたびにすべてのポッドで使用される1つのIPを取得する方法を見つける必要があります。

フルバージョン:

アプリケーションをペイメントゲートウェイサービスと統合しようとしています。ただし、このサービスでは、サーバーのIPをホワイトリストに登録し、セキュリティ上の理由で他のすべての接続を拒否する必要があります。

現在、KKE(3、実際には)クラスターをKubernetes 1.5.2で実行しています。このクラスターには約30のポッドがあり、インターネット向けのトラフィックを静的で予測できないIPアドレス経由でルーティングするには、特に1つ必要です。

現在、クラスターインスタンスの外部IPのリストをホワイトリストに登録する必要がありますが、これは問題です。

クラスターは最大5つのインスタンスを自動スケーリングするようにセットアップされており、これらのすべてのインスタンスにはエフェメラルIPがあり、1-IDO N'Tを強制的にオンにする必要がありますこれらすべてを静的IPに変換します。 2-DO N'Tも強制的に外部のエンドポイントを介して特定のポッドを公開し、インターネットからクラスタへの直接接続で利用できるようにしたいと考えています。

私が言う/構成する方法はありますか?

- This pod forwards all it's Internet directed connections through X endpoint?
  Obviously, this should be something easy to configure to work with 1 pod
or with all of them I so desired.

ここで正しい行動方針は何ですか?どうすればこれを達成できますか?

私は this SO question および Source IP docs をKubernetesで参照しました this instructions を参照しましたNATゲートウェイのセットアップ方法(これは、柔軟なクラスター構成を考えると機能しないと思います)

4
Zed_Blade

これはGCPではまだ可能ではありません。少しハックですが、静的IPアドレスを使用してGKE以外のインスタンスでhttpプロキシをセットアップすることをお勧めします。次に、支払いゲートウェイを使用するときは、httpプロキシを使用して、正しいIPアドレスからアクセスできるようにします。

IPアドレスがエフェメラルでないことを確認してください。

プロキシVMのイメージを作成します。ダウンした場合、同じリージョン内の任意のゾーンのノードを起動して、プロキシとして機能させることができます。インスタンス間でIPアドレスを移動することもできますが、現在の接続は強制終了されるため、コードが失敗したときに再試行することを確認する必要があります。もちろん、コードが失敗したときに再試行することを常に確認する必要があります。

2
Stephen

実行できる唯一の方法は、NATゲートウェイです。

ある種のHTTP API(REST API)を使用していて、TCPが必要だと思います。 TCPはハンドシェイクを完了する必要があるため、どのノードがパケットを送信して経路を戻すかを知る必要があります。そのため、NATが必要です。

NAT Gatwayは正常に動作するはずです。NATインスタンスをゲートウェイとして使用するようにコンテナに指示するだけです。

2