无法连接Kubernetes Pod中的PostgreSQL数据库求助
PostgreSQL Helm部署密码认证失败排查
我通过Helm创建最小化PostgreSQL部署,设置管理员用户为postgres、普通用户为user,采用硬编码密码。Pod已正常创建,但无法访问数据库。
相关代码
Terraform代码
resource "helm_release" "postgres" { name = "pg-${var.namespace}" namespace = var.namespace chart = "postgresql" repository = "https://charts.bitnami.com/bitnami" version = "13.4.4" values = [templatefile("manifests/postgres-values.yaml", { fullnameOverride = "pg-${var.namespace}" pg_spot = var.pg_spot pg_affinity = var.pg_affinity pg_nodeSelector = var.pg_nodeSelector pg_tolerations = var.pg_tolerations db_pass = "postgres" })] set_sensitive { name = "db_pass" value = "postgres" } }
PostgreSQL Values配置(manifests/postgres-values.yaml)
fullnameOverride: ${fullnameOverride} global: storageClass: managed-csi postgresql: auth: postgresPassword: "postgresadmin" username: "user" password: "postgres" service: ports: postgresql: 5432 primary: resources: limits: cpu: 100m memory: 256Mi requests: cpu: 100m memory: 256Mi persistence: enabled: true size: 1Gi labels: purpose: pg persistentVolumeClaimRetentionPolicy: enabled: true whenDeleted: Retain ${indent(2, pg_nodeSelector)} ${indent(2, pg_tolerations)} architecture: standalone
问题现象
Helm Chart部署成功,Pod运行正常,但执行命令:
psql -h localhost -p 5432 -U postgres
输入密码postgresadmin时,报错:
psql: error: connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "postgres"
解决思路
1. 修正Values配置层级(核心问题)
Bitnami PostgreSQL Chart的auth配置是根层级参数,你当前把它嵌套在global.postgresql下,Chart无法识别该配置,导致postgres用户使用的是默认随机密码,而非你设置的postgresadmin。
修改后的postgres-values.yaml应将auth提到根层级:
fullnameOverride: ${fullnameOverride} global: storageClass: managed-csi postgresql: service: ports: postgresql: 5432 # 把auth移到根层级 auth: postgresPassword: "postgresadmin" username: "user" password: "postgres" primary: resources: limits: cpu: 100m memory: 256Mi requests: cpu: 100m memory: 256Mi persistence: enabled: true size: 1Gi labels: purpose: pg persistentVolumeClaimRetentionPolicy: enabled: true whenDeleted: Retain ${indent(2, pg_nodeSelector)} ${indent(2, pg_tolerations)} architecture: standalone
2. 清理旧数据并重新部署
由于启用了PersistentVolume,之前的数据库初始化数据已留存,修改配置后不会自动重置用户密码。需要:
- 删除对应的PVC:
kubectl delete pvc <postgres-pvc-name> - 重新执行Terraform部署:
terraform apply
3. 验证连接前置条件
使用localhost连接前,需确保已完成端口转发:
kubectl port-forward svc/pg-${var.namespace} 5432:5432 -n ${var.namespace}
4. 检查Pod内用户状态(可选)
若问题仍存在,可进入Pod直接验证用户信息:
- 进入Pod:
kubectl exec -it <postgres-pod-name> -n ${var.namespace} -- bash - 本地登录PostgreSQL(Pod内采用peer认证无需密码):
psql -U postgres - 查询用户列表:
SELECT usename FROM pg_user;
内容的提问来源于stack exchange,提问作者Marwen Taallah
相关产品推荐
相关产品推荐

