从 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 虚拟机和容器。 (我没有测试,但应该可以。)
我遇到这种情况,我想将 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 虚拟机和容器。 (我没有测试,但应该可以。)