KubernetesでHTTP以外のTCPサービスを公開するにはどうすればよいですか?


8

パブリッククラウド(Azure / AWS / Google Cloud)でKubernetesクラスターを実行しています。ユーザーに公開したい非HTTPサービスがあります。

HTTPサービスの場合、通常はIngressリソースを使用して、アドレス指定可能なDNSエントリを介してそのサービスを公開します。

HTTP以外のTCPベースのサービス(PostgreSQLなどのデータベース)の場合、これらを公開して公開するにはどうすればよいですか?

NodePortサービスの使用を検討しましたが、これにはノード自体がパブリックにアクセスできる必要があります(kube-proxy適切なノードへのルーティングに依存しています)。できればこれを避けたい。

LoadBalancerサービスは別のオプションのように見えますが、公開したいTCPサービスごとに専用のクラウドロードバランサーを作成したくありません。

NGINX IngressコントローラーがTCPおよびUDPサービスの公開をサポートしていることは承知していますが公開するサービスの静的な定義が必要なようです。私の使用例では、これらのサービスは動的に作成および破棄されているため、これらのサービスマッピングを静的に事前に定義することはできませんConfigMap

回答:


1

多分このワークフローは次のことを助けることができます:

(私はクラウドプロバイダーがAWSであると仮定しています)

  • AWSコンソール:分離されたVPCを作成し、Kubernetes ec2インスタンス(または自動スケーリンググループ)を作成して、パブリックIPの作成を無効にします。これにより、インターネットからインスタンスにアクセスできなくなります。サイト2のサイトVPNを介してプライベートIP(例:172.30.1.10)またはパブリックIPを持つ同じVPCのセカンダリec2インスタンスを介してアクセスできます。

  • Kubernetes: NodePortが固定されたサービスを作成します(Postgresの場合は35432など)。

  • AWSコンソール:ノードの同じVPC内にクラシックoレイヤー4ロードバランサーを作成します。[リスナー]タブで、「ターゲットグループ」を介してノードの1つまたはすべてを指すポート35432(および必要に応じてその他のポート)を開きます。ポート数は無料です。

この時点では、ロードバランサーのターゲットグループの現在の生きているノードの更新を自動化する方法がわかりません。これは、自動スケーリング機能の問題である可能性があります... bashスクリプトをプルするCronジョブAWS APIからの情報とターゲットグループの更新


ありがとう-これは役に立ちます。これは明らかに、Kubernetes環境の一般的なソリューションではなく、選択したクラウドプロバイダーと密接に関連しています。おそらく、オペレーターは、選択したクラウドプロバイダーの詳細を隠すソリューションに適しているでしょうか?
cjheppell

0

HTTP以外のTCPベースのサービス(PostgreSQLなどのデータベース)の場合、これらを公開して公開するにはどうすればよいですか?

それは、最終的なユーザーがそれらのサービスに対処することをどのように期待するかに依存しますか?ご指摘のとおり、Ingressでは、仮想ホスティングを使用してすべてのリクエストを同じIngressコントローラーにルーティングし、Host:ヘッダーを使用してクラスター内でディスパッチできます。

PostgreSQLなどのTCPサービスでは、そのようなヘッダーはありません。したがって、IPベースのメカニズムを使用するか、インターネットに直接接続するIPの専用ポートをそれぞれに割り当てる必要があります。

クライアントがIPv6に対応している場合、IPv6が提供する非常に大規模なIPスペースを考えると、各サービスに専用IPアドレスを割り当てることは絶対に妥当です。しかし、それ以外の場合は、2つのノブを回します。IPとポートです。

そこから、これらの接続をクラスター内で適切なサービスにルーティングする方法は、最初の問題をどのように解決したかによって異なります


ご回答有難うございます。各サービスが独自のポートを公開していることを理解しています。私の問題は、現在のKubernetesサービスタイプが私のユースケースに適していないように見えることです。NodePort■ノードのポートを公開する必要があるため、セキュリティの観点からは理想的ではありません。LoadBalancer per serviceは高価です。ホストに正しくルーティングできると仮定すると、特にこれらを動的に起動および停止する場合、どのKubernetesサービスを使用してそれらをパブリックに接続可能にする必要がありますか?
cjheppell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.