我有一个 k8s 部署,其中包含一个运行 jar 的 docker 映像,该 jar 应该公开一个 HTTP 3000 端口和一个 WebSocket 8982 端口。
当我在本地运行独立 jar 时,我可以使用 curl 和 WebSocket 客户端与这些端口进行通信。
我使用 kubectl proxy
创建了一个代理,然后转到以下地址:
http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
但是,此请求返回:
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "error trying to reach service: dial tcp 10.244.0.5:80: connect: connection refused",
"code": 500
}
如何访问运行部署的 pod 中的这两个端口?
答案 0 :(得分:2)
您可以使用命令 kubectl port-forward
它会以同样的方式工作并在本地和集群之间创建一个代理隧道
例如,如果您的服务名称是 test-service
kubectl port-forward svc/test-service 8080:3000
这将创建本地到集群的隧道,其中本地端口为 8080,服务端口为 3000,服务将流量路由到容器或 Pod。 >
阅读更多信息:https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
kubectl proxy
用于管理或连接 Kubernetes API 服务器并使用管理 API。
如果你没有这个服务,你可以直接将流量从本地代理到POD
本地监听8888端口,转发到pod中的3000
kubectl port-forward pod/<POD NAME> 8888:3000