[英]Cannot connect to remote postgreSQL database on Kubernetes cluster
我目前正在我的 Kubernetes 集群上設置一個 postgres 實例,該集群托管在 OVH 公共雲上。 問題是我無法訪問它。 我知道我必須讓psql -h host -U user --password -p 30904 db
連接,但問題是我不知道該放什么而不是host 。 本地主機? 主節點的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
你可以嘗試這樣的事情:
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()'"
我已經部署了您的YAMLs
,並且能夠連接。
在--h
中,您必須提供部署PostgreSQL
pod 的node
或host machine
的 IP。
我已經在我的 GKE 集群上對此進行了測試。
基於您的YAMLs
和本教程。 主要用於ConfigMap
和PV/PVC
配置。
POSTGRES_DB: postgresdb
POSTGRES_USER: postgresadmin
POSTGRES_PASSWORD: admin123
$ kubectl get po
NAME READY STATUS RESTARTS AGE
postgres-5586dc9864-pwpsn 1/1 Running 0 37m
你必須kubectl exec
到PostgreSQL
pod。
$ 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=#
服務詳情:
$ 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
pod。
$ 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
pod 的node
的NodeIP
地址為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>
Output:
$ 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=#
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.