【问题标题】:Access dockerized postgres database from minikube从 minikube 访问 dockerized postgres 数据库
【发布时间】:2021-12-30 06:58:20
【问题描述】:

我有这种情况,我想将在 docker 容器上运行的 postgres 数据库连接到在本地 kubernetes 集群 (minikube) 上运行的 pgadmin Web 客户端

我已经让 postgres 使用 docker,pgadmin 使用 kubernetes。

我可以通过网络浏览器访问 pgadmin (pgadminclient.com)

我可以从kubernetes外部访问容器中的postgres,但是我不能从kubernetes pgadmin访问postgres,我可以使用什么样的组件来实现连接并将正确的值放在这里

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin-deployment
  labels:
    app: pgadmin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgadmin
  template:
    metadata:
      labels:
        app: pgadmin
    spec:
      containers:
      - name: pgadmin4
        image: dpage/pgadmin4
        ports:
        - containerPort: 80
        env:
        - name: PGADMIN_DEFAULT_EMAIL
          value: rocco@mail.com
        - name: PGADMIN_DEFAULT_PASSWORD
          value: qwerty

---
apiVersion: v1
kind: Service
metadata:
    name: pgadmin-service
spec:
  selector:
    app: pgadmin
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pgadmin-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: pgadminclient.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: pgadmin-service
            port:
              number: 80

还有我的 docker-compose 文件

version: "3.8"

services:
  postgresdb:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data
    restart: always
    ports:
      - "5432:5432"
    environment:
      - DATABASE_HOST=127.0.0.1
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=qwerty
      - POSTGRES_DB=practicedb
    
volumes:
  db-data:

【问题讨论】:

  • 你也可以在 Kubernetes 中运行数据库吗?还是 Compose 中的 pgadmin?是什么促使这种设置同时使用多个容器运行时?
  • 嗨大卫!感谢您的评论。我可以在 kubernetes 中运行数据库,但是由于我正在学习,我想尝试并了解如何实现这样的连接。因为下一步我要做的是使用 AWS RDS 连接一个 postgres,所以数据库也将在集群之外。

标签: postgresql docker kubernetes pgadmin


【解决方案1】:

您的 minikube 集群使用的 VM 与 docker 在 windows/mac 上用于提供容器运行时的 VM 不同。这使得访问变得相当棘手。

但是由于您的用例是模拟集群外部的数据库,因此它的服务非常好。 您已经在外部公开了 docker 端口,因此您可以使用主机的外部 ip(来自 wifi、lan、...)作为 pgadmin 的主机。 minikube 将访问外部 ip/port,然后将其映射回 docker vm 和容器。 (我没有测试它,但它应该可以工作。)

【讨论】:

  • 您好托马斯,感谢您的回答!我会尝试这种方法!
  • 要添加到这个答案,通常它应该像这样工作,但是minikube驱动程序不应该是docker(在这种情况下它变得非常棘手,因为kubernetes组件将是docker中的docker)并且也取决于操作系统。例如。对于这种情况,我会使用 minikube driver 设置为 virtualbox。更多详情here
  • 哦,这就是我的情况,当我执行 docker ps 时,我可以看到我的 postgres 容器和 k8s-minikube,因此设置我的环境的更好方法是使用 VirtualBox 来使用minikube 对吧?
  • minikube-docker 设置不应更改任何内容,因为容器以相同的方式暴露在主机上。
  • Thomas 和 moonkotte 谢谢!最后我可以实现连接。我得到了容器的 IP,因为它被暴露了,并且只使用该 IP、数据库名称、用户和密码我就能够连接,我用 docker 删除了我的 minikube 并使用 VirtualBox 启动了一个新的,但我会再试一次只是为了练习 docker minikube。再次感谢您的帮助!
猜你喜欢
  • 2022-11-26
  • 2021-03-07
  • 2015-12-12
  • 2021-10-27
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多