【问题标题】:How to expose NodePort to internet on GCE如何在 GCE 上将 NodePort 暴露给互联网
【发布时间】:2017-06-21 18:27:02
【问题描述】:

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

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

【问题讨论】:

  • 如果你总是想拥有一个你的 postgres 的副本,那么在 kubernetes 集群上运行它实际上几乎没有任何附加价值:你也可以直接在具有公共的 VM 上运行它知识产权。

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


【解决方案1】:

使用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

【讨论】:

  • 如何找出连接字符串使用的 IP?我可以在 GCE 中使用网络 > 外部 IP 地址中的一些预定义的吗?还是我以某种方式自动获得一个?
  • 我无法让它工作。我完全按照您告诉我的那样做,但是我在运行gcloud compute instances list 时获得的 3 个 ips 都没有响应,而且我没有忘记使用30080 端口。我还有什么需要做的吗?
  • 在描述步骤之前我已经测试过了,请确保检查容器和 Pod 是否运行以及服务中的选择器是否与 Pod 标签匹配。
  • 遇到了同样的问题,经过几个小时的学习终于弄明白了:我的服务selector 包含错误的旧部署名称(使用kubectl expose deployment wrong-old-value 创建,所以看起来确实如此虽然它实际上过滤掉了我的新部署。检查你的selector伙计们!
【解决方案2】:

您可以在终端窗口(Windows 中的命令或电源 shell)中运行 kubectl 以将 postgresql 部署转发到您的本地主机。

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

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

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2020-09-28
    相关资源
    最近更新 更多