簡體   English   中英

在 Kubernetes 上暴露容器的多個端口

[英]Exposing multiple ports of container on kubernetes

我正在嘗試在我的本地 minkube 集群上運行我的自定義 marklogic 圖像。 Marklogic 為管理(8001)和查詢(8000)公開了多個不同的端口。 有沒有辦法在 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

但它只討論了如何配置服務以公開多個端口,並沒有說如何為容器實現這一點——這應該是一個先決條件。

謝謝!

從我在您的命令中看到的內容來看,您需要在kubectl expose指定該服務將使用的兩個端口中的哪一個。 如果有兩個端口執行不同的操作,那么有兩個服務是有意義的(否則您將不知道每個請求中將使用兩個端口中的哪一個)。 所以,我的建議是執行兩個 kubectl 暴露命令(在--port部分,你可以放任何你想要的):

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

因此,您將擁有一項用於查詢的服務和另一項用於管理的服務。

另一種選擇是使用具有兩個不同端口的一個服務,但我不確定使用 kubectl 暴露是否可行。 在這種情況下使用 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

使用kubectl expose ,您可以通過用逗號分隔來指定多個端口:

    --port=8001,8002

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM