如何在GCE上将NodePort公开给互联网

时间:2017-02-04 12:14:46

标签: kubernetes google-cloud-platform google-kubernetes-engine

如何使用NodePort类型将<{1}}类型的服务公开到互联网而不使用?我发现的每个资源都是通过使用负载均衡器来实现的。但我不希望负载平衡其昂贵和不必要的用例因为我正在运行一个LoadBalancer映像的实例,它挂载到永久磁盘,我希望能够从我的PC连接到我的数据库使用pgAdmin。如果有可能,请提供更详细的答案,因为我是Kubernetes,GCE和网络的新手。

只是为了记录和更多的上下文我部署运行我的API服务器的3个副本,我通过负载均衡器与set loadBalancerIP连接,另一个部署运行一个带有NodePort服务的postgres实例,通过它我的API服务器正在与我的数据库通信。我的问题是在没有公共访问权限的情况下维护数据库很难。

2 个答案:

答案 0 :(得分:25)

使用NodePort作为服务类型可以直接使用,例如像这样:

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

更多详情可在documentation中找到。 使用NodePort的缺点是您必须自己负责与提供商防火墙集成。也可以在官方文档的Configuring Your Cloud Provider's Firewalls部分找到它的起始端口。

对于GCE开放,以上所有节点上公开的内容可能如下所示:

gcloud compute firewall-rules create myservice --allow tcp:30080,tcp:30443

一旦到位,您的服务应该可以通过节点的任何公共IP访问。你会发现它们:

gcloud compute instances list

答案 1 :(得分:1)

您可以在终端窗口(Windows中的命令或Power Shell)中运行kubectl,以将Postgresql部署端口转发到您的本地主机。

kubectl port-forward deployment/my-pg-deployment 5432:5432

此命令正在运行时(它在前台运行),您可以使用pgAdmin指向localhost:5432来访问gke上的pod。使用pgadmin完成操作后,只需关闭终端即可。