Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何在GCE上向internet公开节点端口_Kubernetes_Google Cloud Platform_Google Kubernetes Engine - Fatal编程技术网

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上运行它。