2017-01-17 4 views
1

私は、ポート8080(node.jsアプリケーション)でリッスンする非常に単純なWebサーバーを持っています。そのサーバーはコンテナの中に入ります。私はこれらのサーバのうちのいくつかをマシンに収めることはできません。なぜなら、彼らはたくさんのメモリを割り当てるからです。同じIP上に複数のコンテナを公開することはできますか?

私はそのコンテナの複数のインスタンスを展開したいと思います(おそらく約100、おそらくそれ以上)。そして、それらを別々のポートで同じ外部から見えるIPアドレスに公開したいと思います。 ip_address:10314、ip_address:12605、ip_address:23040など

この種のものはKubernetesで設計できますか?

+0

ポッドごとに1つのIPがあります。各コンテナは、互いに矛盾しない限り、同じIP上のポートを公開することができます。マルチコンテナのポッドについては、https://kubernetes.io/docs/user-guide/pods/multi-container/ –

+0

を参照してください。追加の要件が1つ追加されました。サーバーは大量のメモリを使用します(たとえば、それぞれ500MB)。 また、ポッドが動作しているIPは外部から(インターネットから)見えません。 –

+0

あなたの以前の質問を誤解しました。これは、あなたがポッドに話すLoadBalancer型のサービスを望むように見えます。私はあなたが代わりにL3/L7ロードバランサを持つことができるときに、各Webサーバーのポートを別々にしたいのかどうかはわかりません。 –

答えて

0

各Podの前にLoadBalancerタイプのサービスを、Podごとに1つのコンテナを使用することができます。そして、あなたはこのようnodePortを制御したい:

apiVersion: v1 
kind: Service 
metadata: 
    name: service-001 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 8080 
    nodePort: 31001 
    selector: 
    app: pod-001 

nodePortすべてのノードに公開され、あなたがそれを期待するように動作する必要があります。

拡大すると、新しいService +(Deployment)+ Pod + Containerの組み合わせを作成する必要があり、nodePortが他のサービスと衝突しないことを手動で確認する必要があります。

乾杯

+0

私は、サービス自体をイングレスロードバランサと考えています。さて、ポッドの詳細とレプリカセットを100に設定したデプロイメントがあります。今はノードポートにサービスを公開しています。このサービスはロードバランサを使わずに着信トラフィックの負荷を自動的に分散しませんか? –

+0

@LakshmanDiwaakarはいそうです – pagid

0

あなたも(あなたがいないように聞こえるもの)のロードバランシングを提供するサービスを必要としない場合は、コンテナを公開するNodePortサービスを使用することができます。

apiVersion: v1 
kind: Service 
metadata: 
    name: example-service-name 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
     targetPort: 80 
     nodePort: 31112 
    selector: 
    run: name-of-app 

(。あなたは、コンテナ内の80以外のポート上で動作するアプリを公開したい場合は、porttargetPortを変更)

ハードコーディングするのではなく:ここでNodePortたとえばYAMLの設定です自動化されたビルドツールまたは一連のシェルスクリプトを使用して、nodePortフィールドとrunフィールドを自動的に設定することができます。これにより、ポートの衝突を回避できます。

0

Nginxなどのリバースプロキシを使用できます。すべてのコンテナのフロントエンドとして機能することができます。すべてのリクエストはNginxに送信され、ポート、ホスト名、または着信リクエストのURLに応じてコンテナに転送されます。

関連する問題