如何在Kubernetes上使用密码连接到PSQL

13

我想使用密码在Kubernetes上的kubectl exec命令中连接到psql。

kubectl exec -it postgres -- bash \`psql -h $IP -U admin --password password -p $PORT dbname\`

我尝试发出指令

kubectl exec -it $podid -- bash \`psql -h $IP -U admin --password -p $PORT postgresdb\`
kubectl exec -it $podid -- bash -c "psql -- dbname=postgresql://postgres:password@$ip:$port/postgresdb -c 'INSERT INTO public."user" (user_id,user_pw,user_nm,email,phone,is_admin) VALUES ('admin','admin','admin','admin@admin.com',NULL,true);'" 

但是这些命令没有生效。

我该如何使用kubernetes命令和密码连接到psql?

6个回答

15

尝试执行以下命令:
kubectl exec -it <postgresspod名称> bash或sh
当您进入容器后,只需执行以下操作:
PGPASSWORD=<密码>psql -h <主机名或服务名称或localhost> -U <用户名> <数据库名>

另一种选择是
kubectl exec -it postgres -- bash \`PGPASSWORD=<密码>psql -h <主机名或服务名称或localhost> -U <用户名> <数据库名>\`


第一行对我有效。但是,当我尝试在PowerShell中使用第二个解决方案时,我会收到“错误:未知的速记标志:'U' in -U”的提示。看起来尽管有转义符和反引号,kubectl仍然试图评估它,而不是将其传递给bash。 - DaReal

8

对于我来说,被接受的答案并没有奏效(命令PGPASSWORD=<...>未找到)。

以下方法有效:

kubectl  exec -ti postgres -- env PGPASSWORD=$PASSWD psql psql -h <host> -U <username> <dbname>

1
人救了我的一天,谢谢!我无法理解如何在不使用bash -c的情况下传递密码。 - gek

1

由于您只询问命令,我假设您已经拥有所有的部署、服务等。

请执行以下命令:

$ kubectl exec -ti <postgresspod-name> -- psql -h <node/host IP> -U postgresadmin --password -p <port> postgresdb
Password for user postgresadmin:

在输入密码后,您将连接到Postgres。


1
对我来说只有这个有效。
kubectl exec postgres-postgresql-0 -n nte -- sh -c 'PGPASSWORD=postgres psql -U "postgres" -d "database_name" -c "select * from table_name"'

0

传递参数--env "PGPASSWORD=$POSTRESQL_ADMIN_PASSWORD"非常顺利

kubectl run psql-client --rm -ti --restart=Never --namespace default --image bitnami/postgresql --env "PGPASSWORD=$POSTRESQL_ADMIN_PASSWORD" -- psql --port=5432 --dbname=postgres --username=$POSTRESQL_ADMIN_USERNAME --set=sslmode=require --host=$POSTRESQL_HOST -w

-2
你可以尝试这种方式:
kubectl exec -i <plsql podname> -- psql -h <host or service name or localhost> -u <username> -p<password>

2
这个不起作用。 “-p”选项意味着端口号,而不是密码。 - strangedeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接