无法连接到Kubernetes集群上的远程postgreSQL数据库



我目前正在OVH公共云上托管的Kubernetes集群上设置一个postgres实例。问题是我无法访问它。我知道我必须制作psql -h host -U user --password -p 30904 db才能连接,但问题是我不知道该放什么来代替主机。本地主机?主节点的ip?另一个ip?

谢谢你抽出时间。

postgres-deploy.yaml:

apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
type:
NodePort
ports:
- port: 5432
selector:
app: postgres
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: postgres
spec:
selector:
matchLabels:
app: postgres
strategy:
type: Recreate
template:
metadata:
labels:
app: postgres
spec:
containers:
- image: postgres:13.1
name: postgres
env:
- name: POSTGRES_DB
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_DB

name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_USER
name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: ident
key: POSTGRES_PASSWORD
ports:
- containerPort: 5432
name: postgres
volumeMounts:
- name: postgres-persistent-storage
mountPath: /var/lib/postgresql/data2
volumes:
- name: postgres-persistent-storage
persistentVolumeClaim:
claimName: postgres-pv-claim

我已经部署了您的YAMLs,并且能够连接。

--h中,您必须提供部署PostgreSQL吊舱的nodehost machine的IP。

测试用例

我已经在我的GKE集群上测试过了。

基于您的YAMLs和本教程。主要用于ConfigMapPV/PVC配置。

POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123

连接到PostgreSQL数据库

  • 1-来自SQL Pod
$ kubectl get po
NAME                        READY   STATUS    RESTARTS   AGE
postgres-5586dc9864-pwpsn   1/1     Running   0          37m

您必须从kubectl execPostgreSQL吊舱。

$ kubectl exec -ti postgres-5586dc9864-pwpsn -- bin/bash
root@postgres-5586dc9864-pwpsn:/#

使用psql命令连接database

root@postgres-5586dc9864-pwpsn:/# psql -p 5432 -U postgresadmin -d postgresdb
psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.
postgresdb=#
  • 2-来自集群

服务详细信息:

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.28.0.1    <none>        443/TCP          60m
postgres     NodePort    10.28.14.2   <none>        5432:31431/TCP   45m

吊舱详细信息:

$ kubectl get po -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP          NODE                                       NOMINATED NODE   READINESS GATES
postgres-5586dc9864-pwpsn   1/1     Running   0          41m   10.24.1.6   gke-cluster-1-default-pool-8baf2b67-jjjh   <none>           <none>

节点详细信息,部署PostgreSQL吊舱的位置。

$ kubectl get node -o wide | grep gke-cluster-1-default-pool-8baf2b67-jjjh
gke-cluster-1-default-pool-8baf2b67-jjjh   Ready    <none>   56m   v1.16.15-gke.4300   10.154.15.222   35.197.210.241   Container-Optimized OS from Google   4.19.112+        docker://19.3.1

部署PostgreSQL吊舱的nodeNodeIP地址为10.154.15.222

命令:

$ kubectl exec -ti <podname> -- psql -h <Internal IP address of hosting node> -U postgresadmin --password -p <nodeport number from service> <database name>

输出:

$ kubectl exec -ti postgres-5586dc9864-pwpsn -- psql -h 10.154.15.222 -U postgresadmin --password -p 31431 postgresdb
Password:
psql (13.1 (Debian 13.1-1.pgdg100+1))
Type "help" for help.
postgresdb=#

您可以尝试以下操作:

kubectl exec -it $(kubectl get pods -n %YOURNAMESPACE% | grep postgres | cut -d " " -f1) -n %YOURNAMESPACE% -- bash -c "psql -U postgres -c 'SELECT current_database()'"

或者,如果您在当前名称空间中需要,可以省略名称空间:

kubectl exec -it $(kubectl get pods | grep postgres | cut -d " " -f1) -n -- bash -c "psql -U postgres -c 'SELECT current_database()'"

最新更新