2017-06-12 8 views
0

私は実験を設定しましたローカルクーベルネットクラスターは1つのマスターノードと3つのスレーブノードで構成されています。私は、ポート10001でリッスンするカスタムサービスのための配備を作成しました。目標は、安定したIP /ホスト名を持つ、例示的なエンドポイント/helloにアクセスすることです。 http://<master>:10001/helloローカルクラスタでKubernetes podにアクセスするには?

デプロイメントをデプロイすると、ポッドは正常に作成され、クラスタIPを通じてアクセスできます。

クラウドプロバイダのソリューションは、デプロイメント用のロードバランササービスを作成することであることを理解しているので、サービスをexposeにするだけです。ただし、これはローカルクラスタではサポートされていないようです。 Ingressの設定は、この目的のために過度のようです。そうじゃない?

kube proxyは行く方法です。ただし、マスターノードでkube proxy --port <port>を実行すると、http://<master>:<port>/api/...にアクセスできますが、実際のポッドにはアクセスできません。

多くの関連する質問(例:How to access services through kubernetes cluster ip?)がありますが、回答は受け入れられません。 topicのKubernetes documentationもかなり疎ですので、概念的に正しいアプローチが何であるかについてはわかりません。

私はまっすぐな解決策や良いチュートリアルを探しています。それは明確なパスが欠けている非常に典型的なユースケースと思われる。

答えて

0

おそらく最も簡単なのはIngressです。

Nginx IngressControllerの作成を非常に簡単にスケジュールできます。ここにはa guideがあります。この設定ではDaemonSetが使用されるため、各ノードにIngressControllerがあります。また、InPortControllerは、安定しない仮想サービスIPではなく、ノードのIPでlistenするように、hostPort configオプションも使用します。

これで、いずれかのノードにHTTPトラフィックを取得するだけで済みます。おそらく、それぞれのサービスのために、ノードのIPを指す(つまり、複数のA/AAAAレコード)外部DNSエントリを定義する必要があります。入力は、name-based virtual hostingを使用してHTTPホスト名に基づいてクラスタ内で曖昧さをなくし、クラスタ内をルーティングします。

HTTP以外のサービスを公開する必要がある場合は、これがもう少し複雑になりますが、nginxの入力ドキュメントでさらに多くの例を参照できます(UDPなど)。

0

ご使用のシナリオで入力コントローラが過剰使用されている場合は、タイプNodePortのサービスをお試しください。ポートを指定するか、システムが自動的に割り当てることができます。

NodePortサービスは、クラスタ内のすべてのノードの同じポートでサービスを公開します。ノードへのネットワークアクセスがある場合、構成で指定されたノードIPおよびポートでサービスにアクセスできます。

明らかに、これはノード間の負荷を分散しません。実際のロードバランサの動作をエミュレートする場合は、外部サービスを追加してこれを行うことができます。 1つの簡単なオプションは、rocky-cliのようなものを実行することです。

+0

すでにロードバランシングのために外部HAProxyを使用していますが、これは私のシナリオでは最もスムーズな解決策です。しかし、ノードは、iptablesルールを追加した後であっても、外部リクエストからブロックされたままです(ただし、マシン内部から外部IP経由でアクセスすることができます): 'iptables -A INPUT -p tcp --dport -j ACCEPT' Anyそれについての手がかりは? – Carsten

関連する問題