2017-12-08 12 views
0

ローカルのミンクubeクラスタでカスタムmarklogicイメージを実行しようとしています。 Marklogicは、管理(8001)とクエリ(8000)のために複数の異なるポートを公開しています。 kubernetesにコンテナの複数のポートを公開する方法はありますか?kubernetesにコンテナの複数のポートを公開する

# try to run container with multiple ports exposed. 
kubectl run ml3 --image=marklogic-initial-install:9.0-3.1 --port=8001 --port 8002 
# create service to expose the container 
kubectl expose deployment ml3 --type=LoadBalancer 
# use qinikube to open the exposed ports 
minikube service ml3 

がすべてで、このことが可能です:

これは私が試した何ですか?

kubernetesドキュメントのこのセクションでは、それが実際に可能であることを示唆している:

https://kubernetes.io/docs/concepts/services-networking/service/#multi-port-services

しかし、複数のポートを公開するサービスを設定する方法についてそれだけの話、それはコンテナのためにこれを達成するためにどのように言っていません。 - それは前提条件でなければなりません。

ありがとうございます!

答えて

3

私はあなたのコマンドに表示されているから、kubectl exposeで指定する必要がありますが、このサービスで動作するポートは2つあります。異なる操作を実行する2つのポートがある場合は、2つのサービスを持つことが理にかなっています(そうしないと、各要求でどちらのポートが使用されるか分かりません)。だから、私のアドバイスは、(--port部分であなたが望むものは何でも置くことができます)コマンドを公開kubectl 2を実行するために、次のようになります。

kubectl expose deployment ml3 --type=LoadBalancer --name=management --port=80 --target-port=8000 
kubectl expose deployment ml3 --type=LoadBalancer --name=query --port=80 --target-port=8001 

だから、あなたが管理のための1つの照会のためのサービスと別のを持っているでしょう。

もう1つの方法は、2つの異なるポートで1つのサービスを使用することですが、これがkubectl exposeを使用して実行可能かどうかはわかりません。この場合、yamlファイルを使用すると意味があります。

kind: Service 
apiVersion: v1 
metadata: 
    name: my-service 
spec: 
    selector: 
    app: MyApp <-- use a proper selector for your pods 
    ports: 
    - name: management 
    protocol: TCP 
    port: 80 
    targetPort: 8000 
    - name: query 
    protocol: TCP 
    port: 81 
    targetPort: 8001 
+0

いいね!しかし、コンテナの作成時に両方のポートを指定する必要はありませんか?それは複数の--port引数で動作するでしょうか? – user152468

+0

複数のポートを公開する場合は、各公開ポートに名前を付ける必要があります。これは答えに追加する必要があります。 – user152468

+0

回答が更新されました。コンテナの作成時にポートを指定することについては、ドキュメントによると、kubectl runは1つだけを受け入れるように見えます。 –

関連する問題