9

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

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

回答

11

使用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的accessable。你会发现它们:

gcloud compute instances list 
+0

我怎样才能找出连接字符串使用什么IP?我可以使用GCE中网络>外部IP地址预定义的一个吗?或者我自动得到一个? – Hnus

+1

我无法启动它。我完全按照你的意思去做,但是运行'gcloud compute instances list'时得到的3 ips没有任何回应,而且我没有伪造使用'30080'端口。还有什么我需要做的吗? – Hnus

+0

我在描述步骤之前对其进行了测试,确保检查容器和窗格是否运行,并确保服务中的选择器与窗格标签相匹配。 – pagid