在 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 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 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
使用kubectl expose
,可以指定多个端口,用逗号分隔:
--port=8001,8002
我正在尝试 运行 我在本地 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 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 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
使用kubectl expose
,可以指定多个端口,用逗号分隔:
--port=8001,8002