在kubernetes上暴露多个容器端口

时间:2017-12-08 16:07:48

标签: docker kubernetes port marklogic

我正在尝试在我的本地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

但它只谈到如何配置服务以暴露多个端口,它没有说明如何为容器实现这一点 - 这应该是一个先决条件。

谢谢!

2 个答案:

答案 0 :(得分:7)

使用kubectl expose,可以用逗号分隔多个端口:

    --port=8001,8002

答案 1 :(得分:3)

从我在命令中看到的内容,您需要在kubectl expose中指定此服务将使用的两个端口中的哪一个。如果有两个端口执行不同的操作,那么有两个服务是有意义的(否则你不会知道每个请求中将使用哪两个端口)。所以,我的建议是执行两个kubectl expose命令(在--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