从 minikube 访问 dockerized postgres 数据库

Access dockerized postgres database from minikube

我遇到这种情况,我想将 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:

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

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