Kubernetes 如何在GCE上向internet公开节点端口
如果不使用类型Kubernetes 如何在GCE上向internet公开节点端口,kubernetes,google-cloud-platform,google-kubernetes-engine,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,如果不使用类型负载平衡器,如何将类型节点端口的服务公开到internet?我找到的每个资源都是通过使用负载平衡器来实现的。但我不希望负载平衡对我的用例来说是昂贵且不必要的,因为我正在运行一个安装到永久磁盘的postgresimage实例,我希望能够使用pgAdmin从我的PC连接到我的数据库。如果可能的话,请您提供更详细的答案,因为我对Kubernetes、GCE和网络都是新手 为了记录和更多的内容,我的部署运行我的API服务器的3个副本,我通过负载平衡器与set-loadBalancerIP连
负载平衡器,如何将类型节点端口的服务公开到internet?我找到的每个资源都是通过使用负载平衡器来实现的。但我不希望负载平衡对我的用例来说是昂贵且不必要的,因为我正在运行一个安装到永久磁盘的postgres
image实例,我希望能够使用pgAdmin从我的PC连接到我的数据库。如果可能的话,请您提供更详细的答案,因为我对Kubernetes、GCE和网络都是新手
为了记录和更多的内容,我的部署运行我的API服务器的3个副本,我通过负载平衡器与set-loadBalancerIP连接,另一个部署运行postgres的一个实例和NodePort服务,我的API服务器通过它与我的db通信。我的问题是,在没有公共访问的情况下维护数据库是很困难的。使用节点端口作为服务类型可以直接工作,例如:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
ports:
- port: 80
nodePort: 30080
name: http
- port: 443
nodePort: 30443
name: https
selector:
name: nginx
有关更多详细信息,请参阅。
使用NodePort
的缺点是您必须自己负责与提供商的防火墙集成。在官方文件的一节中也可以找到这方面的起始端口
对于GCE,在所有节点上公开上述内容可能如下所示:
gcloud compute firewall-rules create myservice --allow tcp:30080,tcp:30443
一旦这一点到位,您的服务应该可以通过节点的任何公共IP访问。您可以通过以下方式找到它们:
gcloud compute instances list
您可以在终端窗口(windows中的命令或power shell)中运行kubectl,将postgresql部署转发到本地主机
kubectl port-forward deployment/my-pg-deployment 5432:5432
当这个命令运行时(它在前台运行),您可以使用pgAdmin指向localhost:5432访问gke上的pod。使用完pgadmin后,只需关闭终端。我如何找到连接字符串使用的IP?我可以在GCE中使用网络>外部IP地址中的预定义地址吗?或者我自动得到一个?我不能让它工作。我完全按照您告诉我的那样做,但是运行gcloud compute instances list
时得到的3个IP都没有响应,而且我没有忘记使用30080
端口。还有什么我需要做的吗?在描述步骤之前,我测试了它,确保检查容器和吊舱是否运行,以及服务中的选择器是否与吊舱标签匹配。有同样的问题,经过几个小时的学习(浪费时间),终于解决了:我的服务选择器包含错误的旧部署名称(使用kubectl expose deployment错误的旧值创建,所以它看起来好像做了些什么,而实际上它过滤掉了我的新部署。检查你的选择器
伙计们!如果你总是想要一个postgres副本,那么在kubernetes集群上运行它实际上几乎没有任何附加值:你也可以直接在具有公共IP的VM上运行它。