在kubernetes上暴露多个容器的端口

我试图在我的本地minkube集群上运行我的自定义marklogic图像。 Marklogic公开了多个不同的端口进行pipe理(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

但它只是谈到如何configuration服务来暴露多个端口,它并没有说如何实现这个容器 – 这应该是一个先决条件。

谢谢!

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

所以,你会有一个服务查询和另一个pipe理。

另一种select是使用两个不同端口的服务,但我不确定这是否可行,使用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