【问题标题】:During local development with Kubernetes/minikube, how should I connect to postgres database running on localhost?在使用 Kubernetes/minikube 进行本地开发期间,我应该如何连接到在 localhost 上运行的 postgres 数据库?
【发布时间】:2018-08-23 15:32:34
【问题描述】:

我已经设置了一个在 Google Kubernetes Engine + Google Cloud SQL 上运行的应用程序堆栈。在本地开发时,我希望我的应用程序连接到在集群外部运行的 postgres 数据库服务器以模拟生产环境。

似乎这样做的方法是定义一个外部端点,如下所述:Minikube expose MySQL running on localhost as service

很遗憾,我无法将“127.0.0.1”指定为端点 IP 地址:

kubectl apply -f kubernetes/local/postgres-service.yaml
service "postgres-db" unchanged
The Endpoints "postgres-db" is invalid: subsets[0].addresses[0].ip: 
Invalid value: "127.0.0.1": may not be in the loopback range (127.0.0.0/8)

所以我不得不将 postgres 绑定到我的实际机器地址。

似乎必须有一种方法可以将我的 localhost 的端口映射到本地 kubernetes 集群,但到目前为止我还没有找到方法。

有人知道诀窍吗?或者,有人可以提出一个不涉及在集群内运行 postgres 的替代解决方案吗?

【问题讨论】:

    标签: postgresql kubernetes localhost minikube


    【解决方案1】:

    可能不是 Minikube 的答案,但我最终来到这里,所以我分享了我在 Docker for Mac 中为 Kubernetes 所做的事情。

    我为 PostgreSQL 添加了这样的服务:

    kind: Service
    apiVersion: v1
    metadata:
      name: postgres
      namespace: default
    spec:
      type: ExternalName
      # https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
      externalName: host.docker.internal
      ports:
        - name: port
          port: 5432
    

    我的应用程序能够使用域名postgres 通过此设置连接到本地运行的 postgres 服务器。 Postgres 服务器可以通过此设置收听127.0.0.1

    【讨论】:

    • 谢谢!这真的很有帮助。
    • 谢谢!这真的很有帮助
    • 这很好,它工作得非常完美,但知道是否有一些资源可以准确地解释它是如何工作的? kubernetes.io/docs/concepts/services-networking/service/…
    • 我只需要记住将它放在正确的命名空间中,然后它就可以发挥作用了。
    【解决方案2】:

    对此有一个潜在的解决方案,称为 Telepresence,它允许将本地工作负载代理到集群中,就好像它实际上是在该 kube 集群中运行一样。

    【讨论】:

    • 谢谢,Telepresence 看起来很有趣。
    【解决方案3】:

    K8s 原生方法

    我在直接在 Kubernetes 中开发云原生软件时遇到了类似的问题。我们还研究了 Telepresence 和 Skaffold 等工具,但它们很难配置且非常耗时。

    这就是我与同事一起构建 DevSpace CLI 的原因:https://github.com/covexo/devspace

    随时查看并尝试一下。它允许您直接在 Kubernetes 中轻松运行所有工作负载,同时仍然能够使用您的桌面工具(本地终端、IDE、git 等)进行编程,从而解决您的类似问题。

    替代方案:Minikube 网络

    当你使用 minikube 时,你应该看看这个问题的答案:Routing an internal Kubernetes IP address to the host system

    替代方案:隧道

    您还可以通过 ngrok 之类的工具使用本地隧道:https://ngrok.com/(只需在本地启动它并从任何地方连接到您的 ngrok 地址)

    【讨论】:

      【解决方案4】:

      Mysql服务器要连接私网IP,这个私网IP可以在应用中使用。

      首选方式是创建kubernetes服务+endpoint指向Mysql Server IP。

      【讨论】:

      • 我认为您的建议与我链接的其他答案相同。不幸的是,Kubernetes 不允许我将端点指向环回地址上的 PostgreSQL 服务器 IP。我可以让它工作的唯一方法是在我不想做的主要网络接口上公开 PostgreSQL。
      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2021-09-19
      • 2021-09-25
      • 2019-05-25
      • 1970-01-01
      • 2019-06-02
      相关资源
      最近更新 更多